爲了方便討論,以下用的都是邏輯頻率和週期,先給出邏輯頻率和週期的定義:
頻率f:整個序列(數組)中有幾個這個正弦波的週期
週期T:這個正弦波一個週期中的採樣點數
邏輯頻率和物理頻率的轉換,可以直接把邏輯頻率縮放到物理頻率:
離散傅里葉變換(DFT)的公式:
其中x(t)爲時域信號數組,X(f)爲頻域數組,把f=0~N-1代入X(f),就能得到各個頻率的正弦波(結果是個複數,幅值爲複數的模,初相爲 )
各正弦波的頻率
週期
例如下圖藍色曲線頻率爲3,幅值爲2;紅色曲線頻率爲16,幅值爲1。把它們相加就得到了綠色曲線。對綠色曲線採樣,做DFT後得到頻域爲圖的下半部分(x軸爲頻率,y軸爲幅值)
(因爲整個時域序列相加了, 纔是原來的正弦波幅值,所以IDFT公式前面要乘1/N)
由DFT的公式可知,X(1)~X(N/2-1)和X(N-1)~X(N/2+1)是共軛複數。N/2+1~N-1又叫負頻率,因爲DFT得到的頻域函數也是周期函數,X(N/2+1)~X(N-1)和X(-N/2+1)~X(-1)的值相等。用具體例子理解負頻率:有個車輪順時針旋轉,如果旋轉頻率增大到人眼採樣頻率的N/2+1~N-1,即負頻率,看起來車輪就是逆時針旋轉了
根據採樣定理(香農定理、奈奎斯特定理),只有頻率小於採樣頻率/2的信號能無損還原,N/2叫做奈奎斯特頻率。我們能用到的實際上只有直流量和正頻率(f=0~N/2-1)
頻率超過N/2會怎麼樣
f=31,隨着頻率增加,正負頻率越來越靠近N/2
f=32,每個週期剛好採樣到2個點(再增大就只有1個點了),正負頻率合爲了奈奎斯特頻率
這個時候信號已經失真了,比如相位超前90°,採樣到的就全是0
f=33,採樣到的點看起來和f=31一樣,算得頻率就是31
f=63,頻率繼續增加,採樣到的點頻率反而減小了,這裏和f=1一樣
f=64,看起來就是直流信號
f=65,又和f=1一樣了
DFT做了什麼
我們只看實數部分,虛數部分同理,只是用sin表示正弦波,相位差了90°。DFT其實就是把時域信號加權相加,權值等於相應頻率,幅值爲1的cos序列
爲什麼這樣就能把不同頻率的正弦波分開
這是利用了三角函數的正交性,即頻率爲0, 1, 2, … 的任意兩個正弦波乘積在整個週期(採樣序列)積分(求和)爲0
例如 ,x(t)與f=3的正弦波相乘後就變成了 ,再求和後,第二項變爲0消掉了,只有頻率相同的第一項留了下來
如果不正交呢
下圖爲頻率爲3.5的情況
可以看出整個頻域範圍幅值都不爲0,就像幅值從頻率3.5泄露出去了,這種現象叫做頻譜泄露。DFT其實把原信號當成了無限長序列信號,如下圖,原信號改變了,所以頻域也變了
其實就是把正弦波截斷後,週期不完整了,出現了非整數的頻率,破壞了三角函數的正交性。實際應用中難免截斷完整週期,爲了減少頻譜泄露的影響,有兩種方法,一種是把原信號加窗後再DFT;另一種是增加用來變換的序列長度,這樣可以把頻率分得更細,讓三角函數更接近正交