傅利葉分析及快速傅立葉轉換(FFT)

前言

傅利葉分析的基礎概念,是基於真實世界的信號近似為不同頻率的正弦波所疊加的總和,總和如果包括愈多的正弦曲線,就愈接近真實的信號。

圖1中的第一條曲線是2個正弦波疊加的總和 - 振幅接近於一個3Hz方波(時基msec)。1個正弦波頻率為3Hz,另一個正弦波頻率為9Hz,第二條曲線是在第一條曲線上增加了一個15Hz正弦波及一個21Hz正弦波,它顯然更近似於一個3Hz方波。
此種正弦波疊加的總和,稱為三角函數傅利葉級數(Trigonometric Fourier Series),關於簡單波形的傅利葉級數,可以用微積分得到,有許多已發表在標準教科書中。
在級數中的每個正弦波的頻率,是近似的信號頻率的整數倍頻,這些稱為原始波形的諧波。在前例中,基頻為3Hz,因此,我們認為諧波是在3Hz、6Hz、9Hz、12Hz、15Hz..等,結果是,對此特殊的波形而言,所有偶數諧波的振幅皆為零,但這對所有的波形來說,是不正確的。

頻譜

每個諧波頻率都是以一個振幅(大小)及一個相位定義,相位是表示在諧波疊加到總和之前諧波位移的方式,相位資料可能不易解讀,其用途限制在一些專業的應用。

在y軸畫出諧波振幅及在x軸畫出諧波頻率,便產生一條頻譜,此頻譜是一組垂直線(或條),因為諧波只能有原始信號頻率的整數倍頻。理論上,頻譜雖可包括達到無限大的頻率,不過,實際上,極高頻率諧波的振幅,通常不明顯。

此處顯示的圖形,包括一個方波的前20次諧波,x軸表示諧波數,為了將諧波數轉換為Hz,只須乘以原始信號的頻率,例如,假如原始信號有一個頻率2kHz,第3個諧波將在6kHz。

請注意,由於原始信號是一個方波,偶數諧波為零,但情況未必總是如此,假如輸入一直是純音,我們認為理應得到一條單一長條,其振幅等於輸入音的振幅。

使用電腦進行傅利葉分析(FFT)

已發展出許多技術,可使電腦計算一個信號的傅利葉頻譜。無論採用何種技術,第一個步驟都是先將信號轉換為一組數字,以供電腦使用,方法是,在固定間隔對信號取樣,以產生一個數值表,每個取樣值與下個取樣值之間,是以一個固定的時間區間分開。

所得到的點數與取樣值之間的時間結合,可決定我們看信號的時間長度。
應用以下定義:

  • fs = 以Hz為單位的取樣率
  • dT = 1/fs = 取樣間隔
  • N = 擷取的取樣數
  • T = N x dT = 總時間區間
  • f1 = 1/T = 第一個諧波以Hz為單位的頻率

舉例來說,假如我們對AC電源有興趣,我們可以選擇取樣率6000Hz(fs)及蒐集100個取樣(N=100),結果將是dT=0.1667 msec及T=16.667 msec,那麼,第1個諧波將是f1=60Hz,傳統傅利葉分析的數學方法是以接近的連續波形為基礎,但是電腦只能處理一組取樣,這不會改變諧波分析的基本概念,但是現在,我們必須記住以下幾點:

  • 來自取樣的波形的頻譜,只能產生N/2諧波。
  • 假如原始信號所包含的多過於N/2諧波,在振幅頻譜中,更高頻率的諧波,將產生錯誤。

此種錯誤稱為假波,可在執行傅利葉分析前,先將輸入信號濾波,使f1及N/2以上沒有頻率成份,而防止假波現象發生。最常用的產生頻譜的電腦演算法,是FFT或稱為快速傅利葉轉換,正如名稱所意味的,FFT非常有效率,但是,有一點會影響到它使用的方式,就是,FFT只能處理一個取樣的波形,而N(取樣數)是2的次方,可接受的N數值包括128、256、512及1024,此點的完整重要性,將於稍後討論。

【備註】:
FFT,就如多數電腦演算法一樣,可產生一個指數傅利葉級數,而非三角函數傅利葉級數。這兩種級數是完全相同的,只除了由指數傅利葉級數產生的振幅為三角函數傅利葉級數數值的一半以外,但多數應用軟體會針對此點自動補償,而將此振幅頻譜表現得如同三角函數傅利葉級數。

分析更複雜的波形

