2011-04-26 80 views
0

我正在做一個賦值生成在MATLAB上使用卷積回聲 我不明白什麼wavread實際上做。輸出是一個可以用於卷積的矢量嗎?卷積的Matlab上的WAV文件

我試過了,得到一個錯誤「A和B必須是矢量。」

另一個問題:如果我從波形文件得到的信號是x(t),我怎麼能得到x(t-4)

+0

您需要提供更多關於您要做什麼的信息。完全可能的是,你與之相關的第二個信號不是矢量。或者您可能正在閱讀多頻道數據。 – abcd 2011-04-26 01:13:06

回答

0

是的,wavread爲其輸出生成一個向量(使用Matlab幫助或從命令窗口鍵入'docsearch wavread')。您也可以使用isvector(x)函數進行仔細檢查。

Matlab矢量使用索引來標識向量內的位置,這裏是您的信號x。如果您以這種方式使用wavread:

x = wavread(*filename*) 

然後x可以作爲x或x(:)或x(1:結束)調用。如果你想引用x(t-4),這很重要。如果x(t)可以表示爲x(1:end),那麼x(t-4)應該是什麼?然而,訣竅是索引永遠不能是負值,所以你不能只說x(t-4)是x(-3:end-4)。使用卷積,如果尚未在卷積函數中完成,則可能必須使用一些零填充。

我希望這會有所幫助,祝你好運!

+0

您能否通過快速示例來解釋零填充的含義?也isvector(x)給出一個零,所以它不是一個向量 – AKenawy 2011-04-26 09:26:18

+0

如果isvector(x)是假的,那麼你很可能不正確使用wavread,或者你正在看的文件不是.wav文件。看看wavread的文檔。 – Thea 2011-04-26 14:23:39

1

就像我在我的評論說,你最有可能試圖在多通道音頻文件的讀取,在這種情況下wavread可能最有可能返回NxM陣列,其中N是樣本的數量和M是渠道數量。您可以發佈size(x)的輸出,其中xwavread的輸出?

取決於你想做什麼,你可以跨渠道平均獲得單個音頻載體(如單)作爲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 

這裏,我們已經在那裏了另一種是沒有定義的點填充AB零。輸出中的第二點是

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

= a1b2+a2b1 

等等。您應該通過wiki article on convolution獲取更多信息。但是,您不需要手動執行此操作。 MATLAB的conv會自動爲你做這個。所以你需要做的就是按順序獲得你的載體,你很好。

+0

Gotcha 謝謝 – AKenawy 2011-04-26 17:36:33