DFT插零FFT算法理解
20180801:1043
圖1
為什么FFT時域補0后,經FFT變換就是頻域進行內插?
應該這樣來理解這個問題:
補0后的DFT(FFT是DFT的快速算法),實際上公式并沒變,變化的只是頻域項(如:補0前FFT計算得到的是m*2*pi/M處的頻域值,而補0后得到的是n*2*pi/N處的頻域值),M為原DFT長度,N變成了補0后的長度。將(-pi,pi)從原來的M份變成了N份,如果將補0前后的這些頻域值畫在坐標上,其中m*2*pi/M和n*2*pi/N重合的部分,它所對應的頻域值(變換后的值)是不變的,而在原來的M份里多了(N-M)份的分量,即在頻域內多了(N-M)份插值,這樣理解就清楚了。
補零好處有二:
其一是,可使數據點數為2的整次冪,以便于使用FFT
其二,對原數據起到了做插值的作用,一方面克服“欄柵”效應,使譜的外觀平滑,
另一方面,由于對數據截短時引起的頻域泄漏,有可能在頻譜中出現一些難以確認的譜峰(見《數字信號處理》課本147頁圖6-13),補零后有可能消除這種現象。
20180801:0929
圖2
DFT泄漏和加窗-頻域分析的重要理論?
在最后補零不能提高分辨率
因為補零并不能增加數據的有效長度。
書上說了,好處有二:
其一是,可使數據點數為2的整次冪,以便于使用FFT
其二,對原數據起到了做插值的作用,一方面克服“欄柵”效應,使譜的外觀平滑,
另一方面,由于對數據截短時引起的頻域泄漏,有可能在頻譜中出現一些難以確認的
譜峰,補零后有可能消除這種現象。
頻域的采樣率不是指頻域分辨率,是指在頻域采樣點數
重復會出問題的… 做能量譜的時候… 能量譜做出來后會爽爽的變成一個柵欄,但柵欄有數的地方還是對的。
圖3
DFT分辨率、補零和頻域采樣–頻域分析的重要理論
每一個章節都要查看一下:
http://blog.sina.com.cn/s/blog_8a3196910101ki1o.html
二、柵欄效應與分辨率
信號x(n)的DFT相當于對x(n)做Z變換,然后在單位圓上對頻率進行N的點(等間隔)的抽樣,所以信號x(n)被分解成一個個信號的組合,這些信號都是單頻的且彼此之間等間隔離散。頻域離散也可以直接由傅里葉變換公式得到,或者直觀的由圖(d)得到。這些頻率都在基頻的整數倍處,不是連續的頻率函數,我們通過這個離散的頻譜函數來分析原函數的頻率分布。對于離散頻率之間的頻率信息我們不得而知,這就是柵欄效應。
柵欄效應的本質就是頻率的離散化,它是頻譜率散化的一種形象的描述。
柵欄效應的產生導致了頻譜分辨率的問題。頻譜分辨率就是頻域兩相鄰譜線之間的頻率間隔。
首先需要明白,頻率有模擬頻率與數字頻率之分,模擬頻率表示的譜線間隔其實際值的數學表達式為fs/N(Hz)也就是1/T,T為時域一個周期的長度,計算公式為1/(Ts*N),f為時域抽樣頻率,頻域譜線間隔等于時域周期的倒數,這個關系可以由變換關系式得到,任何形式的傅里葉變換都滿足這樣的關系。;數字角頻率與模擬頻率之間的關系為w=Ω*T,其中Ω模擬角頻率,所以數字角頻率表示的譜線間隔w=2π/N。
對于真正的頻率(模擬頻率)我們要增加頻譜分辨率,表面看有兩種方法,減小采樣頻率和提高N。一般情況下我們是針對已有的采樣數據而言,因為fs已定,不能改變。所以分辨率只能通過提高N來得到改善。在不改變原采樣數據的情況下,我們可以在信號后面補零。這就是常說的補零法。
現在我們從DFT公式上分析補零的效果。因為頻域點數和時域點數是相等的,所以首先頻譜點數增多。由正變換公式,設點數由N變為m*N,新變換的頻率用k1表示,當k1滿足m*k時,由exp(j*k1*2π/(m*N)可知此時的頻率點和未補零前k時的頻率點是重合的,此時正變換公式求和項與為補零前的求和項是一樣的,只不過增加了求和點數,不過這些點數也就是補的x(n)值是零,對求和并無影響。如果不化成真正的幅度,那么這兩個頻譜圖在這些頻率點上頻譜圖是完全重合的。因為N發生了變化,所以真正的幅度以1/m的比例的發生了變化。
仿真結果如下,m等于2,也就是補了N個零。頻譜的幅度不是真正的幅度,沒有對其做除以N的處理。由于補了一倍的點,圖g可以看出,每隔一個點,兩個頻譜都是重合的。相對于原來的頻譜函數,在頻域進行了內插,所以頻譜分辨率提高了。
補零的結果是對已經截斷得到的信號的頻譜分辨率的提高,而不是對原來為截斷的信號的分辨率的提高。這由圖(d)可以很容易看出,補零后DFT的結果使得圖10的譜線變的更密而更加逼近圖(6),而做不到使頻譜逼近圖(2),所以截斷而丟失的信息無法通過補零而得到。
20180801:0839
第二種方法:相應地,我也可以通過把輸入信號和每一種頻率的正余弦信號進行相乘(關聯操作),從而得到原始信號與每種頻率的關聯程度(即總和大小),這個結果便是我們所要的傅立葉變換結果,下面兩個等式便是我們所要的計算方法:
圖4
第二個式子中加了個負號,是為了保持復數形式的一致,前面我們知道在計算 時又加了個負號,所以這只是個形式的問題,并沒有實際意義,你也可以把負號去掉,并在計算 時也不加負號。
這里有一點必須明白一個正交的概念:兩個函數相乘,如果結果中的每個點的總和為0,則可認為這兩個函數為正交函數。要確保關聯性算法是正確的,則必須使得跟原始信號相乘的信號的函數形式是正交的,我們知道所有的正弦或余弦函數是正交的,這一點我們可以通過簡單的高數知識就可以證明它,所以我們可以通過關聯的方法把原始信號分離出正余弦信號。當然,其它的正交函數也是存在的,如:方波、三角波等形式的脈沖信號,所以原始信號也可被分解成這些信號,但這只是說可以這樣做,卻是沒有用的。
總結
以上是生活随笔為你收集整理的DFT插零FFT算法理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QMC5883L磁力计驱动
- 下一篇: 【2019-08-14】慢慢来,才叫快