前言
这次用matlab做IIR滤波,掉到了坑里,花了好久的功夫后,终于爬上来了,记录一下,免得下次再掉而不自知。。。
1. IIR滤波方法一
在给定IIR滤波器参数a、b的情况下,实现IIR滤波,代码如下:
iir_obj = dsp.IIRFilter('Numerator', b,'Denominator', a); % Create the dsp.IIRFilter object and set its properties.
dout = iir_obj(din); % The System object filters each column of the input signal independently over time.
注意,这里的输入数据din需要以单列的方式提供,即size(din)需要是data_len x 1,因为根据matlab提供的官方说明(已摘抄在上述代码的注释中,或用help dsp.IIRFilter打开查看全部),这种方式的滤波是按照列独立滤波的。也就是说,如果输入数据的第一列为I相,第二列为Q相,可以支持一次调用IQ两路同时滤波,而互不干扰。
这种方式的IIR滤波,在多通道时是方便了,但是在单通道滤波时,很不方便,而且还有埋坑嫌疑。因为还需要特意关注输入数据格式,即是否需要转置后再输入数据,如果遗漏转置的话,或者说输入数据为单行时,虽然代码能正常跑起来,不报错,但是却没有真正实现滤波,这个就像给自己埋了个雷,不知道啥时候会炸,所以,不推荐这种IIR滤波方法。(因为已经被炸过一回,有了惨痛的教训!为了避免以后再掉坑里,必须这次记下来!)
&nbs

本文记录了在MATLAB中使用IIR滤波器遇到的问题及解决方案。作者分享了两种IIR滤波的方法,一种是通过dsp.IIRFilter对象实现,需要注意输入数据必须为单列;另一种是使用filter函数,对单行和单列数据都能有效滤波。作者强调了正确处理数据格式的重要性,以避免潜在错误。
最低0.47元/天 解锁文章
1285

被折叠的 条评论
为什么被折叠?



