From 1dfcb58d4eda2c5c3ca8283f1467b6100460daed Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sun, 11 Oct 2015 12:39:26 +0200 Subject: [PATCH] Update loop filter to take into account ratio; based on email from Fons Adriaensen. --- resampler.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/resampler.cpp b/resampler.cpp index 5731465..efa0f17 100644 --- a/resampler.cpp +++ b/resampler.cpp @@ -90,14 +90,11 @@ void Resampler::get_output_samples(double pts, float *samples, ssize_t num_sampl // The loop bandwidth starts at 1.0 Hz, then goes down to 0.05 Hz after four seconds. double loop_bandwidth_hz = (k_a0 < 4 * freq_in) ? 1.0 : 0.05; - // Set first filter much wider than the first one (20x as wide). - double w = (2.0 * M_PI) * 20.0 * loop_bandwidth_hz * num_samples / freq_out; - double w0 = 1.0 - exp(-w); - - // Set second filter. - w = (2.0 * M_PI) * loop_bandwidth_hz * ratio / freq_out; - double w1 = w * 1.6; - double w2 = w * num_samples / 1.6; + // Set filters. The first filter much wider than the first one (20x as wide). + double w = (2.0 * M_PI) * loop_bandwidth_hz * num_samples / freq_out; + double w0 = 1.0 - exp(-20.0 * w); + double w1 = w * 1.5 / num_samples / ratio; + double w2 = w / 1.5; // Filter through the loop filter to find the correction ratio. z1 += w0 * (w1 * err - z1); -- 2.39.2