现在的位置: 首页 > 综合 > 正文

matlab中filter,conv之间的区别

2014年02月26日 ⁄ 综合 ⁄ 共 641字 ⁄ 字号 评论关闭

conv是做卷积,就是按照书上的做法,先翻转,在一步步平移,得出结果。对于两个长度分别为n,m的序列,卷积结果长度为m+n-1

filter是做滤波,其实原理跟卷积是想通的,只不过处理结果的方法不同,先看示例程序:

x=[1,2,3,4,5];
h=[1,1,1];

y1=conv(h,x)
y2=filter(h,1,x)
y3=filter(x,1,h)
y4=filter(x,1,[h,zeros(1,4)])

结果为:

y1 =

     1     3     6     9    12     9     5


y2 =

     1     3     6     9    12


y3 =

     1     3     6


y4 =

     1     3     6     9    12     9     5

现在对结果一一作出解释;

1.y1的确是严格按照卷积的数学表达式计算的,不解释。

在解释后面几条时,先说一下filter的用法:filter(B,A,X),其中B,A组成一个差分方程,X是输入信号,例如:

filter([1,2],1,[1,2,3,4,5])实现  y[k]=x[k]+2*x[k-1]
咱们这里讨论的就是A=1的情况。有了基本说明,现在言归正传:

2.说明filter函数平移停滞在X的最后一个输入与滤波器的第一个系数对齐时。这里为

				1	1	1
5	4	3	2	1
输出1,到
				1	1	1
				5	4	3	2	1
输出12

3.验证2的观点,这里为:

		1	2	3	4	5
1	1	1
输出1,到
		1	2	3	4	5
		1	1	1
输出6

4.依然是验证2的观点,从

				1	2	3	4	5
0	0	0	0	1	1	1	1
输出1,到
				1	2	3	4	5
				0	0	0	0	1	1	1	1
输出5	

并且,第4种情况下,通过补0使得所有的1都移到了滤波器抽头的末尾,这个结果与卷积是相同的。

到这里,我想大家就明白了二者的区别和关系。

抱歉!评论已关闭.