直到現在,我們都假設輸入信號是週期性的及有固定頻率,我們建立此頻譜,以便使第一個諧波與基本輸入頻率相同。當我們提前對信號有些瞭解時,例如當我們在分析AC電壓時,這個直接了當的方法是有幫助的。

在許多情況中,我們面對一個可能沒有明顯信號週期的更複雜的信號,如下範例:

x軸是以秒為單位的時間,假如我們對此信號以4096Hz速率取樣,蒐集1024個取樣,並將它們完成FFT,我們得到以下頻譜:

此頻譜告訴我們,原始信號包含3個純音,而實際上,這些純音是在60Hz、300Hz及1200Hz。
 

在此點上作一些觀察是有幫助的:

  • 由於N=1024,因此,FFT產生512個諧波,為簡化x軸刻度,圖形只顯示前400個。
  • 振幅為三角函數級數作了修正,因此,使用相同單位作為輸入信號。
  • 取樣週期的長度是0.25s,因此,第一個諧波(f1)是4Hz,頻譜看起來很好且乾淨,因為所有的音都是4Hz的倍數。

不幸的是,事情不常是如此。

洩漏效應

前面的範例看起來很棒,因為所有組成原始信號的音頻都是f1(1/T)的倍數,以下是相同的安排,不過,300Hz音頻已移至302Hz。

 

儘管302Hz音頻實際上並未改變振幅,但頻譜看來郤不同,此種效應稱為洩漏效應,發生在當原始信號的一個頻率成份不是取樣週期(T)的整數倍頻時,此種音頻的振幅似乎洩漏到其它諧波裡了。展開x軸,可以將此種效應看得更明顯。

這是相同的頻譜,不過,我們現在只顯示前100個諧波,4Hz這個步階變得更明顯,請注意,音頻振幅應該是90(等於60Hz音頻)。

洩漏效應是使用有限的一組取樣資料的直接結果,假如我們可以蒐集及處理無限量的取樣,頻率增量(x軸)會變得非常小,而所有可能的頻率將是有效的諧波。FFT演算法不會比其它演算法增加更多的洩漏效應,但是它會使修正此問題更為困難,因為它會限制我們對N的選擇為2次方。

當洩漏效應是個問題時,有兩種方法可以改善頻譜的精度:

  • 變更取樣組以對齊諧波成份。
  • 以加權視窗修正取樣值。

使用加權視窗,以將洩漏效應減至最少

「視窗」一詞,當用於產生一個傅利葉頻譜時,有其特定的意義,細想一下第一張圖形內的信號,為了分析信號諧波,必須對它取樣一些固定的週期(T)。

在數學上,這相當於一組數值乘以1.0及波形的所有其它數值乘以零,實際上,我們藉著以一個振幅1.0的矩形視窗阻隔波形的所有其它部份,而產生一組取樣資料。結果顯示於下圖中:

多數的電腦演算法則,包括FFT,似乎是將此組取樣視為一個連續迴路般的處理,假如N=256(取樣0到255),那麼,它是假定在255之後的數值與在取樣0的數值相同,此種假設,在視窗(T)包括一個整數倍的重複週期時是正確的,但當它不正確時,例如在本例中,介於第一個與最後一個取樣數值之間的中斷,看來像是FFT的一個步階變動,並造成洩漏效應。

使用一個非矩形視窗,可減少洩漏效應,實際上,這是在調整取樣組中每個取樣的大小而蒐集取樣組後完成,然後,調整的數值便用於作為FFT的輸入。

已有許多視窗發展出來,每個視窗有它自己的成本及效益。

視窗範例 - 矩形視窗

下圖1是1024個取樣的圖形,將用於產生一個傅利葉振幅頻譜,x軸是以秒為單位的時間軸,取樣過程是以下列參數定義:

  • fs=1024Hz(取樣率)
  • N=1024(取樣數)
  • T=1秒(視窗長度)

FFT從此組取樣產生512個諧波(N/2),在諧波間的間距是1Hz,等於第一個諧波的頻率(f1=1/T),圖2是畫出前100個諧波的振幅,請注意,諧波一詞或許使人困惑,因為它是從視窗長度T導出,可能跟信號沒有明顯關係。

此頻譜指示原始信號是由2個基本成份組成,不過,洩漏效應使得振幅不容易決定。原始信號實際上是由2個音頻構成,其一是一個11.6Hz音頻,振幅75,其二是55.4Hz,振幅90。

頻譜顯示一個峰值在12Hz,振幅55.1,另一個峰值在55Hz,振幅68.2,2個成份的相對振幅很接近,不過絶對振幅郤非常失真。

