matlab中filter函数和conv函数的区别

本文详细探讨了filter函数和conv函数在滤波和卷积操作中的区别,解释了两者输出长度不同的原因。通过实例展示了如何使用filter函数通过补零来得到与卷积相同长度的结果。总结了filter函数从n=1开始假设所有n<1为0,而conv则考虑了n<1的部分,强调了两者本质上的相似性。
摘要由CSDN通过智能技术生成

问题:

我们知道滤波的本质就是卷积,但是为什么用filter函数输出的数据长度和用conv函数输出的长度不一致呢?

  • y=filter(p,d,x)用来实现差分方程,另一句话说是实现滤波,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。
  • y=conv(x,h)是用来实现卷积的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。
  • 二者是相通的,只不过处理的方法不同。

卷积定义式

在这里插入图片描述
可以理解x(n)是待滤波的数据,h(n)是滤波器系数。待滤波的数据个数有M个,滤波器长度为N,卷积得到的结果长度应该为M+N-1。

conv

例如:

x = [1 2 3 4 5]
h = [1 2 3]
y1=conv(h,x)
h(n)					1	2	3
x(n)	5	4	3	2	1
输出1h(n)					1	2	3
x(n)		5	4	3	2	1
输出4
h(n)					1	2	3
x(n)			5	4	3	2	1
输出10
h(n)					1	2	3
x(n)				5	4	3	2	1
输出16
h(n)					1	2	3
x(n)					5	4	3	2	1
输出22
h(n)					1	2	3
x(n)						5	4	3	2	1
输出22
h(n)					1	2	3
x(n)							5	4	3	2	1
输出15

运行结果

y1 = 
		1 4 10 16 22 22 15
		

y1长度为3+5-1=7

filter本质

如果是用filter函数,输入数据x,滤波器系数为h

y2 = filter(h,1 x)

filter的输出结果是y2,y2 长度和待滤波数据的个数一样是5个。计算过程如下

h(n)					1	2	3
x(n)	5	4	3	2	1
输出1h(n)					1	2	3
x(n)		5	4	3	2	1
输出4
h(n)					1	2	3
x(n)			5	4	3	2	1
输出10
h(n)					1	2	3
x(n)				5	4	3	2	1
输出16
h(n)					1	2	3
x(n)					5	4	3	2	1
输出22

运行结果

y2  = 
		1 4 10 16 22

到这里可以发现两者的区别了。
二者处理方法的区别:
filter函数平移停滞在x的最后一个输入x(5)与滤波器的第一个系数h(1)对齐时。而conv函数平移停留在x的最后一个输入x(5)与滤波器系数的最后一个系数h(3)对齐。

如何得到使用filter函数得到和卷积结果长度一样呢?我们先试试以下命令,通过补零的方法


y3 = filter([h,zeros(1,4)]1,x) 

平移计算过程如下

h(n)					1	2	3	0	0	0	0
x(n)	5	4	3	2	1
输出1h(n)				1	2	3	0	0	0	0
x(n)	5	4	3	2	1
输出4
。
。
直到
h(n)				1	2	3	0	0	0	0
x(n)				5	4	3	2	1
输出22

运行结果

y3 = 
		1 4 10 16 22
  • filter输出结果与输入数据长度一致(5个)
  • 得到的结果不是卷积的结果长度
  • 下面试试另一种写法
y4 = filter(h,1,[x,zeros(1,2)])

运行结果

y4 = 
		1 4 10 16 22 22 15

输出结果与卷积一致
还有另一种写法


y5 = filter(x,1,[h,zeros(1,4)]) 

平移计算过程

h(n)					1	2	3	0	0	0	0
x(n)	5	4	3	2	1

输出1h(n)				1	2	3	0	0	0	0
x(n)	5	4	3	2	1
输出4
h(n)				1	2	3	0	0	0	0
x(n)		5	4	3	2	1
输出10
h(n)				1	2	3	0	0	0	0
x(n)			5	4	3	2	1
输出16
h(n)				1	2	3	0	0	0	0
x(n)				5	4	3	2	1
输出22
h(n)				1	2	3	0	0	0	0
x(n)					5	4	3	2	1
输出22
h(n)				1	2	3	0	0	0	0
x(n)						5	4	3	2	1
输出15

运行结果

y5 = 
		1 4 10 16 22 22 15

通过补零,观察计算过程,与卷积是相同的,结果与卷积一致。
补多少个零呢?设置补零的个数:补零后的长度为卷积结果的长度即可。

总结

filter函数y(n)是从n=1开始,认为所有n<1都为0;而conv是从卷积公式计算,包括n<1部分。因此filter 和conv 的结果长短不同。
但本质是一样的,翻转,平移,乘积和。
因此,要想使用filter函数得到与卷积结果一致长度的结果,要补零。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值