关于matlab filter这个函数到底怎么用?

如题所述

第1个回答  2018-02-06
看了网上许多回答,感觉都不清楚,自己亲自动手实验计算后,特写下这个过程。
在matlab中输入:help filter 即可查看该函数的解释,关于它的解释,有一点需要注意,表达式中的nb与na并非是n*b或者n*a,nb(或者na)是一个标识符,类型为整型,表示的是序列(或者叫向量)中索引为nb(或者na)的元素。
首先解释下y = filter(b, a, x)这句话中的参数。其中,b、a均为向量(行列向量均可,且对结果不影响),a与b的长度不一定相等,且a和b都是相互独立的(谁也不能决定谁),具体的值可以自己任意设定。x为需要滤波的向量,y为滤波后的向量(显然,x和y的长度是一样的,看后面例子就知道了)。举个例子来说明filter的原理,如下:
>> a = [1 2];
>> b = [2 3];
>> x = [1 2 3 4 5 6];
>> y = filter(b, a, x)
y =
2 3 6 5 12 3
下面给出具体的计算过程如下:
a(1)y(1) = b(1)x(1); %可以求出y(1)
a(1)y(2) = b(1)x(2)+b(2)x(1) –a(2)y(1); %可以由y(1)求出y(2)
a(1)y(3) = b(1)x(3)+b(2)x(2)-a(2)y(2); %可以由y(2)求出y(3)
a(1)y(4) = b(1)x(4)+b(2)x(3)-a(2)y(3); %可以由y(3)求出y(4)
a(1)y(5) = b(1)x(5)+b(2)x(4)-a(2)y(4); %可以由y(4)求出y(5)
a(1)y(6) = b(1)x(6)+b(2)x(5)-a(2)y(5); %可以由y(5)求出y(6)
计算结束,得到y(n)(n=1、2、....、6)
所以,filter的原理就是,等式左边y(n)(n=1、2、....)的系数始终是a(1),而等式右边则是用x(n)与b(m)的加权和减去y(n)与a(r)的加权和,并且,b(m)和a(r)的下标m、r从左到右都是递增的,x(n)和y(n)的下标n从左到右都是递减的,而右边式子的终止条件就是:必须同时保证下标m、r和n都不能超过各自相应的范围。比如对于a(1)y(6)就不能等于:b(1)x(6)+b(2)x(5)-a(2)y(5)-a(3)y(4);虽然y(4)中的下标4并未超限,但a(3)的下标3却是超出了向量a的范围,因为a中只有两个元素,即a的长度为2,不存在第三个元素,所以,a(3)y(4)这一项就不能再写了,至于其后面的a(4)y(3)、a(5)y(2)等显然也是不能写的了。
第2个回答  2011-12-10
help filter
相似回答