2016-03-15 32 views
0

我試圖找到我的.wav文件的峯值,並有使用findpeaks方法MATLAB - 如何找到峯WAV文件

a = audioread('FilterNew.wav'); 
[pks,locs] = findpeaks(a) 

但是當我運行該腳本,它給了我3錯誤

使用findpeaks的錯誤 預期的Y是一個向量。

錯誤findpeaks> parse_inputs(線189) validateattributes(陰,{ '數字'},{ '非空', '真實', '載體'},...

錯誤findpeaks(線131) [Y,yIsRow,X,xIsRow,胡志明MINP,minW,maxW,心,薄荷,MaxN中,sortDir,註釋,refW] ...

我試着用搜索引擎,但我沒有找到任何答案,所以我希望在這裏得到一些幫助。代碼有什麼問題?或者說,我的.wav文件已損壞?!??

謝謝


感謝mathematician1975管理繪製圖。

現在,我想要繪製的峯值圖形和標記爲左,右兩個峯butit使用情節 載體必須是相同的長度

於是我查了是給我 錯誤的錯誤大小

>> size(a(1,:)) 

ans = 

    1  2 

>> size(a(:,2)) 

ans = 

     467712   1 

我的代碼

a = audioread('FilterNew.wav'); 
[pks,locs] = findpeaks(a(:,1)); 

[pks2,locs2] = findpeaks(a(:,2)); 

figure 
x = (1:length(a)); 
plot(x,a,'k'); 

figure 
z = (1:length(a)); 
plot(z,a,'k'); 

hold on 
plot(locs,pks,'go'); 

hold on 
plot(locs2,pks2,'ro'); 

enter image description here

我該如何解決?再一次感謝你!

回答

0

在Matlab 2015a中,函數audioread()的輸出是雙倍的矩陣和採樣頻率。簡單打字:

a = audioread('filename.wav'); 

應該返回一個音頻採樣矩陣。 Findpeaks()期望一個向量,所以你只需要選擇矩陣中的哪一列數據就是你感興趣的那一列:

[pks,locs] = findpeaks(a(:,1)); 
+0

謝謝。有用。我在更新後的問題 – user1730935

+0

@ user1730935中遇到了另一個問題,通常您應該提出一個新問題,而不是更新原始問題。你的劇情代碼的問題是你犯了一個大小錯誤。如果你輸入大小(a),你會得到467712行和2列。什麼是p? – willpower2727

+0

對不起,我犯了一個錯字。它應該是pks和pks2。現在它沒有矢量長度錯誤。但是現在我想要做的是繪製左右圖並分別找出峯值。之後,標記他們。但似乎我做錯了。參考問題的圖片。謝謝 – user1730935