您的位置:首页 > 编程语言 > MATLAB

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

2016-01-29 14:11 555 查看
转自: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)的差别在于有效部分形开始的少量结果有一致,到中间有效部分的

长度就是完全一样的了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: