我正在做一个使用卷积在Matlab上生成回声的任务
我不明白wavread
实际上做了什么。输出是否可以在卷积中使用?
我试过并得到一个错误“A和B必须是矢量。”
另一个问题:如果我从波形文件中获得的信号为x(t)
,我该如何获得x(t-4)
?
答案 0 :(得分:1)
就像我在评论中所说,你很可能试图读取多声道音频文件,在这种情况下wavread
可能最有可能返回NxM
数组,其中{{1}是样本数,N
是通道数。您可以发布M
的输出,其中size(x)
是x
的输出吗?
根据您要执行的操作,您可以在通道之间平均以获得单个音频矢量(如单声道)作为wavread
,或者您可以选择要使用的特定频道,如{{1其中xAvg=mean(x,2);
是所选频道。
在回复上面关于零填充的评论时,请记住,在xChannelK=x(:,k);
点和1<=k<=M
点信号之间的卷积运算中,最终得到n
点输出。假设您要汇总m
和m+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)。使用卷积,如果在卷积函数中尚未完成,则可能必须使用一些零填充。
我希望这有帮助,祝你好运!