firdes_carrier_c to firdes_add_carrier_c
This commit is contained in:
parent
cdc2996dcc
commit
874d6b7c06
3 changed files with 16 additions and 10 deletions
4
csdr.c
4
csdr.c
|
@ -2721,10 +2721,10 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
int octave=(argc>=6 && !strcmp("--octave",argv[5]));
|
int octave=(argc>=6 && !strcmp("--octave",argv[5]));
|
||||||
|
|
||||||
complexf* taps=(complexf*)malloc(sizeof(complexf)*length);
|
complexf* taps=(complexf*)calloc(sizeof(complexf),length);
|
||||||
|
|
||||||
//Make the filter
|
//Make the filter
|
||||||
firdes_carrier_c(taps, length, rate, window);
|
firdes_add_carrier_c(taps, length, rate, window);
|
||||||
|
|
||||||
//Do the output
|
//Do the output
|
||||||
if(octave) printf("taps=[");
|
if(octave) printf("taps=[");
|
||||||
|
|
20
libcsdr.c
20
libcsdr.c
|
@ -2009,17 +2009,18 @@ void simple_agc_cc(complexf* input, complexf* output, int input_size, float rate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void firdes_carrier_c(complexf* output, int length, float rate, window_t window)
|
void firdes_add_carrier_c(complexf* output, int length, float rate, window_t window)
|
||||||
{
|
{
|
||||||
|
complexf* taps = (complexf*)malloc(sizeof(complexf)*length);
|
||||||
int middle=length/2;
|
int middle=length/2;
|
||||||
float phase = 0, phase_addition = rate*M_PI*2;
|
float phase = 0, phase_addition = rate*M_PI*2;
|
||||||
float (*window_function)(float) = firdes_get_window_kernel(window);
|
float (*window_function)(float) = firdes_get_window_kernel(window);
|
||||||
for(int i=0; i<length; i++) //@@firdes_carrier_c: calculate taps
|
for(int i=0; i<length; i++) //@@firdes_carrier_c: calculate taps
|
||||||
{
|
{
|
||||||
e_powj(&output[i], phase);
|
e_powj(&taps[i], phase);
|
||||||
float window_multiplier = window_function(fabs((float)(middle-i)/middle));
|
float window_multiplier = window_function(fabs((float)(middle-i)/middle));
|
||||||
output[i].i *= window_multiplier;
|
taps[i].i *= window_multiplier;
|
||||||
output[i].q *= window_multiplier;
|
taps[i].q *= window_multiplier;
|
||||||
phase += phase_addition;
|
phase += phase_addition;
|
||||||
while(phase>2*M_PI) phase-=2*M_PI;
|
while(phase>2*M_PI) phase-=2*M_PI;
|
||||||
}
|
}
|
||||||
|
@ -2028,12 +2029,17 @@ void firdes_carrier_c(complexf* output, int length, float rate, window_t window)
|
||||||
float sum=0;
|
float sum=0;
|
||||||
for(int i=0;i<length;i++) //@firdes_carrier_c: normalize pass 1
|
for(int i=0;i<length;i++) //@firdes_carrier_c: normalize pass 1
|
||||||
{
|
{
|
||||||
sum+=sqrt(output[i].i*output[i].i + output[i].q*output[i].q);
|
sum+=sqrt(taps[i].i*taps[i].i + taps[i].q*taps[i].q);
|
||||||
}
|
}
|
||||||
for(int i=0;i<length;i++) //@firdes_carrier_c: normalize pass 2
|
for(int i=0;i<length;i++) //@firdes_carrier_c: normalize pass 2
|
||||||
{
|
{
|
||||||
output[i].i/=sum;
|
taps[i].i/=sum;
|
||||||
output[i].q/=sum;
|
taps[i].q/=sum;
|
||||||
|
}
|
||||||
|
for(int i=0;i<length;i++)
|
||||||
|
{
|
||||||
|
output[i].i += taps[i].i;
|
||||||
|
output[i].q += taps[i].q;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -338,4 +338,4 @@ typedef struct bpsk_costas_loop_state_s
|
||||||
bpsk_costas_loop_state_t init_bpsk_costas_loop_cc(float samples_per_bits);
|
bpsk_costas_loop_state_t init_bpsk_costas_loop_cc(float samples_per_bits);
|
||||||
void bpsk_costas_loop_cc(complexf* input, complexf* output, int input_size, bpsk_costas_loop_state_t* state);
|
void bpsk_costas_loop_cc(complexf* input, complexf* output, int input_size, bpsk_costas_loop_state_t* state);
|
||||||
void simple_agc_cc(complexf* input, complexf* output, int input_size, float rate, float reference, float max_gain, float* current_gain);
|
void simple_agc_cc(complexf* input, complexf* output, int input_size, float rate, float reference, float max_gain, float* current_gain);
|
||||||
void firdes_carrier_c(complexf* output, int length, float rate, window_t window);
|
void firdes_add_carrier_c(complexf* output, int length, float rate, window_t window);
|
||||||
|
|
Loading…
Reference in a new issue