//FIRPRN.c FIR with internally generated input noise sequence #include "bp55.cof" //BP @ Fs/4 coeff file in float #include "noise_gen.h" //header file for noise sequence int dly[N]; //delay samples short fb; //feedback variable shift_reg sreg; short prn(void) //pseudorandom noise generation { short prnseq; //for pseudorandom sequence if(sreg.bt.b0) //sequence {1,-1} prnseq = -16000; //scaled negative noise level else prnseq = 16000; //scaled positive noise level fb =(sreg.bt.b0)^(sreg.bt.b1); //XOR bits 0,1 fb ^=(sreg.bt.b11)^(sreg.bt.b13); //with bits 11,13 ->fb sreg.regval<<=1; //shift register 1 bit to left sreg.bt.b0 = fb; //close feedback path return prnseq; //return sequence } interrupt void c_int11() //ISR { int i; int yn = 0; //initialize filter's output dly[0] = prn(); //input noise sequence for (i = 0; i< N; i++) yn +=(h[i]*dly[i]); //y(n)+= h(i)*x(n-i) for (i = N-1; i > 0; i--) //start @ bottom of buffer dly[i] = dly[i-1]; //data move to update delays output_sample(yn); //output filter return; //return from interrupt } void main() { short i; sreg.regval = 0xFFFF; //shift register to nominal values fb = 1; //initial feedback value for (i = 0; i