int main(void) { int nsamp, i; float *input, *output1, *output2; initialize(FS_48K, MONO_IN, STEREO_OUT); // Set up the DAC/ADC interface // Allocate Required Memory nsamp = getblocksize(); input = (float *)malloc(sizeof(float)*nsamp); output1 = (float *)malloc(sizeof(float)*nsamp); output2 = (float *)malloc(sizeof(float)*nsamp); if (input==NULL || output1==NULL || output2==NULL) { flagerror(MEMORY_ALLOCATION_ERROR); while(1); } // Filter coefficients // float b[5][3] = {{1, 2, 1},{1, -2, 1},{1, 0.851559, 1},{1, -1.90211, 1},{1, 1.17557, 1}}; // float a[5][3] = {{1, 2, 1},{1, -2, 1},{1, 0.851559, 1},{1, -1.90211, 1},{1, 1.17557, 1}}; // float g = 0.0264722; // Biquad structure initialization BIQUAD_T *f1; f1 = init_biquad(num_stages, g, a_coef, b_coef, nsamp); // Infinite Loop to process the data stream, "nsamp" samples at a time while(1){ /* * Ask for a block of ADC samples to be put into the working buffer * getblock() will wait until the input buffer is filled... On return * we work on the new data buffer. */ getblock(input); // Wait here until the input buffer is filled... Then process // signal processing code to calculate the required output buffers // copy input to output2 for reference for(i=0;i<nsamp;i++) { output2[i] = input[i]; } DIGITAL_IO_SET(); // Use a scope on PC4 to measure execution time // Call the biquad filter routine calc_biquad(f1,input,output1); DIGITAL_IO_RESET(); // (falling edge.... done processing data ) // pass the processed working buffer back for DAC output putblockstereo(output1, output2); } }
void config_biquad_filter( // Configure BiQuad filter BIQUAD_PARAM_S * cur_param_ps // Pointer to structure containing current biquad filter parameters ) { // Check if BiQuad filter initialised if (0 == biquad_gs.init_done) { // Initialse BiQuad filter init_biquad( &biquad_gs ); // Initialise biquad data structure biquad_gs.init_done = 1; // Signal Bi-Quad filter initialised } // if (0 == biquad_gs->init_done) // printstr("FM= "); printintln( (int)cur_param_ps->filt_mode ); // MB~ /* When coefficients are re-calculated mid-stream timing may be broken, but works so far! * Audio clicks can be heard, but I assume normally this would only occur at a program change, * so this would mask the click. */ // recalculate filter coefficiants based on new sample frequency init_common_coefs( &(biquad_gs.common_coefs_s) ,cur_param_ps ); biquad_gs.params_set = 1; // Signal BiQuad filter parameters configured } // config_biquad_filter