我正在做一個賦值生成在MATLAB上使用卷積回聲 我不明白什麼wavread
實際上做。輸出是一個可以用於卷積的矢量嗎?卷積的Matlab上的WAV文件
我試過了,得到一個錯誤「A和B必須是矢量。」
另一個問題:如果我從波形文件得到的信號是x(t)
,我怎麼能得到x(t-4)
?
我正在做一個賦值生成在MATLAB上使用卷積回聲 我不明白什麼wavread
實際上做。輸出是一個可以用於卷積的矢量嗎?卷積的Matlab上的WAV文件
我試過了,得到一個錯誤「A和B必須是矢量。」
另一個問題:如果我從波形文件得到的信號是x(t)
,我怎麼能得到x(t-4)
?
是的,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)。使用卷積,如果尚未在卷積函數中完成,則可能必須使用一些零填充。
我希望這會有所幫助,祝你好運!
就像我在我的評論說,你最有可能試圖在多通道音頻文件的讀取,在這種情況下wavread
可能最有可能返回NxM
陣列,其中N
是樣本的數量和M
是渠道數量。您可以發佈size(x)
的輸出,其中x
是wavread
的輸出?
取決於你想做什麼,你可以跨渠道平均獲得單個音頻載體(如單)作爲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
和B
零。輸出中的第二點是
0 a1 a2 a3 0
b3 b2 b1 0 0
-----------------------
0 + a1b2 + a2b1 + 0 + 0
-----------------------
= a1b2+a2b1
等等。您應該通過wiki article on convolution獲取更多信息。但是,您不需要手動執行此操作。 MATLAB的conv
會自動爲你做這個。所以你需要做的就是按順序獲得你的載體,你很好。
Gotcha 謝謝 – AKenawy 2011-04-26 17:36:33
您需要提供更多關於您要做什麼的信息。完全可能的是,你與之相關的第二個信號不是矢量。或者您可能正在閱讀多頻道數據。 – abcd 2011-04-26 01:13:06