int16 iir_filter(int16 tmp) { int i; x[0] = (double) (tmp); // Read received sample and perform typecast y2[0] = 0; // Initialize output for(i = 0;i <= FILTER_LENGTH;i++) // Run FIR filter for each received sample { y2[0] += b2[i]*x[i]; } for(i = 1;i <= FILTER_LENGTH;i++) // Run FIR filter for each received sample { y2[0] -= a2[i]*y2[i]; } for(i = FILTER_LENGTH-1;i >= 0;i--) // Roll x array in order to hold old sample inputs { x[i+1] = x[i]; y2[i+1] = y2[i]; } return floor_and_convert(y2[0]); }
int low_pass_filter(int data) { int i; x_low[0] = (double) data; y_low[0] = 0; for(i = 0;i <= FILTER_LENGTH_low;i++) // Run IIR filter for each received sample { y_low[0] += b_low[i]*x_low[i]; } for(i =1;i <= FILTER_LENGTH_low;i++) // Roll x array in order to hold old sample inputs { y_low[0] -= a_low[i]*y_low[i]; } for(i = FILTER_LENGTH_low-1;i >= 0;i--) { x_low[i+1]=x_low[i]; y_low[i+1]=y_low[i]; } return floor_and_convert(y_low[0]); }
int16 filter(int16 data_in) { x[0] = (float) data_in; y = 0; for(i = 0;i <= FILTER_LENGTH;i++) { y += b[i]*x[i]; } for(i = FILTER_LENGTH-;i >= 0;i--) { x[i+] = x[i]; } return floor_and_convert(y); }