//IIR.c IIR filter using cascaded Direct Form II //Coefficients a's and b's correspond to b's and a's from MATLAB #include "bs1750.cof" //BS @ 1750 Hz coefficient file short dly[stages][2] = {0}; //delay samples per stage interrupt void c_int11() //ISR { int i, input; int un, yn; input = input_sample(); //input to 1st stage for (i = 0; i < stages; i++) //repeat for each stage { un=input-((b[i][0]*dly[i][0])>>15) - ((b[i][1]*dly[i][1])>>15); yn=((a[i][0]*un)>>15)+((a[i][1]*dly[i][0])>>15)+((a[i][2]*dly[i][1])>>15); dly[i][1] = dly[i][0]; //update delays dly[i][0] = un; //update delays input = yn; //intermediate output->input to next stage } output_sample(yn); //output final result for time n return; //return from ISR } void main() { comm_intr(); //init DSK, codec, McBSP while(1); //infinite loop }