DFT公式的一個簡單示例


一個簡單的離散傅里葉變換公式如下面所示

X(k) = ∑<N>x(n)e-j2πkn/N, k = 0,1,2```N-1

傅里葉變換用於分析時域信號中的頻域成分,即從時域信號x(n)得到頻域信號X(k)

這里的∑<N>表示對求和項從n=0加到N-1,為N點傅里葉變換,輸入時域信號為N個,輸出頻域信號也為N個

看一個簡單的例子

x(t) = sin(2π*1000*t) + 0.5sin(2π*2000*t+3*π/4)

它由一個1kHz的信號和一個2kHz的信號組成,頻率成分非常明顯,所以我們能一眼看出,而有些信號則不是那么明顯,則可以借助傅里葉變換來求出頻率成分

此處以該簡單例子驗證,也可以說是做一個簡單的傅里葉變換的演示。

為了對該信號進行處理,我們需要對它進行采樣,假設采樣頻率為fs=8kHz,以n為采樣得到的值的索引,並以此為變量重新表示上述信號為

x(n) = sin(2π*1000*n/8000) + 0.5sin(2π*2000*n/8000+3*π/4)

並設N=8即做8個點的DFT變換,下面我們將借助MATLAB工具進行計算和演示

首先我們使用MATLAB畫出x(t)的波形,如下圖

圖中x軸的數字為我為了繪制該波形所用到的信號的個數,不要與時間單位秒對應,知道這里顯示了兩個周期的信號即可

下面再給出一組8點DFT輸入信號的圖示

圖中的8個點即我們使用8倍於信號周期(8kHz)采樣所得到的一個周期的樣本,利用這8個數據,我們便可以利用DFT求得其頻率成分

在MATLAB中,直接調用FFT並將結果用圖形顯示如下,FFT為計算DFT的一種快速算法,其結果和直接使用DFT是一樣的

如上圖,我們可以看到,計算的結果和我們已知吻合。計算得到信號中有1kHz和2kHz的頻率成分,且幅值前者為后者兩倍

這里有個小點,上面4個圖除了其中一個都是由FFT的計算結果直接繪制的,由於MATLAB對於0的表示,或者說是機器計算原本應該是0的值,它得到了一個很小的值(這很正常),所以用調用angle函數求得的相位是不正確的,

我直接根據正確的結果而繪制了相位圖

關於頻域信號的單位,很簡單,采樣率為fs的信號做N點DFT,所得到的頻域信號單位為

fanalysis(k) = k*fs/N

對於我們的例子,fs為8kHz,N為8,則對應X(k)當k為0時為直流量,k為1時為1kHz頻率成分,依此類推

從上圖我們還可以看到X(k)信號具有某種對稱性,准確的關系為

X(k) = X(k+N/2)*

即X(k)與X(k+N/2)共軛,也就是說,對於N點頻域信號,只有N/2個點的信號是獨立的

所以雖然從圖中看出好像是有6kHz和7kHz的信號成分,但實際上是不存在的,這也符合奈奎斯特采樣定理,采樣頻率必須大於兩倍的信號頻率,從側面反應出用8kHz去采樣最多只能采到4kHz以內的信號

所以我們可以看到,采樣率和做幾個點的DFT運算很關鍵,假設我們讓N=4,則就得不到1kHz頻率成分的情況

最后再解釋頻域幅值大小與時域幅值大小的關系,這里我們的輸入信號為實數信號,對應頻域幅值為時域幅值的N/2倍

 

寫在最后,剛剛接觸信號處理,寫點東西整理下思路。文中的例子來自Lyons的Understanding Digital Signal Processing,這是一本很不錯的教材,強烈推薦

 


免責聲明!

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



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