//FIR4ways.c FIR with alternative ways of storing/updating samples #include "bp41.cof" //BP @ 1 kHz coefficient file #define METHOD 'D' //change to B or C or D int yn = 0; //initialize filter's output short dly[N+1]; //delay samples array(one extra) interrupt void c_int11() //ISR { short i; yn = 0; //initialize filter's output #if METHOD == 'A' //if 1st method dly[0] = input_sample(); //newest sample @ top of buffer for (i = 0; i< N; i++) yn += (h[i] * dly[i]); //y(n)=h[0]*x[n]+..+h[N-1]x[n-(N-1)] for (i = N-1; i > 0; i--) //from bottom of buffer dly[i] = dly[i-1]; //update sample data move "down" #elif METHOD == 'B' //if 2nd method dly[0] = input_sample(); //newest sample @ top of buffer for (i = N-1; i >= 0; i--) //start @ bottom to convolve { yn += (h[i] * dly[i]); //y=h[N-1]x[n-(N-1)]+...+h[0]x[n] dly[i] = dly[i-1]; //update sample data move "down" } #elif METHOD == 'C' //use xtra memory location dly[0] = input_sample(); //newest sample @ top of buffer for (i = N-1; i>=0; i--) //start @ bottom of buffer { yn += (h[i] * dly[i]); //y=h[N-1]x[n-(N-1)]+...+h[0]x[n] dly[i+1] = dly[i]; //update sample data move "down" } #elif METHOD == 'D' //1st convolve before loop dly[N-1] = input_sample(); //newest sample @ bottom of buffer yn = h[N-1] * dly[0]; //y=h[N-1]x[n-(N-1)] (only one) for (i = 1; i> 15); //output filter return; //return from ISR } void main() { comm_intr(); //init DSK, codec, McBSP while(1); //infinite loop }