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: alt text

È stato utile?

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};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top