2015-09-09 117 views
0

我正在使用MATLAB中的FFT命令對音頻(.wav)數據進行一些傅立葉變換。輸入值是介於-1.0和1.0之間的數字FFT的規模輸出(MATLAB)

我的理解是,在獲取FFT輸出的絕對值(模數)後,我應該得到具有振幅單位的值,但實際值是在數千的順序。這在理論上沒有任何意義,因爲我應該能夠對傅里葉分量進行求和以獲得原始信號。我覺得輸出也應該在0和1之間,那麼這裏有什麼?我的猜測是FFT算法使它不成比例,但我不確定用什麼值來縮放它。

回答

2

FFT是用於計算離散傅立葉變換(DFT)的算法。在其定義中,inverse DFT(IDFT)具有1/N比例因子。也許這就是讓你感到困惑的原因。從維基百科:

  • DFT(從有限序列X到傅立葉係數X):

    enter image description here

  • IDFT(從XX):

    enter image description here

所以,僅僅適用於ifftfft的結果,你會得到原來的結果。例如:

>> x = linspace(-1,1,5) 
x = 
    -1.0000 -0.5000   0 0.5000 1.0000 

>> y = fft(x) 
y = 
     0   -1.2500 + 1.7205i -1.2500 + 0.4061i -1.2500 - 0.4061i -1.2500 - 1.7205i 

>> abs(y) 
ans = 
     0 2.1266 1.3143 1.3143 2.1266 %// note values greater than 1 

>> ifft(y) 
ans = 
    -1.0000 -0.5000 0.0000 0.5000 1.0000 

事實上,IDFT可以expressed in terms of the DFT施加複共軛和稱爲縮放因子。通過表示的DFT˚F,在IDFT通過˚F-1和*的複共軛,

enter image description here

在上述例子中,

>> 1/numel(y) * conj(fft(conj(y))) 
ans = 
    -1.0000 -0.5000 0.0000 0.5000 1.0000 
+0

當然,另一種(同樣有效的)定義在DFT和IDFT中都有一個sqrt(1/N)項 - 這可能會給出OP期望的結果 –

+1

@BenVoigt好點。但是對於DFT和1/N縮放來說,1比例縮放是最常見的定義,至少在我的經驗中 –

+0

我想我明白由於每個X_k的n加起來會導致縮放比例失真,但是有沒有如何恢復正確的縮放比例?也就是說,如果輸入類似於方波,則在解析完成後,輸出將是與 –

0

在Matlab中使用下面的代碼從1縮放到(大致)0.

dataDFT=abs(fft(data)); % Take the complex magnitude of the fft of your data 
dataDFTScaled=dataDFT/max(dataDFT); % Divide by the maximum value 

您不希望它縮放到零,因爲這會使得無法在日誌圖上查看。