Правильно ли я использую преобразование Фурье?

Мне интересно, правильно ли я использую преобразование Фурье в MATLAB. Я хочу иметь все средние амплитуды частот в песне. В целях тестирования я использую бесплатную загрузку в формате mp3 песни Бетховена «К Элизе» , которую я преобразовал в монофонический файл с частотой 8 кГц с помощью Audacity .

Мой код MATLAB выглядит следующим образом:

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);

Вывод выглядит следующим образом: enter image description here

  1. Может кто-нибудь, пожалуйста, скажите мне, правильный ли мой код?Меня особенно интересуют пики около 0.
  2. Для нормализации мне нужно делить на NFFTили length(allSamples)?
  3. Для меня это не похоже на гистограмму, но я думаю, это связано с тем, что я рисую множество значений?

Спасибо за любые подсказки!

6
задан Eitan T 3 July 2012 в 11:14
поделиться