A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 庭院深深深几许 金牌黑马   /  2019-4-18 11:04  /  1329 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  现在正在学习MATLAB信号处理方面的应用,程序中遇到filter函数,从网上查阅资料,我能找到的资料感觉写的也是模棱两可,不易使人明白,所以就花了一下午的时间好好研究了下,终于知道这个函数的使用方法了,下面以matlab中help文档对filter的函数介绍为根据,进行解析。
  1、语法: filter函数是一维的数字滤波器,主要的应用语法如下所示
  y = filter(b,a,X)
  [y,zf] = filter(b,a,X)
  [y,zf] = filter(b,a,X,zi)
  y = filter(b,a,X,zi,dim)
  [...] = filter(b,a,X,[],dim)
  这五个用法大同小异,明白一个就知道其他的用法了,下面以最简单的 y = filter(b,a,X) 为例进行讲解。
  y = filter(b,a,X) 滤除向量X中的数据,其中b是分子系数向量,a是分母系数向量。如果a(1)不等于1的话,则就利用a(1)标准化滤波器系数,可以利用多项式除法使分母变为1;如果 a(1) 等于0,滤波器返回错误值。
  2、算法实现:
  如上图1所示,filter函数通过直接 II 型转置结构实现,通过分析上面原理图,可得下面的时域表达式
  y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)- a(2)*y(n-1) - ... - a(na+1)*y(n-na) (1)
  其中 n-1是滤波器阶数,na 是后向反馈的滤波器阶数,nb 是前向反馈的滤波器阶数。此表达式还不是很明显,不太容易明白,此表达式可变型为
  (2)
  通常情况下,a(n-i)被归一化为1.
  3、举例说明:
  data = [1:0.2:4]';
  windowSize = 5;
  filter(ones(1,windowSize)/windowSize,1,data)
  ans =
  0.2000
  0.4400
  0.7200
  1.0400
  1.4000
  1.6000
  1.8000
  2.0000
  2.2000
  2.4000
  2.6000
  2.8000
  3.0000
  3.2000
  3.4000
  3.6000
  解析:
  ones(1,windowSize)/windowSize,当windowSize=5时,生成的向量为[0.2 0.2 0.2 0.2 0.2],即分子系数向量 b = [0.2 0.2 0.2 0.2 0.2]
  data = [1:0.2:4]' = [1 1.2 1.4 1.6 1.8 2 ··· ···3.8 4]
  根据上面的表达式(2),以及 a(n-i) 归一化为1可知下面的推导过程,
  y(1) = b(1) ·x(1) = 0.2·1 = 0.2;
  y(2) = b(1)·x(2) + z1(1) = b(1)·x(2) + b(2)·x(1) = 0.2·1.2 + 0.2·1 = 0.44;
  y(3) = b(1)·x(3) + z1(2) =b(1)·x(3) + b(2)·x(2) + z2(1) = b(1)·x(3) + b(2)·x(2) + b(3)·x(1) = 0.2·1.4 + 0.2·1.2 + 0.2·1 = 0.72
  ··························
  以此类推





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马