matlab中fft函數的一點理解


 

   看了一篇講理解離散傅立葉變換(二. 實數形式離散傅立葉變換)的文章(本博客“文章”中有轉載,點擊該鏈接可以直接進入作者的博客),可是一直不大好理解。所以想用matlab驗證一下,增強理解,順便把驗證的東西分享一下:

    首先,FFT(快速傅里葉變換)是一種實現DFT(離散傅里葉變換)的快速算法,是利用復數形式的離散傅里葉變換來計算實數形式的離散傅里葉變換)。matlab中的fft函數是實現該算法的實現(所以其實這個實驗的內容是幫助理解復數形式的離散傅里葉變換與實數形式的離散傅里葉變換之間的關系的)。

廢話不多說,先用matlab計算一個信號x的fft:

>> x=[1 2 3 4];

>> y=fft(x)

y =

10.0000      -2.0000 + 2.0000i      -2.0000     -2.0000 - 2.0000i

前面說的文章中提到DFT的合成等式:

                        dft

但是,如何將fft得到的結果和公式中的內容對應起來?

文章還提到:

那fft中得到的y的復數結果究竟是ReX還是ReXbar?(其實是ReX)根據上面的公式,cos和sin的系數都是N/2+1個,可y中卻有N個系數,其中的系數如何對應?

於是做了以下的驗證:

我們知道,式中N=4;頻率w=2π/N=1.5708;

>> rey=real(y)

rey =

10 -2 -2 -2

>> imy=imag(y)

imy =

0 2 0 -2

我們只取前(N/2+1=3)個系數,舍棄后面的系數,根據上面的轉換公式,求出對應的系數:

>> reybar=[10/4 -2/2 -2/4]

reybar =

2.5000 -1.0000 -0.5000

同樣求出imybar=[0 1 0],這樣我們通過合成公式嘗試着獲得原來的x

x(0)的值為

>> 2.5*cos(w*0*0)-1*cos(w*0*1)-0.5*cos(w*0*2)+0*sin(w*0*0)-1*sin(w*0*1)+0*sin(w*0*2)

ans =

1

x(1)的值為

>> 2.5*cos(w*1*0)-1*cos(w*1*1)-0.5*cos(w*1*2)+0*sin(w*1*0)-1*sin(w*1*1)+0*sin(w*1*2)

ans =

2

同樣求出,x(2),X(3)的值,恰好為 3和4,說明了上面的驗證是正確的。

也就是說:

1.matlab中的fft是根據復數形式的DFT來計算的,求出來的值其實是對應的頻率密度;

2.在已知輸入信號x的周期N的條件下,只需fft結果中的前(N/2+1)個值就可以正確還原出原信號x。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM