//Aliasing.c illustration of downsampling, aliasing, upsampling #include "lp33.cof" //lowpass at 1.8 kHz short flag = 0; //toggles for 2x down-sampling float indly[N],outdly[N]; //antialias and reconst delay lines short i; //index float yn; //filter output short antialiasing = 0; //init for no antialiasing filter interrupt void c_int11() //ISR { indly[0]=(float)(input_sample()); //new sample to antialias filter yn = 0.0; //initialize downsampled value if (flag == 0) //discard input sample value flag = 1; //don't discard at next sampling else { if (antialiasing == 1) //if antialiasing filter desired { //compute downsampled value for (i = 0 ; i < N ; i++) //using LP @ 1.8 kHz filter coeffs yn += (h[i]*indly[i]); //filter is implemented using float } else //if filter is bypassed yn = indly[0]; //downsampled value is input value flag = 0; //next input value will be discarded } for (i = N-1; i > 0; i--) indly[i] = indly[i-1]; //update input buffer outdly[0] = (yn); //input to reconst filter yn = 0.0; //4 kHz sample values and zeros for (i = 0 ; i < N ; i++) //are filtered at 8 kHz rate yn += (h[i]*outdly[i]); //by reconstruction lowpass filter for (i = N-1; i > 0; i--) outdly[i] = outdly[i-1]; //update delays output_sample((short)(yn)); //8 kHz rate sample return; //return from interrupt } void main() { comm_intr(); //init DSK, codec, McBSP while(1); //infinite loop }