matlab IIR滤波

前言

        这次用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滤波方法。(因为已经被炸过一回,有了惨痛的教训!为了避免以后再掉坑里,必须这次记下来!)

        由于matlab中可以用x(:)的方式将x变为列向量。尤其是当你不知道输入是列还是行向量时,总是用x(:)的方式是一个避坑的好方法。所以,在单行或者单列的时,直接统一先用x(:)的方式处理下,代码如下:

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.

2. IIR滤波方法二       

dout = filter(b, a, din);

        第一种IIR滤波方法不行,那么怎么办呢?用这种!简单还好用。

        经检验,输入数据单行、单列的方式,都可以有效滤波。(所以说代码写得炫,未必好用。。。)

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值