Je crée un fichier à lire dans un certain nombre de fichiers .wav, chacun correspondant à une note musicale. J'effectue une FFT sur chacun d'eux et les traçant tous sur la même figure. Cependant, j'ai un problème avec l'impression correcte de la légende, c'est la séparation des noms que je veux utiliser en lettres individuelles au lieu de les utiliser comme une chaîne. Mon code est le suivant:Matlab Legend after FOR boucle
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 variable est toujours une SRI chaîne complète, mais LegendText (1) n'imprime A au lieu de A3.wav. Je sais que c'est probablement quelque chose de vraiment évident mais je n'arrive pas à le trouver. Merci
La sortie sur mon graphique apparaît comme ceci:
En note, il semble que vous devez tracer l'axe des ordonnées sur une échelle logarithmique plutôt que linéaire. Utilisez la fonction 'semilogy' ou simplement:' set (gca, 'YScale', 'log') '... – Amro