0

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

我试过了,得到一个错误“A和B必须是向量。”

另一个问题:如果我从波形文件中得到的信号是 ,我x(t)怎么能得到x(t-4)

4

2 回答 2

1

就像我在评论中所说的那样,您很可能正在尝试读取多通道音频文件,在这种情况下,wavread很可能会返回一个NxM数组,其中N是样本M数,是通道数。你能发布输出吗,输出在size(x)哪里?xwavread

根据您想要执行的操作,您可以在通道之间进行平均以获得单个音频矢量(如单声道)xAvg=mean(x,2);,或者您可以选择一个特定的通道来使用 like 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

在这里,我们在未定义另一个的点处填充了零AB输出中的第二点是

0    a1     a2    a3  0
b3   b2     b1    0   0
-----------------------
0 + a1b2 + a2b1 + 0 + 0
-----------------------

 = a1b2+a2b1

等等。您应该阅读关于卷积的 wiki 文章以获取更多信息。但是,您不必手动执行此操作。MATLABconv会自动为您执行此操作。所以你需要做的就是整理好你的向量,你就可以开始了。

于 2011-04-26T15:41:54.520 回答
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)。对于卷积,您可能必须使用一些零填充,如果它尚未在您的卷积函数中完成。

我希望这个帮助能祝你好运!

于 2011-04-26T06:19:05.597 回答