最近做一个课题要用到单片机进行数字滤波器的设计,滤波器做过不少,但是数字滤波器还是头一次做。所以上网查了很多资料,
发现这方面的资料说明不少,但是没有直接使用的指南,经过好几天的摸索以及实践,将自己的使用心得记录如下,有疏漏错误的地方
希望大家批评指正。
对于什么是FIR滤波器我就不再多说,推荐这个博主的博客http://blog.csdn.net/vast_sea/article/details/8194814。在我看来,其实直
接性FIR滤波器就是输入序列x[n]与滤波器系数h[n]卷积,最后输出的序列就是滤波后的序列。
步骤:
1.下载官方提供的STM32F4的DSP库,这里面将用到的数字信号处理函数都封装好了,直接用就可以。
在工程里添加.ilb文件,因为DSP的函数数目很多,为了方便官方就建了这么一个库,用起来只要包含
着一个库就可以用所有函数,这个文件在下图的路径下。
包含后的工程目录就是这样:
以上的工作都做好了,但是还有一点要注意,在使用时必须要包含一个叫arm_math.h的头文件。
2.这下准备活动就都准备好了,接下来说DSP函数,我用的是arm_fir_f32();函数,
对于这个函数的几个入口参数的说明如下。
看官方的注释就可以大概了解。
S是一个结构体,里面用来存放arm_fir_f32();这个函数进行滤波操作时所用到的信息,这是结构体的申明。
第一个numTaps就是指滤波系数的个数。这个说白了就是你的滤波器的阶数-1;
第二个*pState指针指向数据缓冲区(相当于一个数组),这个缓冲区的长度刚好是输入序列长度+
numTaps-1,刚好符合FIR滤波器卷积的运算。
第三个*pCoeffs,指向滤波器系数序列。
这个结构体说明结束,接下来就遇到与个问题,S我们知道是什么意思了,但是怎么对他的各个元素进行复制呢赋值呢?这就先要
介绍另一个函数: