Upload
anonymous-z3su48
View
5
Download
0
Embed Size (px)
DESCRIPTION
filter
Citation preview
Voice scrampling and modulation
//Scram16k.c Voice scrambler/de-scrambler program #include “sine160.h” //sine data values #include “LP114.cof” //filter coefficient file short filtmodfilt(short data); short filter(short inp,short *dly); short sinemod(short input); static short filter1[N],filter2[N]; short input, output;void main() {short i; comm_poll(); //init DSK using pollingfor (i=0; i< N; i++) {filter1[i] = 0; //init 1st filter buffer filter2[i] = 0; //init 2nd filter buffer} while(1){ input=input_sample(); //input new sample data filtmodfilt(input); //process sample twice(upsample) output=filtmodfilt(input); //and throw away 1st result output_sample(output); //then output} }short filtmodfilt(short data) //filtering & modulating {data = filter(data,filter1); //newest in ->1st filter
data = sinemod(data); //modulate with 1st filter out data = filter(data,filter2); //2nd LP filter return data;} short filter(short inp,short *dly) //implements FIR{ short i; int yn;dly[N-1] = inp; //newest sample @bottom buffer yn = dly[0] * h[N-1]; //y(0)=x(n-(N-1))*h(N-1) for (i = 1; i < N; i++) //loop for the rest{ yn += dly[i] * h[N-(i+1)]; //y(n)=x[n-(N-1-i)]*h[N-1-i] dly[i-1] = dly[i]; //data up to update delays} yn = ((yn) >>15); //filter’s output return yn; //return y(n) at time n} short sinemod(short input) //sine generation/modulation{ static short i=0; input=(input*sine160[i++])>>11; //(input)*(sine data) if(i>= NSINE) i = 0; //if end of sine table return input; //return modulated signal
Fir filter
//Notch2.C Two FIR notch filters to remove two sinusoidal noise signal #include “BS900.cof” //BS @ 900 Hz coefficient file #include “BS2700.cof” //BS @ 2700 Hz coefficient file short dly1[N]={0}; //delay samples for 1st filter short dly2[N]={0}; //delay samples for 2nd filter int y1out = 0, y2out = 0; //init output of each filter short out_type = 1; //slider for output typeinterrupt void c_int11() //ISR {short i;dly1[0] = input_sample(); //newest input @ top of buffer y1out = 0; //init output of 1st filter y2out = 0; //init output of 2nd filter for (i = 0; i< N; i++)y1out += h900[i]*dly1[i]; //y1(n)+=h900(i)*x(n-i)dly2[0]=(y1out >>15); //out of 1st filter->in 2nd filter for (i = 0; i< N; i++)y2out += h2700[i]*dly2[i]; //y2(n)+=h2700(i)*x(n-i)for (i = N-1; i > 0; i--) //from bottom of buffer {}dly1[i] = dly1[i-1]; //update samples of 1st buffer dly2[i] = dly2[i-1]; //update samples of 2nd buffer }if (out_type==1) //if slider is in position 1 output_sample(dly1[0]); //corrupted input(voice+sines) if (out_type==2) output_sample(y2out>>15); //output of 2nd filter (voice) return; //return from ISRvoid main() {comm_intr(); //init DSK, codec, McBSP while(1); //infinite loop}