在Matlab上卷积wav文件

时间:2011-04-26 00:29:05

标签: matlab echo convolution

我正在做一个使用卷积在Matlab上生成回声的任务 我不明白wavread实际上做了什么。输出是否可以在卷积中使用?

我试过并得到一个错误“A和B必须是矢量。”

另一个问题:如果我从波形文件中获得的信号为x(t),我该如何获得x(t-4)

2 个答案:

答案 0 :(得分:1)

就像我在评论中所说,你很可能试图读取多声道音频文件,在这种情况下wavread可能最有可能返回NxM数组,其中{{1}是样本数,N是通道数。您可以发布M的输出,其中size(x)x的输出吗?

根据您要执行的操作,您可以在通道之间平均以获得单个音频矢量(如单声道)作为wavread,或者您可以选择要使用的特定频道,如{{1其中xAvg=mean(x,2);是所选频道。

在回复上面关于零填充的评论时,请记住,在xChannelK=x(:,k);点和1<=k<=M点信号之间的卷积运算中,最终得到n点输出。假设您要汇总mm+n-1。首先将其中一个向量翻转,然后将其滑过另一个向量,同时逐点相乘并在每一步添加结果。

然而,当你翻转它时,第二个向量在序列空间中突出显示未定义另一个函数的点(反之亦然)。所以你需要用零填充它们,直到它们的长度相同。

通过示例更好地显示了这一点。输出中的第一个点是

A=[a1,a2,a3]

在这里,我们在未定义另一个的点处用零填充B=[b1,b2,b3]0 0 a1 a2 a3 b3 b2 b1 0 0 -------------------- 0 + 0 + a1b1 + 0 + 0 -------------------- = a1b1 。输出中的第二点是

A

等等。您应该浏览wiki article on convolution以获取更多信息。但是,您无需手动执行此操作。 MATLAB的conv将自动为您执行此操作。所以你需要做的就是按顺序完成你的向量,你就可以了。

答案 1 :(得分:0)

是的,wavread为其输出生成一个向量(使用Matlab帮助或从命令窗口输入'docsearch wavread')。您也可以使用isvector(x)函数进行仔细检查。

Matlab向量使用索引来识别向量中的位置,这里是你的信号x。如果您以这种方式使用wavread:

x = wavread(*filename*)

然后x可以作为x,或x(:)或x(1:end)调用。如果要引用x(t-4),这很重要。如果x(t)可以表示为x(1:end),则x(t-4)应该是什么?

然而,诀窍是索引永远不会是负值,所以你不能只说x(t-4)是x(-3:end-4)。使用卷积,如果在卷积函数中尚未完成,则可能必须使用一些零填充。

我希望这有帮助,祝你好运!