TMS320C5515: FIR IIR biquad filters not working in AIC3204 on EVM TMS320C5515EVM board

Part Number: TMS320C5515

hello,

I tried to used digital filters in signal processing blocks of AIC3204 to decimate the noise of high frequencies. But it fails. I did below works:

1,  with the example AIC3204 example code, I modified function aic3204_loop_mic_in with adding below lines to enable PRB_P3 of AD and PRB_P2 of DA. But sound from headphone has no change. I can still hear lots of background noises.

AIC3204_rset( 61, 0x02 ); //use AD PRB_P3 to test the noise reduction.
AIC3204_rset( 60, 0x02 ); //use DA PRB_P2 to test the noise reduction.

2, As my target audio frequency is around 100-200hz, so i use TIBQ to calculate a coefficent with fc=200 and lowpass filter. with below codes. the problem is i still can hear the noise and even when I modified my audio source to 500hz, i still can hear it from the headphone. that doesn't make sense. it should be decimated. please help. thanks.

#define LEFT_VOLUME_N0 0x01CC56
#define LEFT_VOLUME_N0_1 0x01
#define LEFT_VOLUME_N0_2 0xCC
#define LEFT_VOLUME_N0_3 0x56

#define LEFT_VOLUME_N1 0x01CC56
#define LEFT_VOLUME_N1_1 0x01
#define LEFT_VOLUME_N1_2 0xCC
#define LEFT_VOLUME_N1_3 0x56

#define LEFT_VOLUME_N2 0x7C6752
#define LEFT_VOLUME_N2_1 0x7C
#define LEFT_VOLUME_N2_2 0x67
#define LEFT_VOLUME_N2_3 0x52

#define LEFT_VOLUME_D1 0x0
#define LEFT_VOLUME_D1_1 0x00
#define LEFT_VOLUME_D1_2 0x00
#define LEFT_VOLUME_D1_3 0x0

#define LEFT_VOLUME_D2 0x0
#define LEFT_VOLUME_D2_1 0x0
#define LEFT_VOLUME_D2_2 0x0
#define LEFT_VOLUME_D2_3 0x0

#ifdef _TEST_DECIMATION
AIC3204_rset( 61, 0x02 ); //use AD PRB_P3 to test the noise reduction.
AIC3204_rset( 60, 0x02 ); //use DA PRB_P2 to test the noise reduction.
#if 1
AIC3204_rset( 0, 0x2C ); // Select page 44
//N0
AIC3204_rset( 12, LEFT_VOLUME_N0_1 ); // set cof to 3F3F3F
AIC3204_rset( 13, LEFT_VOLUME_N0_2 ); // set cof to 3F3F3F
AIC3204_rset( 14, LEFT_VOLUME_N0_3 ); // set cof to 3F3F3F
//N1
AIC3204_rset( 16, LEFT_VOLUME_N1_1 ); // set cof to 3F3F3F
AIC3204_rset( 17, LEFT_VOLUME_N1_2 ); // set cof to 3F3F3F
AIC3204_rset( 18, LEFT_VOLUME_N1_3 ); // set cof to 3F3F3F
//N2
AIC3204_rset( 20, LEFT_VOLUME_N2_1 ); // set cof to 3F3F3F
AIC3204_rset( 21, LEFT_VOLUME_N2_2 ); // set cof to 3F3F3F
AIC3204_rset( 22, LEFT_VOLUME_N2_3 ); // set cof to 3F3F3F
//D1
AIC3204_rset( 24, LEFT_VOLUME_D1_1 ); // set cof to 3F3F3F
AIC3204_rset( 25, LEFT_VOLUME_D1_2 ); // set cof to 3F3F3F
AIC3204_rset( 26, LEFT_VOLUME_D1_3 ); // set cof to 3F3F3F
//D2
AIC3204_rset( 28, LEFT_VOLUME_D2_1 ); // set cof to 3F3F3F
AIC3204_rset( 29, LEFT_VOLUME_D2_2 ); // set cof to 3F3F3F
AIC3204_rset( 30, LEFT_VOLUME_D2_3 ); // set cof to 3F3F3F

