Working interpolator.

feature/fir_interpolate_cc
ha7ilm 2017-02-19 16:06:08 +01:00
rodzic 9ef8cd4b45
commit 7e87ccb2a1
2 zmienionych plików z 5 dodań i 3 usunięć

2
csdr.c
Wyświetl plik

@ -860,7 +860,7 @@ int main(int argc, char *argv[])
sscanf(argv[2],"%d",&factor);
assert(factor >= 1);
float transition_bw = 0.05;
float transition_bw = 0.01;
if(argc>=4) sscanf(argv[3],"%g",&transition_bw);
assert(transition_bw >= 0 && transition_bw < 1.);

Wyświetl plik

@ -394,8 +394,10 @@ int fir_interpolate_cc(complexf *input, complexf *output, int input_size, int in
{
float acci=0;
float accq=0;
for(int ti=ip, si=0; ti<taps_length; ti+=interpolation, si++) acci += (iof(input,i+si)) * taps[ti]; //@fir_interpolate_cc: i loop
for(int ti=ip, si=0; ti<taps_length; ti+=interpolation, si++) accq += (qof(input,i+si)) * taps[ti]; //@fir_interpolate_cc: q loop
//int tistart = (interpolation-ip)%interpolation;
int tistart = (interpolation-ip); //why does this work? why don't we need the % part?
for(int ti=tistart, si=0; ti<taps_length; ti+=interpolation, si++) acci += (iof(input,i+si)) * taps[ti]; //@fir_interpolate_cc: i loop
for(int ti=tistart, si=0; ti<taps_length; ti+=interpolation, si++) accq += (qof(input,i+si)) * taps[ti]; //@fir_interpolate_cc: q loop
iof(output,oi)=acci;
qof(output,oi)=accq;
oi++;