Bode plot from Oscilloscope with the biquad filter:
CODE:
#define ARM_MATH_CM7
#include "main.h"
#include "arm_math.h"
void init_Clock(void);
void init_I2S(void);
void init_Debugging(void);
void init_Interrupt(void);
void init_SpeedTest(void);
int32_t RxBuff[4];
int32_t TxBuff[4];
uint8_t TC_Callback = 0;
uint8_t HC_Callback = 0;
char uartBuff[8];
float32_t iir_coeffs[5] = {0.00102f, 0.002041f, 0.00102f, 1.908f, -0.9116f}; //B0, B1, B2, A1, A2
float32_t iir_mono_state[4];
float32_t Rx_Buff_f[4];
float32_t Rx_Buff_f_out[4];
arm_biquad_casd_df1_inst_f32 monoChannel;
void DMA1_Stream0_IRQHandler(void) {
if (((DMA1 -> LISR) & (DMA_LISR_TCIF0)) != 0){
DMA1 -> LIFCR |= DMA_LIFCR_CTCIF0;
TC_Callback = 1;
}
else if (((DMA1 -> LISR) & (DMA_LISR_HTIF0)) != 0){
DMA1 -> LIFCR |= DMA_LIFCR_CHTIF0;
HC_Callback = 1;
}
}
int main(void) {
init_Clock();
init_I2S();
//init_Debugging();
init_Interrupt();
//init_SpeedTest();
arm_biquad_cascade_df1_init_f32(&monoChannel, 1, iir_coeffs, iir_mono_state);
while (1)
{
if (HC_Callback == 1){
// GPIOA->BSRR |= GPIO_BSRR_BS3_HIGH;
for (int i = 0; i < 2; i++){
Rx_Buff_f[i] = (float32_t)RxBuff[i];
}
arm_biquad_cascade_df1_f32(&monoChannel, Rx_Buff_f, Rx_Buff_f_out, 2);
for (int i = 0; i < 2; i++){
TxBuff[i] = (int32_t)Rx_Buff_f_out[i];
}
HC_Callback = 0;
} else if (TC_Callback == 1){
// GPIOA->BSRR |= GPIO_BSRR_BR3_LOW;
for (int i = 2; i < 4; i++){
Rx_Buff_f[i] = (float32_t)RxBuff[i];
}
arm_biquad_cascade_df1_f32(&monoChannel, &Rx_Buff_f[2], &Rx_Buff_f_out[2], 2);
for (int i = 2; i < 4; i++){
TxBuff[i] = (int32_t)Rx_Buff_f_out[i];
}
TC_Callback = 0;
}
}
}