Me pregunto si estoy usando Fourier Transformation en MATLAB de la manera correcta. Quiero tener todas las amplitudes promedio para frecuencias en una canción. Para fines de prueba, estoy usando a free mp3 download of Beethovens "For Elise" que convertí en un archivo de onda única de 8 kHz usando Audacity.¿Estoy usando la transformación de Fourier de la manera correcta?
Mi código MATLAB es el siguiente:
clear all % be careful
% load file
% Für Elise Recording by Valentina Lisitsa
% from http://www.forelise.com/recordings/valentina_lisitsa
% Converted to 8 kHz mono using Audacity
allSamples = wavread('fur_elise_valentina_lisitsa_8khz_mono.wav');
% apply windowing function
w = hanning(length(allSamples));
allSamples = allSamples.*w;
% FFT needs input of length 2^x
NFFT = 2^nextpow2(length(allSamples))
% Apply FFT
fftBuckets=fft(allSamples, NFFT);
fftBuckets=fftBuckets(1:(NFFT/2+1)); % because of symetric/mirrored values
% calculate single side amplitude spectrum,
% normalize by dividing by NFFT to get the
% popular way of displaying amplitudes
% in a range of 0 to 1
fftBuckets = (2*abs(fftBuckets))/NFFT;
% plot it: max possible frequency is 4000, because sampling rate of input
% is 8000 Hz
x = linspace(1,4000,length(fftBuckets));
bar(x,fftBuckets);
La salida tendrá el aspecto siguiente:
- Puede alguien por favor dígame si mi código es correcto? Me pregunto especialmente sobre los picos alrededor de 0.
- Para normalizar, ¿tengo que dividir por
NFFT
olength(allSamples)
? - Para mí esto realmente no se ve como un gráfico de barras, pero supongo que esto se debe a los muchos valores que estoy trazando?
¡Gracias por cualquier pista!
¿Has visto esta página: [Usando FFT para obtener gráficos sencillos de análisis espectral] (http://www.mathworks.com/support/tech-notes/1700/1702.html). Tiene un ejemplo con muchas explicaciones – Amro