Part Number: TM4C1294NCPDT
Tool/software: Code Composer Studio
Hi
I have a problem by implementing a CMSIS Biquad lowpass filter.
The CMSIS FLOAT filter is working but not the fixpoint Q15 one.
It's just a simple 2nd order (1 stage) filter. The coeffs are calculated with Matlab.
Did anybody tried this allready and see an error in here?
The chrip function generate a chirps sinus with an amplitude of +-1.
Thanks in advance
René
// fs = 16000;
// fg = 1600 Hz, Butter
// [z,p,k] = butter(2,fg/fs,'low');
// sos2 = zp2sos(z,p,k);
// Hd = dfilt.df2tsos(sos2);
// fvtool(Hd,'Analysis','freq')
// coef = coeffs(Hd);
// coef.SOSMatrix
// ans = 0.0201 0.0402 0.0201 1.0000 -1.5610 0.6414
#define STAGES ((uint8_t)1)
arm_biquad_cascade_df2T_instance_f32 IIR; //stucture for CMSIS-DSP IIR DF2
arm_biquad_casd_df1_inst_q15 IIR_16;
// a11 und a12 müssen negiert werden
float fCoeffs[] = { 0.0200833659619093, 0.0401667319238186, 0.0200833659619093, 1.56101810932159, -0.641351521015167 };
float32_t IIRstate[2*STAGES];
BiquadLP BiQuadFloat(STAGES, fCoeffs, IIRstate); // this calls arm_biquad_cascade_df2T_init_f32(&IIR, numStages_, pCoeffs_, pState_);
// a11 und a12 müssen negiert werden
// b10, 0, b11, b12, a11, a12
q15_t n16Coeffs[STAGES * 6] = {329, 0, 658, 329, 25576, -10508};
q15_t n16StateA[STAGES * 4];
BiquadLP BiQuadQ15 = BiquadLP(STAGES, n16Coeffs, n16StateA); // this calls arm_biquad_cascade_df1_init_q15(&IIR_16, numStages_, pCoeffs_, pState_, 1);
float fFilterIn = chirp.calc_log();
fFilterOut1 = BiQuadFloat.filter(&fFilterIn);
q15_t n16FilterIn = (q15_t)(fFilterIn * 16384.0f); // only scaled by Q14 for test
n16FilterOutQ15 = BiQuadQ15.filter(&n16FilterIn);