視窗範例 – 三角及漢明(Hamming)視窗

下圖是前一個範例以三角視窗修改後的波形,原始波形是完全以跟前述相同的方式取樣,不過,取樣點是以三角視窗調整過,請注意,前面跟後面的取樣點現在是如何的衰減。

 

下圖是顯示當使用此組修改的取樣時的前100個諧波。

峰值是位在相同的頻率,但很清楚的,它的分佈(洩漏)較小,振幅也比較精準(65.7及78.8),不過,仍然不正確。

另一種普遍使用的視窗是以餘弦函數為基礎的漢明視窗(Hamming),它的設計也是峰值在取樣的中間,兩端逐漸減少為零,對同組取樣使用漢明視窗(Hamming),產生以下頻譜,峰值是位在相同的點上,振幅65.7及79.1。

【備註】:
基於由非矩形視窗引起的振幅型式錯誤,振幅已作過修正 - 三角視窗的修正因子是0.5,漢明視窗(Hamming)是0.54,這是以波瓣高度為基礎所作的技術修正。

選擇視窗的要點:

  • 假如輸入信號是週期性及為取樣視窗的倍數,那麼,就使用矩形視窗。
  • 假如輸入是個短脈衝或脈衝群,起點及終點都在相同的振幅,那麼,請使用矩形視窗(只要取樣視窗包括整個暫態)。
  • 假如輸入是非週期性的連續波形的部份,請使用漢明視窗(Hamming)或三角視窗。

重新取樣

如前例所述,當頻率成份並非取樣視窗的整數倍時,使用加權視窗可以改善頻譜的品質。不幸的是,這些範例也指出,即使使用加權視窗,仍然有些失真。

假如,主要頻率成份互為彼此的倍數,最好的方法是調整取樣過程,讓一個完整週期的輸入信號對準取樣視窗,假如可以這麼做,最好的視窗是矩形視窗,此種情形可在例如電源線監測的應用中發現,因為它有一個強烈的主要頻率驅動著信號。

最乾淨的方法是調整取樣率,直至N點是完全在一個週期的輸入信號中得到為止。當使用FFT時,這可能不切實際,因為N必須是2的次方。所需要的取樣率可能不適用或資料先前已蒐集而不能重複。

這兩個問題的解決方案,是重新對一組資料取樣,在需要之處插補,以產生理想的取樣組。

分貝

以dB表示頻譜的振幅很常見,一個分貝(1/10 Bel)是原本在對照標準聲音之下用於測量聲音強度的單位,一般而言,可用於表示任何信號對照參考之下的強度或功率。使用對數刻度,可將大範圍的振幅表現在一個單一圖形上。

當它應用在功率時,dB的定義是:dB=10 log(輸入功率/參考功率)。

請注意,負數表示輸入功率小於參考功率。由於參考因應用而異,易使人混淆。有時會加一個字母,以表示使用一個標準參考,例如,dBm是以1mw為參考而測量信號功率,假定功率是以w為單位測量,以下公式即適用:dBm=10 Log(Mag/.001)。

實務上,將某些信號的平方值視為功率,已變得愈來愈常見,在一個電壓波形與一個固定負載的情形下,這是對的,因為功率實際上是V*V/R,依此邏輯,當只有一個電壓信號時,在假定標準負載為50Ω之下,有時會使用dBm的單位。振幅0.316V的一個正弦曲線電壓,是顯示為0dBm (1mw)。

情況變得愈來愈令人疑惑不解了,因為多數電氣工程師使用dBm在對照參考之下表示信號振幅(非信號功率),這在數學上,只要假設有一個固定的電氣負載(R),是可連結到標準的定義,因為:P1/P2 = [(V1 x V1)/R]/[V2 x V2)/R] = (V1 x V1)/(V2 x V2)及10Log[(V1 x V1)/(V2 x V2)] = 20 Log(V1/V2)

因此,當從信號振幅(非信號功率)計算dB時,使用一個因數20:dB=20 Log(振幅/參考)

dBV單位是基於一個參考1V及假設輸入信號是以V為單位:dBV-10 Log(Mag/1V)

振幅也可與原始信號的峰值或原始信號的RMS相比,以導出額外的dB刻度,有內建放大器的儀器,可使用單位dBVFS,這是將振幅對照輸入放大器的最大刻度範圍設定(20 Log(Mag/FS))而得到的,這是有幫助的,因為它不需要輸入信號為V或w單位。

2016-04-11