Matlab leggenda dopo ciclo FOR
Domanda
sto creando un file da leggere in un certo numero di file .wav, ciascuno dei quali corrisponde ad una nota musicale. Sto eseguendo una FFT su ciascuno di essi e li tracciando sulla stessa cifra. Tuttavia sto avendo un problema con ottenere la leggenda per stampare correttamente, sta separando i nomi che voglio usare in singole lettere invece di usarli come una stringa. Il mio codice è il seguente:
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;
La variabile sri è sempre una stringa completa, ma LegendText (1) solo stampa un posto di A3.wav. So che è probabilmente qualcosa di veramente ovvio, ma io proprio non riesco a trovarlo. Grazie
L'output sul mio grafico appare come questo:
Soluzione
Si dovrebbe usare
legendText{i} = sri
per riempire la cella con le stringhe e
legend(legendText{:});
alla fine.
Altri suggerimenti
Non ho MATLAB da me, quindi non sono in grado di provarlo, ma mi sembra di ricordare, è necessario utilizzare al posto di {[:
legendText = {legendText, sri};