kopia lustrzana https://github.com/rs1729/RS
demod: lowpass cleanup
ui32_t n -> int n helps -Ofast auto-vectorizationpull/53/head
rodzic
02a0fba03f
commit
ba1e329322
|
@ -305,7 +305,7 @@ static int f32_cblk(dsp_t *dsp) {
|
||||||
int BL = dsp->decM * blk_sz;
|
int BL = dsp->decM * blk_sz;
|
||||||
int len = BL;
|
int len = BL;
|
||||||
float x, y;
|
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;
|
ui8_t *u = (ui8_t*)s;
|
||||||
short *b = (short*)s;
|
short *b = (short*)s;
|
||||||
float *f = (float*)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;
|
return (float complex)w;
|
||||||
}
|
}
|
||||||
static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
//static __attribute__((optimize("-ffast-math"))) float complex lowpass()
|
||||||
ui32_t n;
|
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
||||||
ui32_t s = sample % taps;
|
float complex w = 0;
|
||||||
double complex w = 0;
|
int n; // -Ofast
|
||||||
|
int S = taps-1 - (sample % taps);
|
||||||
for (n = 0; n < taps; n++) {
|
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]
|
// symmetry: ws[n] == ws[taps-1-n]
|
||||||
}
|
}
|
||||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
||||||
float complex w = 0; // -Ofast
|
float complex w = 0;
|
||||||
int n;
|
int n;
|
||||||
int s = sample % taps; // lpIQ
|
int s = sample % taps;
|
||||||
int S1 = s+1;
|
int S1 = s+1;
|
||||||
int S1N = S1-taps;
|
int S1N = S1-taps;
|
||||||
int n0 = taps-1-s;
|
int n0 = taps-1-s;
|
||||||
|
|
|
@ -336,7 +336,7 @@ static int f32read_cblock(dsp_t *dsp) {
|
||||||
int n;
|
int n;
|
||||||
int len;
|
int len;
|
||||||
float x, y;
|
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;
|
ui8_t *u = (ui8_t*)s;
|
||||||
short *b = (short*)s;
|
short *b = (short*)s;
|
||||||
float *f = (float*)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;
|
return (float complex)w;
|
||||||
}
|
}
|
||||||
static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
//static __attribute__((optimize("-ffast-math"))) float complex lowpass()
|
||||||
ui32_t n;
|
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
||||||
ui32_t s = sample % taps;
|
float complex w = 0;
|
||||||
double complex w = 0;
|
int n; // -Ofast
|
||||||
|
int S = taps-1 - (sample % taps);
|
||||||
for (n = 0; n < taps; n++) {
|
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]
|
// symmetry: ws[n] == ws[taps-1-n]
|
||||||
}
|
}
|
||||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
||||||
float complex w = 0; // -Ofast
|
float complex w = 0;
|
||||||
int n;
|
int n;
|
||||||
int s = sample % taps; // lpIQ
|
int s = sample % taps;
|
||||||
int S1 = s+1;
|
int S1 = s+1;
|
||||||
int S1N = S1-taps;
|
int S1N = S1-taps;
|
||||||
int n0 = taps-1-s;
|
int n0 = taps-1-s;
|
||||||
|
|
|
@ -273,9 +273,18 @@ static int lowpass_init(float f, int taps, float **pws) {
|
||||||
return taps;
|
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) {
|
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;
|
int n; // -Ofast
|
||||||
int S = taps-1 - (sample % taps);
|
int S = taps-1 - (sample % taps);
|
||||||
for (n = 0; n < taps; n++) {
|
for (n = 0; n < taps; n++) {
|
||||||
w += buffer[n]*ws[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]
|
||||||
|
|
|
@ -625,20 +625,20 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps
|
||||||
}
|
}
|
||||||
return (float complex)w;
|
return (float complex)w;
|
||||||
}
|
}
|
||||||
static float complex lowpass1d(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
static float complex lowpass1a(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
||||||
ui32_t n;
|
|
||||||
ui32_t s = sample % taps;
|
|
||||||
double complex w = 0;
|
double complex w = 0;
|
||||||
|
ui32_t n;
|
||||||
|
ui32_t S = taps + (sample % taps);
|
||||||
for (n = 0; n < taps; n++) {
|
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 (float complex)w;
|
||||||
// symmetry: ws[n] == ws[taps-1-n]
|
// 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) {
|
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;
|
int n; // -Ofast
|
||||||
int S = taps-1 - (sample % taps);
|
int S = taps-1 - (sample % taps);
|
||||||
for (n = 0; n < taps; n++) {
|
for (n = 0; n < taps; n++) {
|
||||||
w += buffer[n]*ws[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]
|
||||||
|
@ -646,11 +646,10 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps,
|
||||||
return w;
|
return w;
|
||||||
// symmetry: ws[n] == ws[taps-1-n]
|
// 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) {
|
static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
||||||
float complex w = 0; // -Ofast
|
float complex w = 0;
|
||||||
int n;
|
int n; // -Ofast
|
||||||
int s = sample % taps; // lpIQ
|
int s = sample % taps;
|
||||||
int S1 = s+1;
|
int S1 = s+1;
|
||||||
int S1N = S1-taps;
|
int S1N = S1-taps;
|
||||||
int n0 = taps-1-s;
|
int n0 = taps-1-s;
|
||||||
|
|
|
@ -699,20 +699,21 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps
|
||||||
}
|
}
|
||||||
return (float complex)w;
|
return (float complex)w;
|
||||||
}
|
}
|
||||||
static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
//static __attribute__((optimize("-ffast-math"))) float complex lowpass()
|
||||||
ui32_t n;
|
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
||||||
ui32_t s = sample % taps;
|
float complex w = 0;
|
||||||
double complex w = 0;
|
int n; // -Ofast
|
||||||
|
int S = taps-1 - (sample % taps);
|
||||||
for (n = 0; n < taps; n++) {
|
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]
|
// symmetry: ws[n] == ws[taps-1-n]
|
||||||
}
|
}
|
||||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
||||||
float complex w = 0; // -Ofast
|
float complex w = 0;
|
||||||
int n;
|
int n; // -Ofast
|
||||||
int s = sample % taps; // lpIQ
|
int s = sample % taps;
|
||||||
int S1 = s+1;
|
int S1 = s+1;
|
||||||
int S1N = S1-taps;
|
int S1N = S1-taps;
|
||||||
int n0 = taps-1-s;
|
int n0 = taps-1-s;
|
||||||
|
|
|
@ -394,18 +394,28 @@ static int lowpass_init(float f, int taps, float **pws) {
|
||||||
return taps;
|
return taps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static float complex lowpass1a(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;
|
double complex w = 0;
|
||||||
|
ui32_t n;
|
||||||
|
ui32_t S = taps + (sample % taps);
|
||||||
for (n = 0; n < taps; n++) {
|
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 (float complex)w;
|
||||||
// symmetry: ws[n] == ws[taps-1-n]
|
// 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) {
|
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
|
float complex w = 0; // -Ofast
|
||||||
int n;
|
int n;
|
||||||
int s = sample % taps; // lpIQ
|
int s = sample % taps; // lpIQ
|
||||||
|
|
|
@ -645,7 +645,7 @@ static int f32read_cblock(dsp_t *dsp) {
|
||||||
int n;
|
int n;
|
||||||
int len;
|
int len;
|
||||||
float x, y;
|
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;
|
ui8_t *u = (ui8_t*)s;
|
||||||
short *b = (short*)s;
|
short *b = (short*)s;
|
||||||
float *f = (float*)s;
|
float *f = (float*)s;
|
||||||
|
@ -732,21 +732,31 @@ static int lowpass_init(float f, int taps, float **pws) {
|
||||||
return taps;
|
return taps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static float complex lowpass1a(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;
|
double complex w = 0;
|
||||||
|
ui32_t n;
|
||||||
|
ui32_t S = taps + (sample % taps);
|
||||||
for (n = 0; n < taps; n++) {
|
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 (float complex)w;
|
||||||
// symmetry: ws[n] == ws[taps-1-n]
|
// 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) {
|
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 n;
|
||||||
int s = sample % taps; // lpIQ
|
int s = sample % taps;
|
||||||
int S1 = s+1;
|
int S1 = s+1;
|
||||||
int S1N = S1-taps;
|
int S1N = S1-taps;
|
||||||
int n0 = taps-1-s;
|
int n0 = taps-1-s;
|
||||||
|
|
|
@ -650,20 +650,21 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps
|
||||||
}
|
}
|
||||||
return (float complex)w;
|
return (float complex)w;
|
||||||
}
|
}
|
||||||
static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
//static __attribute__((optimize("-ffast-math"))) float complex lowpass()
|
||||||
ui32_t n;
|
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
||||||
ui32_t s = sample % taps;
|
float complex w = 0;
|
||||||
double complex w = 0;
|
int n; // -Ofast
|
||||||
|
int S = taps-1 - (sample % taps);
|
||||||
for (n = 0; n < taps; n++) {
|
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]
|
// symmetry: ws[n] == ws[taps-1-n]
|
||||||
}
|
}
|
||||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
static float complex lowpass2(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
|
||||||
float complex w = 0; // -Ofast
|
float complex w = 0;
|
||||||
int n;
|
int n;
|
||||||
int s = sample % taps; // lpIQ
|
int s = sample % taps;
|
||||||
int S1 = s+1;
|
int S1 = s+1;
|
||||||
int S1N = S1-taps;
|
int S1N = S1-taps;
|
||||||
int n0 = taps-1-s;
|
int n0 = taps-1-s;
|
||||||
|
|
Ładowanie…
Reference in New Issue