//------------------------------------------------------------------------------ void WahWah::designResonantLowPass(float* dcoefs, float center, float qval) // design parametric filter based on input center frequency, gain, Q and sampling rate { float b0, b1, b2, a0, a1, a2; //storage for continuous-time filter coefs float acoefs[6]; //Design parametric filter here. Filter should be of the form // // 2 // b2s + b1s + b0 // --------------- // 2 // a2s + a1s + a0 // // Parameters are center frequency in Hz, gain in dB, and Q. ///////////////START////////////////// b0 = 1.0; b1 = 0.0; b2 = 0.0; a0 = 1.0; a1 = 1/(qval*2*pi*center); a2 = 1/(4*pi*pi*center*center); ////////////////END///////////////////// // pack the analog coeffs into an array and apply the bilinear tranform acoefs[0] = b0; acoefs[1] = b1; acoefs[2] = b2; acoefs[3] = a0; acoefs[4] = a1; acoefs[5] = a2; // inputs the 6 analog coeffs, output the 5 digital coeffs bilinearTranform(acoefs, dcoefs); }
//------------------------------------------------------------------------------ void Filters::designParametric(double* dcoefs, double center, double gain, double qval, double fs) // design parametric filter based on input center frequency, gain, Q and sampling rate { double b0, b1, b2, a0, a1, a2; //storage for continuous-time filter coefs double acoefs[6]; //Design parametric filter here. Filter should be of the form // // 2 // b2s + b1s + b0 // --------------- // 2 // a2s + a1s + a0 // // Parameters are center frequency in Hz, gain in dB, and Q. //TODO: design analog filter based on input gain, center frequency and Q b0 = 1.0; b1 = 0.0; b2 = 0.0; a0 = 1.0; a1 = 0.0; a2 = 0.0; ///////////////START////////////////// double Q = qval; double wc = center*2*M_PI; // 2nd order butterworth RLP b2 = 0.0; b1 = 0.0; b0 = 1.0; a2 = 1.0/(wc*wc); a1 = 1.0/(Q*wc); a0 = 1.0; ////////////////END///////////////////// // pack the analog coeffs into an array and apply the bilinear tranform acoefs[0] = b0; acoefs[1] = b1; acoefs[2] = b2; acoefs[3] = a0; acoefs[4] = a1; acoefs[5] = a2; // inputs the 6 analog coeffs, output the 5 digital coeffs bilinearTranform(acoefs, dcoefs, fs); }