水煮鱼 发表于 2016-11-17 11:25:08

ARM DSP库IIR滤波效果跟MATLAB相差大

按照安富莱老师的DSP教程进行IIR高通滤波器设计,单片机滤波之后的效果和matlab做IIR滤波后的效果是一致的



但是从外部采集回来的数据用单片机做IIR滤波之后的效果和matlab做IIR之后的效果相差很大,如下图:



所以请假下各位,为什么官方DSP对标准的软件生成的波形数据做出来的效果很好,但是采集外部不怎么规则的数据进行IIR滤波相差这么大?

附上外部数据参数:
外部数据的采样频率为100KHZ,采样2048个点,IIR高通滤波器截止频率为120hz,高通滤波器阶数为4阶
外部采样回来的原始数据如下:
   

fdatool高通滤波器设计参数:

eric2013 发表于 2016-11-17 11:55:10

把你实际采集波形数据的频谱成份分析下,实际采集的频谱成份比较复杂。

水煮鱼 发表于 2016-11-17 13:53:02

谢谢你的回答,下图是我分别对原始信号、matlab IIR之后的信号、单片机IIR之后的信号进行的FFT变化频谱图:


实际采样的信号里面直流成分比较多,所以才通过高通把低频给滤掉的,用电脑进行IIR然后再进行FFT确实达到了我想要的效果,但是用单片机做了IIR之后然后再用电脑做FFT结果和电脑FFT的结果都不正确。
应该是单片机做的IIR波形和电脑的波形本来就不对所以才使得FFT之后的结果不对。
像这种原始信号的话应该不是很难处理吧?因为毕竟除了直流分量,频谱最大值还是非常清晰的。请问怎么单片机IIR处理出来的效果偏差这么大呢?

eric2013 发表于 2016-11-17 14:05:06

相对你的Fs采样率,你的Fc截止频率太低了,看幅频响应基本是一个直角了,所以滤波效果一般。

水煮鱼 发表于 2016-11-17 15:38:20

那有没有办法把直流分量过滤掉呢?matlab为什么可以做到

eric2013 发表于 2016-11-17 16:20:37

回 水煮鱼 的帖子

水煮鱼:那有没有办法把直流分量过滤掉呢?matlab为什么可以做到 (2016-11-17 15:38) images/back.gif

仅仅是滤除直流分量很简单的,所有的数值都减去一个直流数值就行了,直流数值即使所有数据求平均(FFT求出的直流分量其实就是所有数据求平均),或者你的信号接个电容,电容就是割去直流用的。

水煮鱼 发表于 2016-11-17 16:55:26

好的,我试下,谢谢你
页: [1]
查看完整版本: ARM DSP库IIR滤波效果跟MATLAB相差大