关于MATLAB中conv()卷积结果的长度的探讨

转自:http://wenku.baidu.com/link?url=_XsCGpmz9URT55q82Ka0Amgu2svvG8VyuTq71BvzTQmNIzqj_5DIanp8NkI6duePNyuxltuTWcJcnFi1MWseTXxgJuysud0CawPHrjGCh77

关于MATLAB中conv()卷积结果的长度的探讨 

1.  问题的提出 
众所周知,已知信号长度为M的时间序列{x(i), i=1,M}与长度为N的近似理想脉冲响
应滤波器{h(i),i=1,N}的卷积长度为M+N-1的序列{y(i),i=1,M+N-1}。实际上只有中间的M-N+1的长度是有效卷积的内容。而两端各有N/2的长度,是部分{h(i)}和{x(i)}乘积求和的结
果,是两个脉冲函数,这两端的部分不是我们想要的。 
 在实际应用中,我们希望得到的{y(i)},不仅能够在长度上与{x(i)}一致,而且在内容
上也全部是有效的。MATLAB中conv(x,h,flag)的函数flag有三个选项“full”,”same”和
“valid”。在默认情况下是“full”全部长度即M+N-1,完整的调用格式为conv(x,h,’full’)。 
‘valid’选项的长度只M-N+1, 其内容就是’same’和‘full’的中间M-N+1的部分。而‘same’中
的前首尾两端各N/2不是我们想要的,’full’首尾两端各N的长度也不是我样想要的。 
 
2.  解决方法 
(1) 周期延拓 
将原始的{x(i)}中尾部N/2长度的数据接在其前面,并且将原始{x(i)}中头部的数据
接在其后面,即完成了周期延拓。再使用conv(x,h,’valid’)就可以得到与原始{x(i)}在长度上
相同,重要的是有效的卷积序列。 
(2)  多天数据首尾相接法 
如果{x(i)}是一天的长度,那么可将前天的数据末尾N/2长度的数据接在当天{x(i)}的前
面,将下一天的数据的头部N/2长度的数据接在当天{x(i)}的尾部。再进行conv(x,h,’valid’)
就可以得到与原始{x(i)}在长度上相同,重要的是有效的卷积序列。 
方法(1)与(2)的差别在于有效部分形开始的少量结果有一致,到中间有效部分的
长度就是完全一样的了。
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值