diff --git a/libraries/AP_InertialSensor/AP_InertialSensor.cpp b/libraries/AP_InertialSensor/AP_InertialSensor.cpp index b0bc11aaca935c..77861ccf3135e5 100644 --- a/libraries/AP_InertialSensor/AP_InertialSensor.cpp +++ b/libraries/AP_InertialSensor/AP_InertialSensor.cpp @@ -1059,8 +1059,10 @@ AP_InertialSensor::init(uint16_t loop_rate) notch.filter[i].allocate_filters(notch.num_dynamic_notches, notch.params.harmonics(), double_notch ? 2 : triple_notch ? 3 : 1); // initialise default settings, these will be subsequently changed in AP_InertialSensor_Backend::update_gyro() - notch.filter[i].init(_gyro_raw_sample_rates[i], notch.calculated_notch_freq_hz[0], - notch.params.bandwidth_hz(), notch.params.attenuation_dB()); + notch.filter[i].init(_gyro_raw_sample_rates[i], + notch.params.center_freq_hz(), + notch.params.bandwidth_hz(), + notch.params.attenuation_dB()); } } } @@ -1789,13 +1791,17 @@ void AP_InertialSensor::HarmonicNotch::update_params(uint8_t instance, bool conv (params.tracking_mode() == HarmonicNotchDynamicMode::Fixed && !is_equal(last_center_freq_hz[instance], center_freq)) || converging) { filter[instance].init(gyro_rate, - center_freq, + params.center_freq_hz(), params.bandwidth_hz(), params.attenuation_dB()); last_center_freq_hz[instance] = center_freq; last_bandwidth_hz[instance] = params.bandwidth_hz(); last_attenuation_dB[instance] = params.attenuation_dB(); - } else if (params.tracking_mode() != HarmonicNotchDynamicMode::Fixed) { + } + if (params.tracking_mode() != HarmonicNotchDynamicMode::Fixed) { + // we always call the update for non-fixed notches, even if we + // just called init() as the update may use a different + // frequency to the init if (num_calculated_notch_frequencies > 1) { filter[instance].update(num_calculated_notch_frequencies, calculated_notch_freq_hz); } else {