diff --git a/csdr.c b/csdr.c index e4e0aeb..5b53ffa 100755 --- a/csdr.c +++ b/csdr.c @@ -136,6 +136,7 @@ char usage[]= " bpsk_costas_loop_cc \n" " binary_slicer_f_u8\n" " simple_agc_cc [reference [max_gain]]\n" +" firdes_carrier_c [window [--octave]]\n" " ?\n" " =\n" " \n" @@ -2700,6 +2701,51 @@ int main(int argc, char *argv[]) } } + if(!strcmp(argv[1],"firdes_carrier_c")) // [window [--octave]] + { + //Process the params + if(argc<=3) return badsyntax("need required parameters (rate, length)"); + + float rate; + sscanf(argv[2],"%g",&rate); + int length; + sscanf(argv[3],"%d",&length); + if(length%2==0) return badsyntax("number of symmetric FIR filter taps should be odd"); + + window_t window = WINDOW_DEFAULT; + if(argc>=5) + { + window=firdes_get_window_from_string(argv[4]); + } + else fprintf(stderr,"firdes_carrier_c: window = %s\n",firdes_get_string_from_window(window)); + + int octave=(argc>=6 && !strcmp("--octave",argv[5])); + + complexf* taps=(complexf*)malloc(sizeof(complexf)*length); + + //Make the filter + firdes_carrier_c(taps, length, rate, window); + + //Do the output + if(octave) printf("taps=["); + for(int i=0;i2*M_PI) phase-=2*M_PI; + } + + //Normalize filter kernel + float sum=0; + for(int i=0;i