//N0
AIC3204_rset( 32, LEFT_VOLUME_N0_1 ); // set cof to 3F3F3F
AIC3204_rset( 33, LEFT_VOLUME_N0_2 ); // set cof to 3F3F3F
AIC3204_rset( 34, LEFT_VOLUME_N0_3 ); // set cof to 3F3F3F

//N1
AIC3204_rset( 36, LEFT_VOLUME_N1_1 ); // set cof to 3F3F3F
AIC3204_rset( 37, LEFT_VOLUME_N1_2 ); // set cof to 3F3F3F
AIC3204_rset( 38, LEFT_VOLUME_N1_3 ); // set cof to 3F3F3F

//N2
AIC3204_rset( 40, LEFT_VOLUME_N2_1 ); // set cof to 3F3F3F
AIC3204_rset( 41, LEFT_VOLUME_N2_2 ); // set cof to 3F3F3F
AIC3204_rset( 42, LEFT_VOLUME_N2_3 ); // set cof to 3F3F3F

//D1
AIC3204_rset( 44, LEFT_VOLUME_D1_1 ); // set cof to 3F3F3F
AIC3204_rset( 45, LEFT_VOLUME_D1_2 ); // set cof to 3F3F3F
AIC3204_rset( 46, LEFT_VOLUME_D1_3 ); // set cof to 3F3F3F

//D2
AIC3204_rset( 48, LEFT_VOLUME_D2_1 ); // set cof to 3F3F3F
AIC3204_rset( 49, LEFT_VOLUME_D2_2 ); // set cof to 3F3F3F
AIC3204_rset( 50, LEFT_VOLUME_D2_3 ); // set cof to 3F3F3F


//N0
AIC3204_rset( 52, LEFT_VOLUME_N0_1 ); // set cof to 3F3F3F
AIC3204_rset( 53, LEFT_VOLUME_N0_2 ); // set cof to 3F3F3F
AIC3204_rset( 54, LEFT_VOLUME_N0_3 ); // set cof to 3F3F3F
//N1
AIC3204_rset( 56, LEFT_VOLUME_N1_1 ); // set cof to 3F3F3F
AIC3204_rset( 57, LEFT_VOLUME_N1_2 ); // set cof to 3F3F3F
AIC3204_rset( 58, LEFT_VOLUME_N1_3 ); // set cof to 3F3F3F
//N2
AIC3204_rset( 60, LEFT_VOLUME_N2_1 ); // set cof to 3F3F3F
AIC3204_rset( 61, LEFT_VOLUME_N2_2 ); // set cof to 3F3F3F
AIC3204_rset( 62, LEFT_VOLUME_N2_3 ); // set cof to 3F3F3F
//D1
AIC3204_rset( 64, LEFT_VOLUME_D1_1 ); // set cof to 3F3F3F
AIC3204_rset( 65, LEFT_VOLUME_D1_2 ); // set cof to 3F3F3F
AIC3204_rset( 66, LEFT_VOLUME_D1_3 ); // set cof to 3F3F3F
//D2
AIC3204_rset( 68, LEFT_VOLUME_D2_1 ); // set cof to 3F3F3F
AIC3204_rset( 69, LEFT_VOLUME_D2_2 ); // set cof to 3F3F3F
AIC3204_rset( 70, LEFT_VOLUME_D2_3 ); // set cof to 3F3F3F

//N0
AIC3204_rset( 72, LEFT_VOLUME_N0_1 ); // set cof to 3F3F3F
AIC3204_rset( 73, LEFT_VOLUME_N0_2 ); // set cof to 3F3F3F
AIC3204_rset( 74, LEFT_VOLUME_N0_3 ); // set cof to 3F3F3F
//N1
AIC3204_rset( 76, LEFT_VOLUME_N1_1 ); // set cof to 3F3F3F
AIC3204_rset( 77, LEFT_VOLUME_N1_2 ); // set cof to 3F3F3F
AIC3204_rset( 78, LEFT_VOLUME_N1_3 ); // set cof to 3F3F3F
//N2
AIC3204_rset( 80, LEFT_VOLUME_N2_1 ); // set cof to 3F3F3F
AIC3204_rset( 81, LEFT_VOLUME_N2_2 ); // set cof to 3F3F3F
AIC3204_rset( 82, LEFT_VOLUME_N2_3 ); // set cof to 3F3F3F
//D1
AIC3204_rset( 84, LEFT_VOLUME_D1_1 ); // set cof to 3F3F3F
AIC3204_rset( 85, LEFT_VOLUME_D1_2 ); // set cof to 3F3F3F
AIC3204_rset( 86, LEFT_VOLUME_D1_3 ); // set cof to 3F3F3F
//N1
AIC3204_rset( 88, LEFT_VOLUME_D2_1 ); // set cof to 3F3F3F
AIC3204_rset( 89, LEFT_VOLUME_D2_2 ); // set cof to 3F3F3F
AIC3204_rset( 90, LEFT_VOLUME_D2_3 ); // set cof to 3F3F3F

