為了當(dāng)干貨,本文不浪費篇幅闡述FFT的原理和算法,這些信息非常多,我們假定客戶們已經(jīng)知曉,有了一些基礎(chǔ)。不過說實話,工程師并不一定需要懂原理和會算法,我們大概知道它的意思就行,畢竟會用才是最關(guān)鍵的。
我們先提煉出幾個重要的問題點,一般的工程師們只要了解這幾點就夠用了。
問題1:我們可以用示波器看到某個信號的時域波形,為什么還要用FFT看這個信號的頻域波形?
答案是,現(xiàn)實中很多信號的波形看起來長得很 復(fù)雜,用數(shù)學(xué)描述它極其困難,甚至人直觀的描述它都做不到,那就更談不上分析它和處理它了。這時候,我們只能換一個思路和方法,在頻域上拆解它,就更容易分析處理了。
舉個例子:
上面這張圖,左側(cè)是時域波形,右側(cè)是它的頻域FFT波形。從時域波形來看,很簡單,就是一個幅值100,頻率3赫茲的正弦波。這種情況下,根本沒有必要做FFT變換看頻域波形。任何關(guān)于這個信號的描述和表達都很清晰明了,有明確而簡單的數(shù)學(xué)公式來表示這個信號,要對這個信號做任何分析和處理都有一大堆經(jīng)典公式和大量的經(jīng)驗方法。
那么來看下面這個圖:
現(xiàn)實中,你可能遇到的是這樣的一個信號,這是它的時域波形,時域波形也就是時間領(lǐng)域波形的意思,就是橫坐標(biāo)是時間的推移,跟我們的現(xiàn)實直覺認(rèn)知相符合。那么對面這樣一個時域波形,誰能描述清楚它的特征,用簡單的數(shù)學(xué)公式近似表述它,怎么分析和處理它?
這時候就要用到FFT的頻域分析,經(jīng)過分析,我們可以知道,其實它就是三個正弦波疊加而成的:
這樣我們就能簡單準(zhǔn)確的表述,分析和處理這個信號。
再看一個類似的例子:
問題2:用FFT做頻譜分析具有普適性嗎?什么樣的信號才能用FFT分析?
答案是肯定的,工程上,我們可以對你采集顯示的任何波形進行FFT分析。
通過上面的例子,可能有人會有疑問,雖然上面看到復(fù)雜的波形其實是由三個標(biāo)準(zhǔn)的正弦波疊加起來產(chǎn)生的,這是不是故意找的特例?現(xiàn)實中的波形大部分不是這樣由三個標(biāo)準(zhǔn)正弦波疊加出來的怎么辦呢?
是的,上面的例子的確是找的特例,雖然是特例,但是能很直觀的說明問題。那么現(xiàn)實中其他的隨機的復(fù)雜波形怎么辦?沒關(guān)系,F(xiàn)FT厲害的地方就在這里,理論上,任意波形都可以通過FFT拆解成一系列幅值頻率相位不同的標(biāo)準(zhǔn)正弦波疊加而成。
這就類似于一束白光,其實可以拆解成頻率不同的色光疊加而成的。時域信號就是那束白光,棱鏡就是FFT,拆解出來的不同顏色的光,就是頻域波形的不同頻率點上的譜線。
我們用LOTO虛擬USB示波器的OSCA02為例,先測一個標(biāo)準(zhǔn)正弦波的FFT頻譜,將時域波形與它對應(yīng)的頻域波形對比看看。
可以看出,一個標(biāo)準(zhǔn)的正弦波,它的FFT頻譜就是在對應(yīng)的頻率上的一個高度為正弦波幅值的豎線。
然后我們再測一下一個方波信號對應(yīng)的FFT頻譜的波形:
可以看出方波信號可以拆解成一系列正弦波的疊加,這些正弦波就是頻譜波形上的那些小豎線。頻率與方波頻率相同的正弦波分量我們一般稱為基波,頻率為3倍的正弦波分量稱為3次諧波,然后5次,7次諧波等等一直到無限。
理論上,這個方波是由無限個正弦波分量疊加而成的。工程上,我們其實不需要去處理無限多個分量,因為這樣工作量太大且沒有必要,一般只是取前多少個分量進行分析處理就可以近似達成目標(biāo)了。下圖所示,一個方波,取前多少個正弦波分量疊加以后變成的不同的方波??梢钥吹?,取的分量數(shù)(n)越多越接近原始方波,其他現(xiàn)實波形的道理是一樣的。
關(guān)于LOTO示波器使用FFT功能的視頻演示如下:
https://www.bilibili.com/video/BV11k4y1z7KA
問題3:FFT頻譜分析有什么用?
典型的應(yīng)用場景有很多。
比如說,當(dāng)你的信號上被噪聲干擾了,你想去掉這個噪聲。在時域波形上看,只能看出是一個密集的上躥下跳的噪聲,完全看不出其他有助于解決掉噪聲的信息。這時候用FFT分析,可以得知噪聲分布的頻率范圍,可以針對一些主要的噪聲頻點進行有針對性的濾波處理。
再比如,音頻應(yīng)用中,通過人耳朵很難客觀和標(biāo)準(zhǔn)化分辨出來一些音頻處理單元的頻率范圍。使用FFT對音頻處理單元的信號進行掃頻和分析,可以定量的得出音頻響應(yīng)的頻譜范圍,從而快速確定音頻單元是否合格。
關(guān)于FFT使用時候的誤差與頻譜泄漏:
工程中最容易出現(xiàn)的FFT誤差,是由于參與FFT計算的采樣點數(shù)相對于這些采樣點數(shù)覆蓋的信號信息量太少了。舉個簡化的例子:
上圖中的假如一個正弦波(上方)被采集到,如果在做FFT分析的時候由于參與FFT點數(shù)的設(shè)置,可能只取了黃色區(qū)域的局部波形數(shù)據(jù)進行FFT計算。那么在FFT算法看來,它會認(rèn)為FFT針對的信號是黃色部分的周期性延宕,如圖中下方的波形所示。
顯而易見,這樣進行FFT計算得出的結(jié)果肯定是錯誤的。而且可以推理,使用的FFT點數(shù)越少,錯誤越嚴(yán)重。
我們實測一下來看:
還有一種情況是,上面提到的FFT取點數(shù)的時候,點數(shù)足夠大,但是并沒有取到剛好整周期上,稍微偏差一點,這樣進行FFT分析并不會產(chǎn)生錯誤,但是會有些誤差,這些誤差正是由于這些小偏差引起的,這是難以避免的,專業(yè)術(shù)語叫做頻譜泄漏,如下圖所示。
在頻譜泄漏在頻譜上的表現(xiàn)為在正確的主頻譜旁邊出現(xiàn)不該出現(xiàn)的短小的頻譜。
我們用USB虛擬示波器實測一下頻譜泄漏:
上圖是實測的1K頻率的正弦波的時域波形和FFT幅頻曲線。理論上,F(xiàn)FT曲線應(yīng)該是在1K頻率分量上的一根豎線,如A點所示,但是實際FFT結(jié)果并不是理想的在A處的一根豎直線,而會在臨近的B點和C點還有一定的頻譜值。B和C點不陡降到0是頻率泄漏導(dǎo)致的。
解決頻譜泄漏的最常見的方法是加窗函數(shù):
我們一般默認(rèn)用的是矩形窗,不同的窗函數(shù)能不同程度的改善譜線的圓潤程度。以上面的頻譜泄漏圖為例,由于突然截斷造成周期延拓時兩個周期相鄰處出現(xiàn)了信號突變,這種突變,代表的是信號包含了高次諧波。加上合適的窗函數(shù),可以把這個突變變得圓滑一些,從而抑制高次諧波。
但是,我們也可以這樣想,頻譜泄漏圖中的下方信號就是真實信號,那么,加上這樣的窗函數(shù)反而得到了錯誤的結(jié)果。
上圖為不同窗函數(shù)的圓潤效果,坦白講,一般是不太用窗函數(shù)的,除非非常了解自己的應(yīng)用情況,使用窗函數(shù)的時候計算負(fù)擔(dān)比較重也是我不太常用它們的原因之一。
評論
查看更多