From 02a0fba03fc99c6c2614d104b1f2b50f72b75fe4 Mon Sep 17 00:00:00 2001 From: Zilog80 Date: Tue, 27 Sep 2022 00:39:57 +0200 Subject: [PATCH] demod: lowpass reorder speedup --- demod/iq_svcl/iq_fm.c | 10 +++++----- demod/mod/demod_mod.c | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/demod/iq_svcl/iq_fm.c b/demod/iq_svcl/iq_fm.c index 1ae2d9d..16b2a28 100644 --- a/demod/iq_svcl/iq_fm.c +++ b/demod/iq_svcl/iq_fm.c @@ -274,13 +274,13 @@ static int lowpass_init(float f, int taps, float **pws) { } static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { - ui32_t n; - ui32_t s = sample % taps; - double complex w = 0; + float complex w = 0; // -Ofast + int n; + int S = taps-1 - (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 complex)w; + return w; // symmetry: ws[n] == ws[taps-1-n] } diff --git a/demod/mod/demod_mod.c b/demod/mod/demod_mod.c index 285eadb..197414f 100644 --- a/demod/mod/demod_mod.c +++ b/demod/mod/demod_mod.c @@ -465,7 +465,7 @@ static int f32read_cblock(dsp_t *dsp) { int n; int len; float x, y; - ui8_t s[4*2*dsp->decM]; //uin8,int16,flot32 + ui8_t s[4*2*dsp->decM]; //uin8,int16,float32 ui8_t *u = (ui8_t*)s; short *b = (short*)s; float *f = (float*)s; @@ -625,7 +625,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps } return (float complex)w; } -static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { +static float complex lowpass1d(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { ui32_t n; ui32_t s = sample % taps; double complex w = 0; @@ -635,7 +635,19 @@ static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps return (float complex)w; // symmetry: ws[n] == ws[taps-1-n] } +//static __attribute__((optimize("-ffast-math"))) float complex lowpass1bf() static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { + float complex w = 0; // -Ofast + int n; + int 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] + } + return w; +// symmetry: ws[n] == ws[taps-1-n] +} +//static __attribute__((optimize("-ffast-math"))) float complex lowpass2() +static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) { float complex w = 0; // -Ofast int n; int s = sample % taps; // lpIQ