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 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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Ładowanie…
Reference in New Issue