//N0
AIC3204_rset( 92, LEFT_VOLUME_N0_1 ); // set cof to 3F3F3F
AIC3204_rset( 93, LEFT_VOLUME_N0_2 ); // set cof to 3F3F3F
AIC3204_rset( 94, LEFT_VOLUME_N0_3 ); // set cof to 3F3F3F
//N1
AIC3204_rset( 96, LEFT_VOLUME_N1_1 ); // set cof to 3F3F3F
AIC3204_rset( 97, LEFT_VOLUME_N1_2 ); // set cof to 3F3F3F
AIC3204_rset( 98, LEFT_VOLUME_N1_3 ); // set cof to 3F3F3F
//N2
AIC3204_rset( 100, LEFT_VOLUME_N2_1 ); // set cof to 3F3F3F
AIC3204_rset( 101, LEFT_VOLUME_N2_2 ); // set cof to 3F3F3F
AIC3204_rset( 102, LEFT_VOLUME_N2_3 ); // set cof to 3F3F3F
//D1
AIC3204_rset( 104, LEFT_VOLUME_D1_1 ); // set cof to 3F3F3F
AIC3204_rset( 105, LEFT_VOLUME_D1_2 ); // set cof to 3F3F3F
AIC3204_rset( 106, LEFT_VOLUME_D1_3 ); // set cof to 3F3F3F
//D2
AIC3204_rset( 108, LEFT_VOLUME_D2_1 ); // set cof to 3F3F3F
AIC3204_rset( 109, LEFT_VOLUME_D2_2 ); // set cof to 3F3F3F
AIC3204_rset( 110, LEFT_VOLUME_D2_3 ); // set cof to 3F3F3F

//N0
AIC3204_rset( 112, LEFT_VOLUME_N0_1 ); // set cof to 3F3F3F
AIC3204_rset( 113, LEFT_VOLUME_N0_2 ); // set cof to 3F3F3F
AIC3204_rset( 114, LEFT_VOLUME_N0_3 ); // set cof to 3F3F3F
//N1
AIC3204_rset( 116, LEFT_VOLUME_N1_1 ); // set cof to 3F3F3F
AIC3204_rset( 117, LEFT_VOLUME_N1_2 ); // set cof to 3F3F3F
AIC3204_rset( 118, LEFT_VOLUME_N1_3 ); // set cof to 3F3F3F
//N2
AIC3204_rset( 120, LEFT_VOLUME_N2_1 ); // set cof to 3F3F3F
AIC3204_rset( 121, LEFT_VOLUME_N2_2 ); // set cof to 3F3F3F
AIC3204_rset( 122, LEFT_VOLUME_N2_3 ); // set cof to 3F3F3F
//D1
AIC3204_rset( 124, LEFT_VOLUME_D1_1 ); // set cof to 3F3F3F
AIC3204_rset( 125, LEFT_VOLUME_D1_2 ); // set cof to 3F3F3F
AIC3204_rset( 126, LEFT_VOLUME_D1_3 ); // set cof to 3F3F3F

AIC3204_rset( 0, 0x2D ); // Select page 45
//D2
AIC3204_rset( 8, LEFT_VOLUME_D2_1 ); // set cof to 3F3F3F
AIC3204_rset( 9, LEFT_VOLUME_D2_2 ); // set cof to 3F3F3F
AIC3204_rset( 10, LEFT_VOLUME_D2_3 ); // set cof to 3F3F3F
#endif
#endif