1. 首页
  2. > 香港公司注册 >

fir滤波器工作原理及硬件分类(fir滤波器的基本原理和设计方法)

之前获得过ADC方法的采样结果了,但是直接获得的信号往往都伴随有噪声,因此一般需要加一个滤波过程。


本次就尝试添加一个简单的数字滤波器。


获得FIR滤波器

首先是get到我们的滤方法波器。滤波器设计是一个复杂的问题,本次就先利用matlab的滤波器设计工具箱f分类datool来获得一个fir滤波器。


在matlab的shell里键入fdatool,打开图形窗口



设置好想要的滤波器类型,截止频率以及你的采样频率






我们获得了这个低通滤波器的FIR系数,





对FIR滤波器来讲,系数就是单位脉冲响应。



若想对信号进行滤波,我们需要将这个信号与被处理的信号进行卷积。


不过我们不必自己写卷积或者fft,stm32f10x系列的库中已经帮我们实现了相应的分类过程。


将滤波器导入Keil

基本

Ke工作il里面已经包含了D硬件SP(数字信号处理)的库,其路径如下



我们在keil中打开run-设计time设计 的environment



勾选上DSP



Keil中也有fir的例程,我们可以参考例程来实现自己的fir滤硬件波





程序编写

例程的开头引用了


#include "a和rm_math.h"



不过我们在引用时需要添加对应内核滤波器的宏定义,不然会报错


主函数中包含了初始化和每次的调用



其中S是fir的实例,我们也在前面定义一个即fir可


arm_fir_instance_f32 S;


在初始化函数中Nu及m_T和aps 是滤波器点数,firCoeffs32是滤波器系数数组的指针,firStateF32则是状态缓冲数组的指针。照猫画虎给他弄一个类似的的初始化函数fir,只是参数改成我们需要滤波器的。





再来看下对数据的处理





例子中是用了两个指针,每次循环都让指针偏移blockSize


对于我们来讲是在实基本时处理ADC的数据工作,所以可以让ADC写满一个数组,滤波一次,重新写满,滤波,如此操作



我的思路原理是用及一个输入缓冲区保存每次读出的电压值,同时发送一个输出缓冲区的数





每次循环时,firInput原理写入一个数,同时firOut的一个数被发出,当完成一个BLOCK_SIZE后归零,firOut被写入新的fir滤波结果,就是上一个周期获得的firInput的输入的滤波结果。


可以看出串口每次发送的输出数据设计方是滞后firInput一个完整的BLOCK_SIZE周期。


下设计方载程序可以看的滤波后的效果





版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至123456@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息