本节主要介绍如何在STM32上实现一个IIR高通滤波器。
在介绍如何实现STM32的IIR滤波程序之前,再看一下用matlab仿真得到的结果,以下是输入300Hz时的输入和输出(下)。
将输入频率改为100Hz,再看仿真结果:
可以观察到输入300Hz的时候,输出幅值大约为1800,而输入降到100Hz时,输出信号的幅值只有240。
IIR的实现
主要处理过程如下,STM32通过ADC采集一路正弦波信号,采集完成后立即对数据进行处理,然后将处理之后的数据送到DAC数据寄存器,通过DAC1的引脚将处理后的数据用电平方式体现出来,这样就可以对比输入和滤波之后输出的效果。
在了解了IIR滤波器的二阶直接II型结构以后,接下来我们就可以在STM32的DSP库函数中修改IIR的系数了。首先看一下库文件中基于C的IIR函数,如下所示。
void iir_biquad_stm32(u16 *y, u16 *x, int16_t *IIRCoeff, u16 ny)
{
u32 i;
u32 w1_2 = 0, w1_1 = 0, w1;
for (i=0; i<ny-2; i++)