2011-01-21 156 views
5

我正在創建一個文件來讀取一定數量的.wav文件,每個文件對應一個音符。我正在對它們進行FFT,並將它們全部繪製在同一個圖上。不過,我在正確打印圖例時遇到了問題,它將要使用的名稱分隔爲單個字母,而不是將它們用作字符串。我的代碼如下:FOR循環後的Matlab圖例

clear all 
mydir = 'Note Values/'; 
wavFiles = dir([mydir '*.wav']); 
length(wavFiles) 

legendText = []; 
figure(1); 
hold on; 
for i = 1:length(wavFiles) 

    wavFiles(i).name 
    [y, fs] = wavread([mydir wavFiles(i).name]); 
    sound(y, fs) 

    currentSample = y(round(length(y)/2)-2048:round(length(y)/2)+2047); 

    FFT = abs(fft(currentSample)); 
    Power = FFT.*conj(FFT)/length(FFT); 

    if (mod(i, 2) == 1) 
     h = plot(Power, 'Color', 'red'); 

    else 
     h = plot(Power, 'Color', 'blue'); 
    end 

    sri = wavFiles(i).name; 
    sri 
    legendText = [legendText, sri]; 

end 
length(legendText) 
legendText(1) 
legend(legendText(:)); 
hold off; 

斯里蘭卡變量始終是一個完整的字符串,但的LegendText(1)只打印出而不是A3.wav的。我知道這可能是非常明顯的,但我無法找到它。由於

我圖的輸出表現爲這樣: alt text

+0

作爲一個方面說明,它看起來應該在對數刻度而不是線性上繪製y軸。使用`semilogy`函數或者簡單地:`set(gca,'YScale','log')`... – Amro 2011-01-21 13:23:15

回答

3

您應該使用

legendText{i} = sri 

,以填補串細胞和

legend(legendText{:}); 

結束。

1

我沒有MATLAB的我,所以我不能測試它,但我記得,你應該使用{代替[:

legendText = {legendText, sri}; 
+0

我已經嘗試過使用{}括號,它會導致legendText(1)包含{1x2單元格}導致以下錯誤。 錯誤使用==>圖例> process_inputs at 560 單元格數組參數必須是字符串的單元數組。 單元格數組中的第二個元素是處理的最後一個文件的名稱。 – Joneser 2011-01-21 11:39:44

+0

通過這樣做,您可以創建一個包含單元格和字符串的單元格。 – 2011-01-21 12:11:18