// autotest helper function // _b : filter coefficients (numerator) // _a : filter coefficients (denominator) // _h_len : filter coefficients length // _x : input array // _x_len : input array length // _y : output array // _y_len : output array length void iirfilt_crcf_test(float * _b, float * _a, unsigned int _h_len, float complex * _x, unsigned int _x_len, float complex * _y, unsigned int _y_len) { float tol = 0.001f; // load filter coefficients externally iirfilt_crcf q = iirfilt_crcf_create(_b, _h_len, _a, _h_len); // allocate memory for output float complex y_test[_y_len]; unsigned int i; // compute output for (i=0; i<_x_len; i++) { iirfilt_crcf_execute(q, _x[i], &y_test[i]); CONTEND_DELTA( crealf(y_test[i]), crealf(_y[i]), tol ); CONTEND_DELTA( cimagf(y_test[i]), cimagf(_y[i]), tol ); } // destroy filter object iirfilt_crcf_destroy(q); }
int main() { // options unsigned int order=4; // filter order unsigned int n = order+1; float b[n], a[n]; // ... initialize filter coefficients ... // create filter object iirfilt_crcf q = iirfilt_crcf_create(b,n,a,n); float complex x; // input sample float complex y; // output sample // execute filter (repeat as necessary) iirfilt_crcf_execute(q,x,&y); // destroy filter object iirfilt_crcf_destroy(q); }