From e995797201ffdfbf12cf7653f3e0d05ec83da178 Mon Sep 17 00:00:00 2001 From: Zilog80 Date: Tue, 4 Oct 2022 00:17:17 +0200 Subject: [PATCH] demod lowpass: minor correction, lpFM speedup --- demod/iq_svcl/iq_base.c | 8 ++++---- demod/iq_svcl/iq_dec.c | 24 ++++++++++++------------ demod/iq_svcl/iq_fm.c | 18 +++++++++--------- demod/mod/demod_mod.c | 36 ++++++++++++++++++------------------ demod/multi/demod_base.c | 24 ++++++++++++------------ imet/imet4iq.c | 22 +++++++++++----------- mk2a/mk2a1680mod.c | 24 ++++++++++++------------ scan/dft_detect.c | 12 ++++++------ 8 files changed, 84 insertions(+), 84 deletions(-) diff --git a/demod/iq_svcl/iq_base.c b/demod/iq_svcl/iq_base.c index b8161a3..00439eb 100644 --- a/demod/iq_svcl/iq_base.c +++ b/demod/iq_svcl/iq_base.c @@ -484,7 +484,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps ui32_t n; double complex w = 0; for (n = 0; n < taps; n++) { - w += buffer[(sample+n+1)%taps]*ws[taps-1-n]; + w += buffer[(sample+n)%taps]*ws[taps-1-n]; } return (float complex)w; } @@ -492,7 +492,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { float complex w = 0; int n; // -Ofast - int S = taps-1 - (sample % taps); + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } @@ -503,9 +503,9 @@ static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps float complex w = 0; int n; int s = sample % taps; - int S1 = s+1; + int S1 = s; int S1N = S1-taps; - int n0 = taps-1-s; + int n0 = taps-s; for (n = 0; n < n0; n++) { w += buffer[S1+n]*ws[n]; } diff --git a/demod/iq_svcl/iq_dec.c b/demod/iq_svcl/iq_dec.c index 09b9f2c..355d89c 100644 --- a/demod/iq_svcl/iq_dec.c +++ b/demod/iq_svcl/iq_dec.c @@ -457,7 +457,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps ui32_t n; double complex w = 0; for (n = 0; n < taps; n++) { - w += buffer[(sample+n+1)%taps]*ws[taps-1-n]; + w += buffer[(sample+n)%taps]*ws[taps-1-n]; } return (float complex)w; } @@ -465,7 +465,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { float complex w = 0; int n; // -Ofast - int S = taps-1 - (sample % taps); + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } @@ -476,9 +476,9 @@ static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps float complex w = 0; int n; int s = sample % taps; - int S1 = s+1; + int S1 = s; int S1N = S1-taps; - int n0 = taps-1-s; + int n0 = taps-s; for (n = 0; n < n0; n++) { w += buffer[S1+n]*ws[n]; } @@ -493,18 +493,18 @@ static float re_lowpass0(float buffer[], ui32_t sample, ui32_t taps, float *ws) ui32_t n; double w = 0; for (n = 0; n < taps; n++) { - w += buffer[(sample+n+1)%taps]*ws[taps-1-n]; + w += buffer[(sample+n)%taps]*ws[taps-1-n]; } return (float)w; } static float re_lowpass(float buffer[], ui32_t sample, ui32_t taps, float *ws) { - ui32_t n; - ui32_t s = sample % taps; - double w = 0; + float w = 0; + int n; + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { - w += buffer[n]*ws[taps+s-n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] + w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } - return (float)w; + return w; } @@ -578,7 +578,7 @@ static int if_fm(dsp_t *dsp, float complex *z_out, float *s) { // IF-lowpass if (dsp->opt_lp & LP_IQ) { dsp->lpIQ_buf[_sample % dsp->lpIQtaps] = z; - z = lowpass(dsp->lpIQ_buf, _sample, dsp->lpIQtaps, dsp->ws_lpIQ); + z = lowpass(dsp->lpIQ_buf, _sample+1, dsp->lpIQtaps, dsp->ws_lpIQ); } if (dsp->opt_fm) { @@ -590,7 +590,7 @@ static int if_fm(dsp_t *dsp, float complex *z_out, float *s) { if (dsp->opt_lp & LP_FM) { dsp->lpFM_buf[_sample % dsp->lpFMtaps] = s_fm; if (m+1 == dsp->decFM) { - s_fm = re_lowpass(dsp->lpFM_buf, _sample, dsp->lpFMtaps, dsp->ws_lpFM); + s_fm = re_lowpass(dsp->lpFM_buf, _sample+1, dsp->lpFMtaps, dsp->ws_lpFM); } } } diff --git a/demod/iq_svcl/iq_fm.c b/demod/iq_svcl/iq_fm.c index 7185dc4..cd6e6c5 100644 --- a/demod/iq_svcl/iq_fm.c +++ b/demod/iq_svcl/iq_fm.c @@ -277,7 +277,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps ui32_t n; double complex w = 0; for (n = 0; n < taps; n++) { - w += buffer[(sample+n+1)%taps]*ws[taps-1-n]; + w += buffer[(sample+n)%taps]*ws[taps-1-n]; } return (float complex)w; } @@ -285,7 +285,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { float complex w = 0; int n; // -Ofast - int S = taps-1 - (sample % taps); + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } @@ -294,13 +294,13 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, } static float re_lowpass(float buffer[], ui32_t sample, ui32_t taps, float *ws) { - ui32_t n; - ui32_t s = sample % taps; - double w = 0; + float w = 0; + int n; + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { - w += buffer[n]*ws[taps+s-n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] + w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } - return (float)w; + return w; } /* -------------------------------------------------------------------------- */ @@ -384,7 +384,7 @@ static int fm_demod(dsp_t *dsp, float *s) { if ( f32read_csample(dsp, &z) == EOF ) return EOF; dsp->lpIQ_buf[_sample % dsp->lpIQtaps] = z; - z1 = lowpass(dsp->lpIQ_buf, _sample, dsp->lpIQtaps, dsp->ws_lpIQ); + z1 = lowpass(dsp->lpIQ_buf, _sample+1, dsp->lpIQtaps, dsp->ws_lpIQ); w = z1 * conj(z0); s_fm = gain * carg(w)/M_PI; @@ -395,7 +395,7 @@ static int fm_demod(dsp_t *dsp, float *s) { if (dsp->opt_lp & LP_FM) { dsp->lpFM_buf[_sample % dsp->lpFMtaps] = s_fm; if (m+1 == dsp->decFM) { - s_fm = re_lowpass(dsp->lpFM_buf, _sample, dsp->lpFMtaps, dsp->ws_lpFM); + s_fm = re_lowpass(dsp->lpFM_buf, _sample+1, dsp->lpFMtaps, dsp->ws_lpFM); } } diff --git a/demod/mod/demod_mod.c b/demod/mod/demod_mod.c index 0b1dc0c..38d8f5c 100644 --- a/demod/mod/demod_mod.c +++ b/demod/mod/demod_mod.c @@ -618,17 +618,17 @@ static int lowpass_update(float f, int taps, float *ws) { } static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { - ui32_t n; + ui32_t n; // sample: oldest_sample double complex w = 0; for (n = 0; n < taps; n++) { - w += buffer[(sample+n+1)%taps]*ws[taps-1-n]; + w += buffer[(sample+n)%taps]*ws[taps-1-n]; } return (float complex)w; } static float complex lowpass1a(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { double complex w = 0; ui32_t n; - ui32_t S = taps + (sample % taps); + ui32_t S = taps-1 + (sample % taps); for (n = 0; n < taps; n++) { w += buffer[n]*ws[S-n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } @@ -639,7 +639,7 @@ static float complex lowpass1a(float complex buffer[], ui32_t sample, ui32_t tap static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { float complex w = 0; int n; // -Ofast - int S = taps-1 - (sample % taps); + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } @@ -650,9 +650,9 @@ static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps float complex w = 0; int n; // -Ofast int s = sample % taps; - int S1 = s+1; + int S1 = s; int S1N = S1-taps; - int n0 = taps-1-s; + int n0 = taps-s; for (n = 0; n < n0; n++) { w += buffer[S1+n]*ws[n]; } @@ -664,16 +664,16 @@ static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps } static float complex lowpass0_sym(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { ui32_t n; - double complex w = buffer[(sample+(taps+1)/2) % taps]*ws[(taps-1)/2]; // (N+1)/2 = (N-1)/2 + 1 + double complex w = buffer[(sample+(taps-1)/2) % taps]*ws[(taps-1)/2]; // (N+1)/2 = (N-1)/2 + 1 for (n = 0; n < (taps-1)/2; n++) { - w += (buffer[(sample+n+1)%taps]+buffer[(sample+taps-n)%taps])*ws[n]; + w += (buffer[(sample+n)%taps]+buffer[(sample+taps-n-1)%taps])*ws[n]; } return (float complex)w; } static float complex lowpass2_sym(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { float complex w = 0; int n; - int s = (sample+1) % taps; // lpIQ + int s = sample % taps; // lpIQ int SW = (taps-1)/2; int B1 = s + SW; int n1 = SW - s; @@ -704,18 +704,18 @@ static float re_lowpass0(float buffer[], ui32_t sample, ui32_t taps, float *ws) ui32_t n; double w = 0; for (n = 0; n < taps; n++) { - w += buffer[(sample+n+1)%taps]*ws[taps-1-n]; + w += buffer[(sample+n)%taps]*ws[taps-1-n]; } return (float)w; } static float re_lowpass(float buffer[], ui32_t sample, ui32_t taps, float *ws) { - ui32_t n; - ui32_t s = sample % taps; - double w = 0; + float w = 0; + int n; + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { - w += buffer[n]*ws[taps+s-n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] + w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } - return (float)w; + return w; } @@ -750,7 +750,7 @@ int f32buf_sample(dsp_t *dsp, int inv) { } if (dsp->decM > 1) { - z = lowpass(dsp->decXbuffer, dsp->sample_decX, dsp->dectaps, ws_dec); + z = lowpass(dsp->decXbuffer, dsp->sample_decX, dsp->dectaps, ws_dec); // oldest sample: dsp->sample_decX } } else if ( f32read_csample(dsp, &z) == EOF ) return EOF; @@ -764,7 +764,7 @@ int f32buf_sample(dsp_t *dsp, int inv) { // IF-lowpass if (dsp->opt_lp & LP_IQ) { dsp->lpIQ_buf[dsp->sample_in % dsp->lpIQtaps] = z; - z = lowpass(dsp->lpIQ_buf, dsp->sample_in, dsp->lpIQtaps, dsp->ws_lpIQ); + z = lowpass(dsp->lpIQ_buf, dsp->sample_in+1, dsp->lpIQtaps, dsp->ws_lpIQ); } @@ -842,7 +842,7 @@ int f32buf_sample(dsp_t *dsp, int inv) { // FM-lowpass if (dsp->opt_lp & LP_FM) { dsp->lpFM_buf[dsp->sample_in % dsp->lpFMtaps] = s_fm; - s_fm = re_lowpass(dsp->lpFM_buf, dsp->sample_in, dsp->lpFMtaps, dsp->ws_lpFM); + s_fm = re_lowpass(dsp->lpFM_buf, dsp->sample_in+1, dsp->lpFMtaps, dsp->ws_lpFM); if (dsp->opt_iq < 2) s = s_fm; } diff --git a/demod/multi/demod_base.c b/demod/multi/demod_base.c index 898424a..3e39b1f 100644 --- a/demod/multi/demod_base.c +++ b/demod/multi/demod_base.c @@ -695,7 +695,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps ui32_t n; double complex w = 0; for (n = 0; n < taps; n++) { - w += buffer[(sample+n+1)%taps]*ws[taps-1-n]; + w += buffer[(sample+n)%taps]*ws[taps-1-n]; } return (float complex)w; } @@ -703,7 +703,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { float complex w = 0; int n; // -Ofast - int S = taps-1 - (sample % taps); + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } @@ -714,9 +714,9 @@ static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps float complex w = 0; int n; // -Ofast int s = sample % taps; - int S1 = s+1; + int S1 = s; int S1N = S1-taps; - int n0 = taps-1-s; + int n0 = taps-s; for (n = 0; n < n0; n++) { w += buffer[S1+n]*ws[n]; } @@ -731,18 +731,18 @@ static float re_lowpass0(float buffer[], ui32_t sample, ui32_t taps, float *ws) ui32_t n; double w = 0; for (n = 0; n < taps; n++) { - w += buffer[(sample+n+1)%taps]*ws[taps-1-n]; + w += buffer[(sample+n)%taps]*ws[taps-1-n]; } return (float)w; } static float re_lowpass(float buffer[], ui32_t sample, ui32_t taps, float *ws) { - ui32_t n; - ui32_t s = sample % taps; - double w = 0; + float w = 0; + int n; + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { - w += buffer[n]*ws[taps+s-n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] + w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } - return (float)w; + return w; } @@ -784,7 +784,7 @@ int f32buf_sample(dsp_t *dsp, int inv) { // IF-lowpass if (dsp->opt_lp) { dsp->lpIQ_buf[dsp->sample_in % dsp->lpIQtaps] = z; - z = lowpass(dsp->lpIQ_buf, dsp->sample_in, dsp->lpIQtaps, dsp->ws_lpIQ); + z = lowpass(dsp->lpIQ_buf, dsp->sample_in+1, dsp->lpIQtaps, dsp->ws_lpIQ); } @@ -798,7 +798,7 @@ int f32buf_sample(dsp_t *dsp, int inv) { // FM-lowpass if (dsp->opt_lp) { dsp->lpFM_buf[dsp->sample_in % dsp->lpFMtaps] = s; - s = re_lowpass(dsp->lpFM_buf, dsp->sample_in, dsp->lpFMtaps, dsp->ws_lpFM); + s = re_lowpass(dsp->lpFM_buf, dsp->sample_in+1, dsp->lpFMtaps, dsp->ws_lpFM); } dsp->fm_buffer[dsp->sample_in % dsp->M] = s; diff --git a/imet/imet4iq.c b/imet/imet4iq.c index 9c82e3d..b96d432 100644 --- a/imet/imet4iq.c +++ b/imet/imet4iq.c @@ -397,7 +397,7 @@ static int lowpass_init(float f, int taps, float **pws) { static float complex lowpass1a(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { double complex w = 0; ui32_t n; - ui32_t S = taps + (sample % taps); + ui32_t S = taps-1 + (sample % taps); for (n = 0; n < taps; n++) { w += buffer[n]*ws[S-n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } @@ -408,7 +408,7 @@ static float complex lowpass1a(float complex buffer[], ui32_t sample, ui32_t tap static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { float complex w = 0; int n; // -Ofast - int S = taps-1 - (sample % taps); + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } @@ -419,9 +419,9 @@ static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps float complex w = 0; // -Ofast int n; int s = sample % taps; // lpIQ - int S1 = s+1; + int S1 = s; int S1N = S1-taps; - int n0 = taps-1-s; + int n0 = taps-s; for (n = 0; n < n0; n++) { w += buffer[S1+n]*ws[n]; } @@ -433,13 +433,13 @@ static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps } static float re_lowpass(float buffer[], ui32_t sample, ui32_t taps, float *ws) { - ui32_t n; - ui32_t s = sample % taps; - double w = 0; + float w = 0; + int n; + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { - w += buffer[n]*ws[taps+s-n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] + w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } - return (float)w; + return w; } static @@ -498,7 +498,7 @@ int f32_sample(dsp_t *dsp, float *out) { // IF-lowpass if (dsp->opt_lp & LP_IQ) { dsp->lpIQ_buf[_sample % dsp->lpIQtaps] = z; - z = lowpass(dsp->lpIQ_buf, _sample, dsp->lpIQtaps, dsp->ws_lpIQ); + z = lowpass(dsp->lpIQ_buf, _sample+1, dsp->lpIQtaps, dsp->ws_lpIQ); } @@ -520,7 +520,7 @@ int f32_sample(dsp_t *dsp, float *out) { if (dsp->opt_lp & LP_FM) { dsp->lpFM_buf[_sample % dsp->lpFMtaps] = s_fm; if (m+1 == decFM) { - s_fm = re_lowpass(dsp->lpFM_buf, _sample, dsp->lpFMtaps, dsp->ws_lpFM); + s_fm = re_lowpass(dsp->lpFM_buf, _sample+1, dsp->lpFMtaps, dsp->ws_lpFM); if (dsp->opt_iq < 2 || dsp->opt_iq > 5) s = s_fm; //opt_iq==0,1,6 } } diff --git a/mk2a/mk2a1680mod.c b/mk2a/mk2a1680mod.c index 5dad2d8..8599486 100644 --- a/mk2a/mk2a1680mod.c +++ b/mk2a/mk2a1680mod.c @@ -735,7 +735,7 @@ static int lowpass_init(float f, int taps, float **pws) { static float complex lowpass1a(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { double complex w = 0; ui32_t n; - ui32_t S = taps + (sample % taps); + ui32_t S = taps-1 + (sample % taps); for (n = 0; n < taps; n++) { w += buffer[n]*ws[S-n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } @@ -746,7 +746,7 @@ static float complex lowpass1a(float complex buffer[], ui32_t sample, ui32_t tap static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { float complex w = 0; int n; // -Ofast - int S = taps-1 - (sample % taps); + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } @@ -757,9 +757,9 @@ static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps float complex w = 0; int n; int s = sample % taps; - int S1 = s+1; + int S1 = s; int S1N = S1-taps; - int n0 = taps-1-s; + int n0 = taps-s; for (n = 0; n < n0; n++) { w += buffer[S1+n]*ws[n]; } @@ -771,13 +771,13 @@ static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps } static float re_lowpass(float buffer[], ui32_t sample, ui32_t taps, float *ws) { - ui32_t n; - ui32_t s = sample % taps; - double w = 0; + float w = 0; + int n; + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { - w += buffer[n]*ws[taps+s-n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] + w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } - return (float)w; + return w; } @@ -835,7 +835,7 @@ int f32buf_sample(dsp_t *dsp, int inv) { // IF-lowpass if (dsp->opt_lp & LP_IQ) { dsp->lpIQ_buf[_sample % dsp->lpIQtaps] = z; - z = lowpass(dsp->lpIQ_buf, _sample, dsp->lpIQtaps, dsp->ws_lpIQ); + z = lowpass(dsp->lpIQ_buf, _sample+1, dsp->lpIQtaps, dsp->ws_lpIQ); } @@ -919,7 +919,7 @@ int f32buf_sample(dsp_t *dsp, int inv) { if (dsp->opt_lp & LP_FM) { dsp->lpFM_buf[_sample % dsp->lpFMtaps] = s_fm; if (m+1 == decFM) { - s_fm = re_lowpass(dsp->lpFM_buf, _sample, dsp->lpFMtaps, dsp->ws_lpFM); + s_fm = re_lowpass(dsp->lpFM_buf, _sample+1, dsp->lpFMtaps, dsp->ws_lpFM); if (dsp->opt_iq < 2 || dsp->opt_iq > 5) s = s_fm; //opt_iq==0,1,6 } } @@ -928,7 +928,7 @@ int f32buf_sample(dsp_t *dsp, int inv) { if (dsp->opt_lp & LP_IQFM) { // opt_iq==5 dsp->lpIQFM_buf[_sample % dsp->lpIQFMtaps] = s; if (m+1 == decFM) { - s = re_lowpass(dsp->lpIQFM_buf, _sample, dsp->lpIQFMtaps, dsp->ws_lpIQFM); + s = re_lowpass(dsp->lpIQFM_buf, _sample+1, dsp->lpIQFMtaps, dsp->ws_lpIQFM); } } diff --git a/scan/dft_detect.c b/scan/dft_detect.c index 42b32c2..65b2646 100644 --- a/scan/dft_detect.c +++ b/scan/dft_detect.c @@ -646,7 +646,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps ui32_t n; double complex w = 0; for (n = 0; n < taps; n++) { - w += buffer[(sample+n+1)%taps]*ws[taps-1-n]; + w += buffer[(sample+n)%taps]*ws[taps-1-n]; } return (float complex)w; } @@ -654,7 +654,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { float complex w = 0; int n; // -Ofast - int S = taps-1 - (sample % taps); + int S = taps - (sample % taps); for (n = 0; n < taps; n++) { w += buffer[n]*ws[S+n]; // ws[taps+s-n] = ws[(taps+sample-n)%taps] } @@ -665,9 +665,9 @@ static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps float complex w = 0; int n; int s = sample % taps; - int S1 = s+1; + int S1 = s; int S1N = S1-taps; - int n0 = taps-1-s; + int n0 = taps-s; for (n = 0; n < n0; n++) { w += buffer[S1+n]*ws[n]; } @@ -711,8 +711,8 @@ static int f32buf_sample(FILE *fp, int inv) { // b) 3 FM-streams // lpIQ_buf[sample_in % dsp__lpIQtaps] = z; - z_fm0 = lowpass(lpIQ_buf, sample_in, dsp__lpIQtaps, ws_lpIQ[0]); - z_fm1 = lowpass(lpIQ_buf, sample_in, dsp__lpIQtaps, ws_lpIQ[1]); + z_fm0 = lowpass(lpIQ_buf, sample_in+1, dsp__lpIQtaps, ws_lpIQ[0]); + z_fm1 = lowpass(lpIQ_buf, sample_in+1, dsp__lpIQtaps, ws_lpIQ[1]); // IQ: different modulation indices h=h(rs) -> FM-demod w = z_fm0 * conj(z0_fm0);