我們知道,快速傅里葉變換 (FFT) 是信號(hào)處理的重要數(shù)學(xué)工具。一般而言,n點(diǎn)信號(hào)的離散傅里葉變換 (DFT) 的變換結(jié)果(頻域)也是n個(gè)數(shù)據(jù)點(diǎn)。但在實(shí)際應(yīng)用中,對(duì)實(shí)際信號(hào)作FFT時(shí),常常涉及到變換前數(shù)據(jù)需要補(bǔ)零 (Zero padding) 的問(wèn)題。
一些論壇里,曾看到某些專業(yè)人士從信息論的角度分析認(rèn)為:“Zero padding沒(méi)有增加時(shí)域信號(hào)的有效信息,因此,不會(huì)改變DFT/FFT的分辨率”。那么, 補(bǔ)零到底有什么用,什么時(shí)候需要補(bǔ)零呢? 對(duì)于一般的工程技術(shù)人員來(lái)說(shuō),基本就是調(diào)用現(xiàn)成代碼或模塊進(jìn)行計(jì)算,很少考慮這些問(wèn)題。其實(shí),了解和搞清楚這個(gè)問(wèn)題,對(duì)實(shí)際應(yīng)用還是很有幫助的。接下來(lái),我們將從以下幾個(gè)方面來(lái)簡(jiǎn)要闡述如何補(bǔ)零,以及它對(duì)頻譜分析結(jié)果的影響。
什么是補(bǔ)零 ( Zero Padding )?
簡(jiǎn)單來(lái)說(shuō),補(bǔ)零 (Zero Padding) 就是對(duì)變換前的時(shí)域或空域信號(hào)的尾部添加若干個(gè)0,以增加數(shù)據(jù)長(zhǎng)度。如圖1所示,為含有1.00MHz和1.05MHz兩個(gè)頻率成分合成的正弦波實(shí)信號(hào)。
(a)
(b)
圖1 時(shí)域信號(hào)的補(bǔ)零示意圖
圖1(a)中信號(hào)長(zhǎng)度為1000個(gè)樣點(diǎn),采樣頻率為 fs =100MHz時(shí),信號(hào)的實(shí)際時(shí)長(zhǎng)則為10us。在其尾部添加1000個(gè)0,即數(shù)據(jù)增加到了2000個(gè)點(diǎn)(時(shí)長(zhǎng)為20us),則變?yōu)閳D1(b)所示的波形。
這個(gè)過(guò)程就是通常所說(shuō)的補(bǔ)零(ZeroPadding)。
為什么要Zero Padding?
最直接的理由就是,如果時(shí)域波形的數(shù)據(jù)樣點(diǎn)為2的整數(shù)冪的話,F(xiàn)FT計(jì)算將是最高效的,硬件 (FPGAs) 計(jì)算FFT,就是采用了這樣的Padding工作模式。那么,我們所關(guān)心的補(bǔ)零會(huì)不會(huì)影響計(jì)算輸出的頻率分辨率呢?
關(guān)于FFT頻率分辨率
這里涉及到兩種意義下的分辨率問(wèn)題,一種叫“波形頻率分辨率 (Waveform frequency resolution”) 或叫視覺(jué)頻率分辨率 (Visual frequency resolution);另一種則叫做“FFT分辨率”。雖然,這個(gè)分類和命名不一定是很專業(yè)的術(shù)語(yǔ),但卻有助于對(duì)“頻率分辨率”概念的理解。在沒(méi)有補(bǔ)零的情況下,這兩個(gè)概念通常容易被混淆,因?yàn)樗鼈兪堑葍r(jià)的。
波形頻率分辨率是指可以被分辨的2個(gè)頻率的最小間隔 (Spacing);而FFT 分辨率則是頻譜中的數(shù)據(jù)點(diǎn)數(shù) (The number of points in the spectrum),它是與做FFT的點(diǎn)數(shù)直接相關(guān)的。
因此,波形頻率分辨率可定義為:
其中,T是實(shí)際信號(hào)的時(shí)間長(zhǎng)度。
同樣,F(xiàn)FT分辨率可以定義為:
其中,fs為采樣頻率 (the sampling frequency),Nfft為FFT的點(diǎn)數(shù)。ΔRf代表了FFT頻率軸上的頻率取值的間隔 (Spacing)。
值得注意的是,可能有很好的FFT分辨率,但卻不一定能夠很好的把2個(gè)頻率成分簡(jiǎn)單的分開(kāi)。同樣,可能有很高的波形分辨率,但波形的能量峰值會(huì)通過(guò)整個(gè)頻譜而分散開(kāi)(這是因?yàn)镕FT的頻率泄漏現(xiàn)象)。
我們知道,信號(hào)的離散傅里葉變換 (DFT) 或快速傅里葉變換 (FFT) 是對(duì)波形的任何一邊補(bǔ)零形成的無(wú)限序列進(jìn)行計(jì)算的。這就是,為什么FFT的每個(gè)頻率單元 (bin) 都具有明顯的sinc波的形狀。
波形頻率分辨率1/T與一個(gè)sinc函數(shù)空值間隔 (the space between nulls) 是一樣的。
例 析
下面以一個(gè)具有2種頻率成分的周期信號(hào)為例,說(shuō)明Zero Padding與頻譜分辨率的關(guān)系:
其中,f1 = 1.00MHz,f2 = 1.05MHz,頻率間隔為0.05MHz。也就是說(shuō),在我們的頻譜分析曲線上能看到2個(gè)頻率點(diǎn)的峰,若2個(gè)正弦波的幅度為1伏 ( V),那么我們期望在1MHz和1.05MHz的頻率點(diǎn)處的功率為10dBm。
分以下幾種情況進(jìn)行分析:
1. 時(shí)域信號(hào)1000個(gè)點(diǎn)采樣,做相同樣點(diǎn)數(shù)的FFT。
圖2 原始信號(hào)的功率譜 (1000點(diǎn) FFT)
圖2中,我們并沒(méi)有看見(jiàn)期望的兩個(gè)脈沖,因?yàn)閳D中僅出現(xiàn)一個(gè)脈沖點(diǎn),其幅度約為11.4dBm。顯然,這個(gè)圖并不是我們想要的正確的頻譜圖。原因很簡(jiǎn)單,沒(méi)有足夠的分辨率看見(jiàn)兩個(gè)峰值 (Peaks)。
2. 時(shí)域信號(hào)1000個(gè)點(diǎn)采樣,后端補(bǔ)6000個(gè)零,做7000點(diǎn)數(shù)的FFT。
我們自然想到,采用補(bǔ)零方式增加FFT點(diǎn)數(shù),以使頻率軸上能增加更多點(diǎn)數(shù)。如采用7000個(gè)點(diǎn)做FFT,即需要在原1000點(diǎn)信號(hào)尾部增加6000個(gè)零值(即60us時(shí)長(zhǎng)),則原始信號(hào)變?yōu)閳D3(a)所示,其FFT結(jié)果如圖3(b)所示。
(a)
(b)
圖3 原始信號(hào)補(bǔ)零及功率譜 (7000點(diǎn) FFT)
圖3中,我們也并沒(méi)有看見(jiàn)期望的結(jié)果。仔細(xì)觀察一下,此圖到底告訴了我們什么呢?即通過(guò)增加更多FFT點(diǎn)數(shù)的做法,使得波形頻率分辨率公式中的sinc函數(shù)的定義更清晰。可以看出,sinc空值 (nulls) 間隔大約是0.1MHz。
由于給出信號(hào)的兩個(gè)正弦波的頻率間隔是按0.05MHz分隔的,因此,不管我們用多少FFT點(diǎn)數(shù) (Zero padding),都無(wú)法解決2個(gè)正弦波的問(wèn)題。
再來(lái)看一下頻率分辨率ΔRf告訴了我們什么。盡管,F(xiàn)FT分辨率大約為14kHz(足夠的頻率分辨率),而波形頻率分辨率僅僅為100kHz。兩個(gè)信號(hào)的頻率間隔是50kHz,所以我們受限于波形頻率分辨率 ΔRw 。
3. 時(shí)域信號(hào)7000個(gè)點(diǎn)采樣,做7000點(diǎn)數(shù)的FFT。
為了合理地解決這個(gè)頻譜的問(wèn)題,需要增加用于FFT的時(shí)域數(shù)據(jù)的長(zhǎng)度(點(diǎn)數(shù))。因此,我們直接采集波形的7000點(diǎn)作為輸入信號(hào),取代補(bǔ)零 (Zero Padding) 方式到70us (7000 點(diǎn)) 。時(shí)間域信號(hào)及對(duì)應(yīng)的功率譜分別如圖4a-4b所示。
(a)
(b)
圖4 按7000點(diǎn)采集的信號(hào)及其功率譜
通過(guò)時(shí)域數(shù)據(jù)的周期延拓,現(xiàn)在的波形頻率分辨率ΔRw也近似為14KHz。但從頻譜圖中,我們還是看不見(jiàn)2個(gè)正弦波。1MHz信號(hào)已按正確的10dBm功率值清晰地表征,而1.05MHz 信號(hào)變寬,且未以期望的10dBm 功率分布。這是為什么呢?
原因就是1.05MHz處并沒(méi)有FFT點(diǎn)的分布,此處的能量被多個(gè)FFT點(diǎn)分散(泄露)了。
給出的例子中,采樣頻率是100MHz,F(xiàn)FT點(diǎn)數(shù)為7000。頻譜圖中,點(diǎn)與點(diǎn)之間的間隔是14.28kHz。1MHz頻率剛好為頻率間隔的整數(shù)陪,而1.05MHz 卻不是。距1.05MHz最近的整數(shù)倍頻率為1.043MHz和1.057MHz,因此,能量被這2個(gè)FFT單元所分散。
4. 時(shí)域信號(hào)7000個(gè)點(diǎn)采樣,后端補(bǔ)1000個(gè)零,做8000點(diǎn)數(shù)的FFT。
為了解決這個(gè)問(wèn)題,我們可以合理選擇FFT的點(diǎn)數(shù),以便這兩個(gè)點(diǎn)能在頻率軸上成為獨(dú)立分開(kāi)的點(diǎn)。由于,我們并不需要更好的波形頻率分辨率,僅采用時(shí)域數(shù)據(jù)的零填充方式來(lái)調(diào)整FFT數(shù)據(jù)點(diǎn)的頻率間隔。
給時(shí)域信號(hào)增加1000零值 (10us),使得頻率間隔為12.5kHz,這樣,滿足了1 MHz and 1.05MHz兩個(gè)頻率都是這個(gè)間隔的整數(shù)倍。此時(shí),給出的功率譜如圖5所示。可以看出,兩個(gè)頻率問(wèn)題得到解決,而且功率均在期望的10dBm。
圖5 補(bǔ)零至8000點(diǎn)信號(hào)的功率譜
為了進(jìn)一步觀察過(guò)度補(bǔ)零的現(xiàn)象,通過(guò)時(shí)域補(bǔ)更多的零值 (10000點(diǎn)) 來(lái)完成更多點(diǎn)數(shù)的FFT(確保具有正確的波形頻率分辨率 ΔRw ),我們就可以清晰地看到FFT單元 (bins) 的sinc波形狀,如圖6所示。
圖6 補(bǔ)零至107000點(diǎn)信號(hào)的功率譜
-
FFT
+關(guān)注
關(guān)注
15文章
443瀏覽量
60514 -
功率譜
+關(guān)注
關(guān)注
0文章
13瀏覽量
8450 -
信號(hào)處理器
+關(guān)注
關(guān)注
1文章
255瀏覽量
25656 -
時(shí)域分析
+關(guān)注
關(guān)注
0文章
41瀏覽量
11188 -
DFT算法
+關(guān)注
關(guān)注
0文章
27瀏覽量
7674
發(fā)布評(píng)論請(qǐng)先 登錄
24位或者說(shuō)高分辨率的AD到底有什么用呢?
新手一個(gè),關(guān)于系統(tǒng)外擴(kuò)8253接口電路,有個(gè)問(wèn)題求教育==、
BLE一次廣播的字節(jié)數(shù)一定是32個(gè)嗎,剩余自動(dòng)補(bǔ)零?
_SlNonOsMainLoopTask() 函數(shù)有什么用,什么時(shí)候調(diào)用?
調(diào)用STM32的DSP庫(kù)做fft運(yùn)算補(bǔ)零是為了補(bǔ)充虛部嗎?
筆記本固態(tài)硬盤(pán)到底有什么用呢
異常處理向量表的設(shè)置中DCD這些偽指令到底有什么用?
為什么要用傅里葉變換?FFT你不知道的細(xì)節(jié)
到底有哪些原因會(huì)導(dǎo)致電樞絕緣阻值為零?
關(guān)于賽靈思FPGA實(shí)現(xiàn)高效并行實(shí)時(shí)上采樣的分析和介紹

數(shù)據(jù)可視化到底有什么用?
關(guān)于FFT的信號(hào)補(bǔ)零操作

評(píng)論