2011-01-21 16 views
5

Estoy creando un archivo para leer en un cierto número de archivos .wav, cada uno de ellos corresponde a una nota musical. Estoy realizando una FFT en cada uno de ellos y tramando todos en la misma figura. Sin embargo, tengo un problema para hacer que la leyenda se imprima correctamente, está separando los nombres que quiero usar en letras individuales en lugar de usarlos como una cadena. Mi código es el siguiente:Leyenda de Matlab después del ciclo FOR

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 Sri siempre es una cadena completa, pero LegendText (1) sólo se imprime una vez de A3.wav. Sé que probablemente sea algo realmente obvio, pero no puedo encontrarlo. Gracias

La salida en mi gráfico aparece como esto: alt text

+0

Como nota al margen, parece que debe trazar el eje y en una escala de registro en lugar de lineal. Use la función 'semilogía' o simplemente:' set (gca, 'YScale', 'log') '... – Amro

Respuesta

3

que puedes usar

legendText{i} = sri 

para llenar la celda con cuerdas y

legend(legendText{:}); 

al final.

+0

Muchas gracias, sabía que iba a ser algo pequeño. – Joneser

+1

En cuanto a cadenas: la matriz solo puede contener caracteres (que forman una cadena). Para obtener múltiples cadenas, las células son la solución. –

1

no tengo MATLAB por mí, así que no soy capaz de probarlo, pero por lo que recuerdo, se debe utilizar en lugar de { [:

legendText = {legendText, sri}; 
+0

He intentado usar los {} corchetes ya y resulta en legendText (1) que contiene {1x2 cell} que da como resultado el siguiente error. Error al usar ==> leyenda> process_inputs en 560 El argumento de matriz de celda debe ser una matriz de celdas de cadenas. Y el segundo elemento en la matriz de celdas es el nombre del último archivo procesado. – Joneser

+0

Al hacer eso, crea una celda que contiene una celda y una cadena. –

Cuestiones relacionadas