demod: lowpass cleanup

ui32_t n -> int n  helps -Ofast auto-vectorization
pull/53/head
Zilog80 2022-09-27 20:21:10 +02:00
rodzic 02a0fba03f
commit ba1e329322
8 zmienionych plików z 97 dodań i 65 usunięć

Wyświetl plik

@ -305,7 +305,7 @@ static int f32_cblk(dsp_t *dsp) {
int BL = dsp->decM * blk_sz;
int len = BL;
float x, y;
ui8_t s[4*2*BL]; //uin8,int16,flot32
ui8_t s[4*2*BL]; //uin8,int16,float32
ui8_t *u = (ui8_t*)s;
short *b = (short*)s;
float *f = (float*)s;
@ -488,20 +488,21 @@ 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) {
ui32_t n;
ui32_t s = sample % taps;
double complex w = 0;
//static __attribute__((optimize("-ffast-math"))) float complex lowpass()
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);
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]
}
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0; // -Ofast
static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0;
int n;
int s = sample % taps; // lpIQ
int s = sample % taps;
int S1 = s+1;
int S1N = S1-taps;
int n0 = taps-1-s;

Wyświetl plik

@ -336,7 +336,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;
@ -461,20 +461,21 @@ 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) {
ui32_t n;
ui32_t s = sample % taps;
double complex w = 0;
//static __attribute__((optimize("-ffast-math"))) float complex lowpass()
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);
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]
}
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0; // -Ofast
static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0;
int n;
int s = sample % taps; // lpIQ
int s = sample % taps;
int S1 = s+1;
int S1N = S1-taps;
int n0 = taps-1-s;

Wyświetl plik

@ -273,9 +273,18 @@ static int lowpass_init(float f, int taps, float **pws) {
return taps;
}
static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
ui32_t n;
double complex w = 0;
for (n = 0; n < taps; n++) {
w += buffer[(sample+n+1)%taps]*ws[taps-1-n];
}
return (float complex)w;
}
//static __attribute__((optimize("-ffast-math"))) float complex lowpass()
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0; // -Ofast
int n;
float complex w = 0;
int n; // -Ofast
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]

Wyświetl plik

@ -625,20 +625,20 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps
}
return (float complex)w;
}
static float complex lowpass1d(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
ui32_t n;
ui32_t s = sample % taps;
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);
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;
// symmetry: ws[n] == ws[taps-1-n]
}
//static __attribute__((optimize("-ffast-math"))) float complex lowpass1bf()
//static __attribute__((optimize("-ffast-math"))) float complex lowpass()
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0; // -Ofast
int n;
float complex w = 0;
int n; // -Ofast
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]
@ -646,11 +646,10 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t 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
float complex w = 0;
int n; // -Ofast
int s = sample % taps;
int S1 = s+1;
int S1N = S1-taps;
int n0 = taps-1-s;

Wyświetl plik

@ -699,20 +699,21 @@ 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) {
ui32_t n;
ui32_t s = sample % taps;
double complex w = 0;
//static __attribute__((optimize("-ffast-math"))) float complex lowpass()
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);
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]
}
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0; // -Ofast
int n;
int s = sample % taps; // lpIQ
static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0;
int n; // -Ofast
int s = sample % taps;
int S1 = s+1;
int S1N = S1-taps;
int n0 = taps-1-s;

Wyświetl plik

@ -394,18 +394,28 @@ static int lowpass_init(float f, int taps, float **pws) {
return taps;
}
static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
ui32_t n;
ui32_t s = sample % taps;
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);
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;
// symmetry: ws[n] == ws[taps-1-n]
}
//static __attribute__((optimize("-ffast-math"))) float complex lowpass()
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);
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 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

Wyświetl plik

@ -645,7 +645,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;
@ -732,21 +732,31 @@ static int lowpass_init(float f, int taps, float **pws) {
return taps;
}
static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
ui32_t n;
ui32_t s = sample % taps;
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);
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;
// symmetry: ws[n] == ws[taps-1-n]
}
//static __attribute__((optimize("-ffast-math"))) float complex lowpass()
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0; // -Ofast
float complex w = 0;
int n; // -Ofast
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 float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0;
int n;
int s = sample % taps; // lpIQ
int s = sample % taps;
int S1 = s+1;
int S1N = S1-taps;
int n0 = taps-1-s;

Wyświetl plik

@ -650,20 +650,21 @@ 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) {
ui32_t n;
ui32_t s = sample % taps;
double complex w = 0;
//static __attribute__((optimize("-ffast-math"))) float complex lowpass()
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);
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]
}
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0; // -Ofast
static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
float complex w = 0;
int n;
int s = sample % taps; // lpIQ
int s = sample % taps;
int S1 = s+1;
int S1N = S1-taps;
int n0 = taps-1-s;