使用STM32实现实时数字滤波器(FIR)
首先是生成不同周期的正弦波:
由于定时器设置为250us进入一次中断,每秒可进入中断4000次,为了生成25HZ的正弦信号,一个周期内生成160个数据;为了生成200HZ的正弦信号,一个周期内生成20个数据,故代码如下:
sin_1=arm_sin_f32(3.141592654*i/80)+1;//25HZ 信号
sin_2=arm_sin_f32(3.141592654*i/10)+1;//200HZ 干扰
if(i==161)
{
i=1;
}
![](https://i3.wp.com/img-blog.csdnimg.cn/3f725ea908e2475491ef0deb46635011.png)
![](https://i3.wp.com/img-blog.csdnimg.cn/91fd073a48b847dbb79aaa1259b15bd4.png)
然后将200HZ_sin缩小0.4倍以后同25HZ_sin混合到一起:
![](https://i3.wp.com/img-blog.csdnimg.cn/889f0d39792c475e91e18a3a8499e660.png)
通过matlab设计所需滤波器参数,然后生成所需数组,并导入单片机:
![](https://i3.wp.com/img-blog.csdnimg.cn/d553809aabc34875889fcb5841a88349.png)
然后将滤波器的输入值设置为每次混合波形的计算值,将输出数据发送至上位机,并显示成波。
![](https://i3.wp.com/img-blog.csdnimg.cn/032e332ed57a4f01b43835e099269461.png)
![](https://i3.wp.com/img-blog.csdnimg.cn/2d7f8bfd2a264c6690dc766effc07f84.png)
![](https://i3.wp.com/img-blog.csdnimg.cn/c5a70bd60781485ca66f7ccc01ebfa58.png)
2023/05/10于西安