2012-07-03 27 views
6

我想知道如果我正確使用MATLAB中的傅立葉變換。我想擁有歌曲中所有頻率的平均幅度。出於測試目的,我使用a free mp3 download of Beethovens "For Elise",我使用Audacity將其轉換爲8 kHz單聲道波形文件。我是否正確使用傅里葉變換?

我的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. 對於正常化,我必須除以NFFTlength(allSamples)
  3. 對我來說,這看起來並不像條形圖,但我猜這是由於我繪製的許多值?

感謝您的任何提示!

+1

你見過本頁:[使用FFT獲取簡單光譜分析圖](http://www.mathworks.com/support/tech-notes/1700/1702.html)。它有很多解釋的例子 – Amro

回答

6
  1. 取決於您對「正確」的定義。我認爲這是做你想做的,但它可能不是很有用。我建議使用2D spectrogram,因爲您可以獲得關於頻率內容的時間本地化信息。

  2. 正常化FFT輸出沒有一種正確的方法;有各種不同的約定(參見例如討論here)。你的代碼中的註釋表明你想要的範圍是0到1;如果你的輸入值在-1到1的範圍內,那麼除以箱子的數量就可以實現這一點。

  3. 嗯,確切!

我還建議在對數刻度繪製y軸(在decibels),因爲這是人耳大致如何解釋響度。那我跳出

2

兩件事情:

  1. 我不知道你爲什麼包括DC(指數= 1)在你的陰謀的組成部分。沒有什麼大不了的,但當然bin不包含頻率數據
  2. 我認爲除以length(allSamples)比除以NFFT更可能是正確的。原因是如果你想讓DC分量等於輸入數據的平均值,除以length(allSamples)是正確的。

然而,就像奧利說的,你不能真正說出什麼是「正確的」規範化,直到你確切地知道你在計算什麼。我傾向於使用FFT來估計功率譜,所以我想要像「DAC/rt-Hz」這樣的單位,如果你想要像「DAC/Hz」那樣會導致不同的歸一化。

最終,沒有必要考慮想要從FFT(包括單元)中獲得什麼,併爲自己制定正確的標準化應該是什麼(如果需要,從FFT的定義開始)。

你也應該知道MATLAB的fft不需要使用2的冪數組(儘管這樣做可能會導致FFT運行速度更快)。由於零填充會引入一些響鈴,因此您需要考慮是否爲您的應用程序執行正確的操作。最後,如果週期圖/功率譜真的是你想要的,MATLAB提供的功能如periodogrampwelch和其他可能有用的功能。