FFT的前世今生(二)
從直觀上講,時(shí)域分析清晰易見,示波器即是進(jìn)行時(shí)域觀察的主要工具,可觀察波形形狀,測(cè)量脈寬,相差等信息。但對(duì)于信號(hào)的進(jìn)一步分析,比如測(cè)量各次諧波在所占的比重和能量分布,時(shí)域上的分析就力不從心了,但是利用從連續(xù)時(shí)間傅里葉變換發(fā)展而來的快速傅里葉變換FFT進(jìn)行分析就很有意義了。通信系統(tǒng)中必不可少的要使用頻譜分析技術(shù),例如頻分復(fù)用技術(shù)。 頻譜分析一般利用快速傅里葉變換FFT計(jì)算頻率譜和功率譜,可直接用來提取特征頻率和譜特征。因?yàn)橛?jì)算機(jī)只能夠處理離散的數(shù)據(jù)點(diǎn),但FFT是傅里葉變換的一種近似,與傅里葉變換存在差別,且具有固有的局限:柵欄現(xiàn)象。本文就在上一篇《FFT的前世今生》的基礎(chǔ)上,從測(cè)試測(cè)量的角度,談一談在示波器的FFT運(yùn)算中容易被大家忽略的一些問題。
頻率分辨率與時(shí)基設(shè)置(TimeBase)
頻率分辨率的定義是:在使用FFT運(yùn)算時(shí),在頻率譜上所能得到的最小的兩個(gè)頻率點(diǎn)間的間隔。
ΔF=Fs/N=1/NT=1/Tp
稱ΔF為頻率分辨率,即:采樣率/采樣點(diǎn)數(shù),ΔF越小說明頻率分辨率越高。ΔF僅與信號(hào)的實(shí)際長度成反比,即待分析的信號(hào)持續(xù)時(shí)間越長,ΔF越小,頻率分辨率越高。
柵欄效應(yīng)與頻率分辨率:
示波器輸入的信號(hào)一般都為非周期的連續(xù)信號(hào)
()axt
,它的頻譜也是連續(xù)的,但是示波器所做的工作
是將 ( ) a x t 進(jìn)行等間隔采樣并且截?cái)?,然后進(jìn)行FFT的運(yùn)算得到一個(gè)離散的頻譜圖,相當(dāng)于對(duì)連續(xù)的頻譜圖也進(jìn)行了采樣。這樣有一部分頻譜分量將被“擋在”采樣點(diǎn)之外,就好像我們?cè)谕ㄟ^一個(gè)柵欄觀察頻譜圖,這種現(xiàn)象稱為“柵欄效應(yīng)”。這樣就有可能發(fā)生一些頻譜的峰點(diǎn)或谷點(diǎn)被柵欄所攔住,不可能被我們觀察到。
不管是時(shí)域采樣還是頻域采樣,都有相應(yīng)的柵欄效應(yīng)。只是當(dāng)時(shí)域采樣滿足采樣定理時(shí),柵欄效應(yīng)不會(huì)有什么影響。而頻域采樣的柵欄效應(yīng)則影響很大,“擋住”或丟失的頻率成分有可能是重要的或具有特征的成分,使信號(hào)處理失去意義。
柵欄效應(yīng)是制約頻譜分析諧波分析精度的一個(gè)瓶頸。柵欄效應(yīng)在非同步采樣的時(shí)候,影響尤為嚴(yán)重。在非同步采樣時(shí),由于各次諧波分量并未能正好落在頻率分辨點(diǎn)上,而是落在兩個(gè)頻率分辨點(diǎn)之間。這樣通過FFT不能直接得到各次諧波分量的準(zhǔn)確值,而只能以臨近的頻率分辨點(diǎn)的值來近似代替,這就是柵欄效應(yīng)降低頻譜分析精度的原因。
由此我們可以得出這樣的結(jié)論:減小柵欄效應(yīng)可用通過提高頻譜采樣間隔也就是頻率分辨率的方法來解決。間隔小,頻率分辨率高,被“擋住”或丟失的頻率成分就會(huì)越少。但是頻率分辨率的提高會(huì)增加采樣點(diǎn)數(shù),使計(jì)算工作量增加。
我們可以通過兩種方式增加頻率分辨率:
a:物理分辨率=采樣頻率/采樣點(diǎn)數(shù)。
物理分辨率的實(shí)際意義在于它可以衡量FFT實(shí)際上可以區(qū)分的頻率分量的間隔。提高物理分辨率的方法一般是通過增加數(shù)據(jù)的有效長度,這相當(dāng)于在模擬域增加了矩形窗的寬度。從而在模擬域減小了sinc主旁瓣寬度,減小了相鄰頻率分量的混疊。
這種增加采樣點(diǎn)的方法主要針對(duì)無限長序列的FFT計(jì)算。對(duì)于無限長序列,不像有限長序列那樣必須補(bǔ)零來提高視在分辨率,無限長序列可以通過增加數(shù)據(jù)長度來提高物理分辨率。
第 2 頁 共 5 頁 2012-12-19
b:視在分辨率=采樣頻率/分析點(diǎn)數(shù)
在序列尾部補(bǔ)零的方法可以使得分析點(diǎn)數(shù)增大,故補(bǔ)零的方法可以提高頻譜的視在分辨率。對(duì)序列的尾部補(bǔ)零的方法主要針對(duì)有限長序列。對(duì)于有限長序列,有時(shí)只能用補(bǔ)零或者插值來改善頻率分辨率。通過補(bǔ)零處理,使得頻域采樣密度增大,得到高密度譜。補(bǔ)零的方法所得到的頻譜圖所改善的只是圖形的視在分辨率,并不能得到頻譜的更多細(xì)節(jié)。
增加采樣點(diǎn)數(shù),增加了輸入序列的階次,從而提供頻譜的更多細(xì)節(jié),這是真正的分辨率(物理分辨率)。對(duì)序列只補(bǔ)零而不增加數(shù)據(jù),輸入序列和它的頻譜階次依舊沒有提高,只是把頻譜畫的密一些,所以改善的只是圖形的視在分辨率,并不能得到頻譜的更多細(xì)節(jié)。增加序列的長度能夠改善頻譜的真正分辨率,這是基本的規(guī)律。
上面的討論可知,改善分辨率的具體方法有如下兩種
(1)對(duì)有限長序列采取尾部補(bǔ)零的方法提高視在分辨率
(2)對(duì)無限長序列通過真正增加采樣點(diǎn)來提高物理分辨率
有限長序列和無限長序列是針對(duì)實(shí)際信號(hào)來說的,例如非周期的但是包含無限長信息的信號(hào)可以稱為無限長序列,嚴(yán)格的周期信號(hào)和脈沖信號(hào)(脈沖之前和之后無限長時(shí)間內(nèi)都是無效信息)都可以稱為有限長序列,當(dāng)然實(shí)際上嚴(yán)格的周期信號(hào)是不存在的。對(duì)于示波器來說,時(shí)間窗口內(nèi)采集到的可以是有限長序列的全部信息或者是無限長序列的一部分信息。所以,如果采集到的是有限長序列的全部信息,那么只能通過補(bǔ)零的方式增加視在分辨率,如果采集到的是無限長序列的一部分信息,那么可以通過增加時(shí)間窗口的長度(不是采樣點(diǎn))來增加物理頻率分辨率。
請(qǐng)看下面的實(shí)例:
圖1中正弦波測(cè)試使用的時(shí)基是5ns/div,波形時(shí)間長度是50ns,計(jì)算FFT之后的頻譜分辨率是20MHz(1/50ns),
圖1 捕獲50ns的信號(hào),頻率分辨率是20MHz
如果改變時(shí)基設(shè)置,頻譜分辨率會(huì)有變化。如圖2所示:將時(shí)基設(shè)置為10ns/div,波形長度是100ns,頻譜分辨率可以提高到10MHz。
對(duì)于通過補(bǔ)零的方法增加FFT頻譜的視在分辨率,力科的示波器也有相應(yīng)的解決方案。力科示波器使用了兩種非常常用的FFT算法供用戶選擇:Cooley-Tukey算法和LeastPrime算法。Cooley-Tukey算法也稱為Power2算法,它提供了計(jì)算機(jī)一種非??焖俚腇FT計(jì)算方式,計(jì)算的FFT點(diǎn)數(shù)規(guī)模是2的整數(shù)方次,因此它會(huì)在示波器時(shí)域采集的信號(hào)中截取2的N次方的整數(shù)來作為FFT計(jì)算的時(shí)域樣本,該截取的整數(shù)是最接近于采樣點(diǎn)的整數(shù)。如下圖2所示:
圖2 捕獲100ns的信號(hào),頻率分辨率是10MHz
圖中的正弦波頻率為500MHz,時(shí)基設(shè)置為10ns/div,采樣率為20GS/s,時(shí)域采樣點(diǎn)數(shù)為2000points,使用Power2算法截取2000點(diǎn)中的1024點(diǎn)(210),如圖中的藍(lán)框所示(注意是從信號(hào)的中間部分截取),因此截取的時(shí)間窗口為1024×20ps=51.2ns,是500MHz信號(hào)的25.6個(gè)周期,由于截取的周期非整數(shù)倍,不可避免會(huì)產(chǎn)生頻譜泄露,如圖中FFT的旁瓣所示,此時(shí)的頻率分辨率可以達(dá)到19.35125MHz。
如果采用另外一種FFT算法LeastPrime,可以將整個(gè)示波器時(shí)域采集的采樣點(diǎn)進(jìn)行FFT運(yùn)算,LeastPrime算法計(jì)算的FFT點(diǎn)數(shù)規(guī)模是2N+5K,因此2000點(diǎn)=24+53,不需要截取原始數(shù)據(jù)就可以運(yùn)算,但是代價(jià)是計(jì)算的速度可能會(huì)慢一些(盡管我們可能覺察不到),頻率分辨率可以提高到10MHz。
使用Power2算法也可以不采用截取原始波形的方式,此時(shí)我們可以選擇Zero Fill(補(bǔ)零)的方式,增加采樣點(diǎn)數(shù)。比如,在2000點(diǎn)中補(bǔ)48個(gè)點(diǎn),2048=211,如圖3所示:
圖3 補(bǔ)零的放出提高頻率分辨率
這48個(gè)點(diǎn)補(bǔ)的方式是頭尾各補(bǔ)一半,但是有可能補(bǔ)的不是0,頭24個(gè)點(diǎn)與第一個(gè)采樣點(diǎn)值相同,尾24個(gè)點(diǎn)與最后一個(gè)采樣點(diǎn)值相同(所以稱之為Zero Fill是不完全準(zhǔn)確的)。這里我們推薦Zero Fill的方法只在分析沖擊信號(hào)FFT頻譜的情況下使用。
補(bǔ)零法雖然能增加頻譜圖的視在分辨率,但是由于補(bǔ)的都是無效數(shù)據(jù),所以對(duì)于頻率分辨率真正的改善沒有幫助,但是補(bǔ)零有它的好處:1.補(bǔ)零后,其實(shí)是對(duì)FFT結(jié)果做了插值,克服“柵欄”效應(yīng),使譜外觀平滑化;我把“柵欄”效應(yīng)形象理解為,就像站在柵欄旁邊透過柵欄看外面風(fēng)景,肯定有被柵欄擋住比較多風(fēng)景,此時(shí)就可能漏掉較大頻域分量,但是補(bǔ)零以后,相當(dāng)于你站遠(yuǎn)了,改變了柵欄密度,風(fēng)景就看的越來越清楚了。2.由于對(duì)時(shí)域數(shù)據(jù)的截短必然造成頻譜泄露,因此在頻譜中可能出現(xiàn)難以辨認(rèn)的譜峰,補(bǔ)零在一定程度上能消除這種現(xiàn)象。
除此之外,很多人都有這樣的誤區(qū):認(rèn)為通過增加待分析的計(jì)算點(diǎn)數(shù)而不是增加采樣時(shí)間就可以使FFT之后的頻譜更加“精細(xì)”(頻率分辨率更高)。這樣的誤解一般來自于示波器的用戶,因?yàn)楫?dāng)示波器采樣點(diǎn)比較少時(shí),F(xiàn)FT的計(jì)算出來的頻譜圖也會(huì)很少,頻譜看起來非常粗糙。這時(shí)工程師會(huì)非常有沖動(dòng)把時(shí)域的采樣點(diǎn)增多(用示波器上的插值算法很容易實(shí)現(xiàn)),但是如果采集信號(hào)的時(shí)間長度是不變的,工程師會(huì)發(fā)現(xiàn)FFT計(jì)算之后的頻譜并沒有顯得更加“精細(xì)”,頻率分辨率并沒有任何改善。實(shí)際上使用插值或者增加采樣率的方式僅僅是展寬了FFT之后的頻譜帶寬。如下圖4所示,
圖4 插值方式并不能改變頻率分辨率
左上方使用了較少的時(shí)域采樣點(diǎn)C1,右上方使用了較高的采樣率C2,但是采樣時(shí)間是相同的。左下是對(duì)C1進(jìn)行FFT之后的頻譜F1,右中是對(duì)C2進(jìn)行FFT之后的頻譜F2,右下是對(duì)F2相同頻段進(jìn)行了放大。可以看到F2比F1的頻寬增加了,但是對(duì)F1頻段放大之后的頻譜和F1一樣,沒有任何頻率分辨率的改善。
由此我們可以得出結(jié)論,對(duì)C1進(jìn)行插值后,額外的采樣點(diǎn)僅僅存在于較高頻段,會(huì)展寬頻譜的帶寬,但是插值方式對(duì)于增加我們感興趣頻段的頻譜分辨率沒有任何幫助。
那么如果我們只對(duì)對(duì)FFT之后的頻譜進(jìn)行插值效果如何呢?如下圖5所示:
圖5 頻域插值方式是頻譜圖看起來更密
圖中展示了對(duì)頻域插值之后的效果,并沒有使頻譜看起來更“窄”(畢竟插值出來的點(diǎn)都是假點(diǎn)),但是我們注意到,頻域插值可以使頻譜的測(cè)量更加精確。圖中正弦波的頻率是955MHz,插值之后頻譜的Peak頻率讀數(shù)P2是955MHz,插值之前P1的讀數(shù)為952MHz。
總之,F(xiàn)FT是進(jìn)行信號(hào)頻域分析的最廣泛使用的標(biāo)準(zhǔn)化方法,也是現(xiàn)代數(shù)字示波器中標(biāo)配的數(shù)學(xué)運(yùn)算函數(shù),我們更多了解FFT應(yīng)用的細(xì)節(jié),能更加有效地利用好這個(gè)工具,從FFT中得到更多有價(jià)值的信息。