demod_mod: decimate/lowpass -Ofast speed-up

pull/49/head
Zilog80 2022-09-22 23:58:41 +02:00
rodzic f2402c3b3d
commit d7497540e2
5 zmienionych plików z 85 dodań i 5 usunięć

Wyświetl plik

@ -625,7 +625,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps
}
return (float complex)w;
}
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
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;
@ -635,6 +635,22 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps,
return (float complex)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
int S1 = s+1;
int S1N = S1-taps;
int n0 = taps-1-s;
for (n = 0; n < n0; n++) {
w += buffer[S1+n]*ws[n];
}
for (n = n0; n < taps; n++) {
w += buffer[S1N+n]*ws[n];
}
return w;
// symmetry: ws[n] == ws[taps-1-n]
}
static float re_lowpass0(float buffer[], ui32_t sample, ui32_t taps, float *ws) {
ui32_t n;

Wyświetl plik

@ -699,7 +699,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps
}
return (float complex)w;
}
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
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;
@ -709,6 +709,22 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps,
return (float complex)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
int S1 = s+1;
int S1N = S1-taps;
int n0 = taps-1-s;
for (n = 0; n < n0; n++) {
w += buffer[S1+n]*ws[n];
}
for (n = n0; n < taps; n++) {
w += buffer[S1N+n]*ws[n];
}
return w;
// symmetry: ws[n] == ws[taps-1-n]
}
static float re_lowpass0(float buffer[], ui32_t sample, ui32_t taps, float *ws) {
ui32_t n;

Wyświetl plik

@ -395,7 +395,7 @@ 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) {
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;
@ -405,6 +405,22 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps,
return (float complex)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
int S1 = s+1;
int S1N = S1-taps;
int n0 = taps-1-s;
for (n = 0; n < n0; n++) {
w += buffer[S1+n]*ws[n];
}
for (n = n0; n < taps; n++) {
w += buffer[S1N+n]*ws[n];
}
return w;
// symmetry: ws[n] == ws[taps-1-n]
}
static float re_lowpass(float buffer[], ui32_t sample, ui32_t taps, float *ws) {
ui32_t n;

Wyświetl plik

@ -733,7 +733,7 @@ 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) {
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;
@ -743,6 +743,22 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps,
return (float complex)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
int S1 = s+1;
int S1N = S1-taps;
int n0 = taps-1-s;
for (n = 0; n < n0; n++) {
w += buffer[S1+n]*ws[n];
}
for (n = n0; n < taps; n++) {
w += buffer[S1N+n]*ws[n];
}
return w;
// symmetry: ws[n] == ws[taps-1-n]
}
static float re_lowpass(float buffer[], ui32_t sample, ui32_t taps, float *ws) {
ui32_t n;

Wyświetl plik

@ -650,7 +650,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps
}
return (float complex)w;
}
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
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;
@ -660,6 +660,22 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps,
return (float complex)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
int S1 = s+1;
int S1N = S1-taps;
int n0 = taps-1-s;
for (n = 0; n < n0; n++) {
w += buffer[S1+n]*ws[n];
}
for (n = n0; n < taps; n++) {
w += buffer[S1N+n]*ws[n];
}
return w;
// symmetry: ws[n] == ws[taps-1-n]
}
static int f32buf_sample(FILE *fp, int inv) {