這個單元的主題:FFT系列:如何確認FFT頻譜分析程式的正確性?其中,FFT是fast Fourier transform,「快速傅立業轉換」是進行「頻譜分析」(spectral
analysis)的數學方法,讀者可參閱#27:【甚麼是頻譜分析?】。
首先,參閱圖1,對”FFT”作”4W”的思考:
1. “What” is?:甚麼是FFT?FFT是「快速傅立業轉換」(fast
Fourier transform)。
2. “Why” to do?:為什麼要進行FFT「頻譜分析」?
3. “What” to get?:FFT「頻譜分析」可以得到甚麼?
4. “How” to do?:如何檢查FFT「頻譜分析」程式?
要撰寫發展一個「FFT頻譜分析」程式,參閱圖1,可以採用”ISOC”「系統方塊圖」的理念,說明如下:
1. Input 輸入:𝒙(𝒕) 是一個信號的時間波形(time waveform)。
2. System 系統:就是所要發展的FFT「快速傅立業轉換」的「頻譜分析」程式。
3. Output 輸出:𝑿(𝒇) 是 𝒙(𝒕) 的「傅立業頻譜」(Fourier spectrum)。
4. Control variables控制變數:由先前單元#179:【FFT系列:FFT參數 Fmax 及 LOR 對量測信號之影響?】,常用的「FFT分析參數」之設定有兩個:「有效頻率」(effective frequency),fnyq = Fmax,以及「頻率解析條數」(lines of resolution),Nf = LOR。在此,令Fmax = fnyq= 500 Hz,LOR = Nf = 500 lines。
所以,FFT「快速傅立業轉換」的「頻譜分析」程式,就是要將時間域的信號 𝒙(𝒕),進行FFT,取得 𝒙(𝒕) 的「傅立業頻譜」,𝑿(𝒇) 就是頻率域的信號。
在此,可再對「傅立業頻譜」”𝑿(𝒇)”作”4W”的思考:
1. “What” is ”𝑿(𝒇)”?:𝑿(𝒇) 是 𝒙(𝒕) 的「傅立業頻譜」(Fourier spectrum)。
2. “Why” to get ”𝑿(𝒇)”?:為什麼要取得 𝑿(𝒇),就是要瞭解 𝒙(𝒕) 信號的頻譜特徵(spectrum pattern)。
3. “What” to observe ”𝑿(𝒇)”?:需要瞭解 𝑿(𝒇) 是複數(complex number)。所以需要觀察 𝑿(𝒇) 的振幅值、相位角、實數部、及其虛數部。
4. “How” to check ”𝑿(𝒇)”?:如何檢查”𝑿(𝒇)”的正確性呢?在此,建議分別對「餘弦波」(cosine wave)及「正弦波」(sine wave),進行檢查與確認。
接著,參閱圖2,已經知道「FFT頻譜分析」:是要將時間域的信號 𝒙(𝒕),進行FFT,取得 𝒙(𝒕) 的「傅立業頻譜」𝑿(𝒇),就是頻率域的信號。
圖2的左側是「餘弦波」的「時間域」方程式:𝒙(𝒕)=𝑿𝐜𝐨𝐬(𝟐𝝅𝒇𝟎 𝒕),其中,𝑿
是振幅(amplitude),𝒇𝟎是頻率(frequency)。當𝑿
= 1,𝒇𝟎=10 Hz時,對應的「時間波形」(time waveform)如圖示,符合「餘弦波」的特徵。
對此「餘弦波」時間域信號 𝒙(𝒕) 進行「FFT頻譜分析」,可以得到「傅立業頻譜」𝑿(𝒇),理論分析是:𝑿(𝒇)=𝑿𝛅(𝒇−𝒇𝟎),其中,𝛅(𝒇−𝒇𝟎)是Delta函數,意義是在 𝒇=𝒇𝟎 時,其大小為 𝑿,其他頻率皆為零。在此需注意,「餘弦波」的「傅立業頻譜」𝑿(𝒇)是純實數。
以所撰寫的「FFT頻譜分析」程式,進行分析,得到了「傅立業頻譜」𝑿(𝒇)。由於 𝑿(𝒇) 是複數,參閱圖2左側,可以分別繪製得到,以「振幅值」(amplitude)、「相位角」(phase angle)、「實數部」(real)、及「虛數部」(imaginary)為y軸,而「頻率」(frequency)為x軸的圖示。
同樣的做法,圖2的右側是「正弦波」的「時間域」方程式:𝒙(𝒕)=𝑿𝐬in(𝟐𝝅𝒇𝟎 𝒕),其中,是 𝑿
振幅值(amplitude),𝒇𝟎是頻率(frequency)。當𝑿
= 1,𝒇𝟎=10 Hz時,對應的「時間波形」(time waveform)如圖示,符合「正弦波」的特徵。
對此「正弦波」時間域信號 𝒙(𝒕) 進行「FFT頻譜分析」,可以得到「傅立業頻譜」𝑿(𝒇),理論分析是:𝑿(𝒇)= −j𝑿𝛅(𝒇−𝒇𝟎),其中,𝛅(𝒇−𝒇𝟎)是Delta函數,意義是在 𝒇=𝒇𝟎 時,其大小為 −j𝑿,其他頻率皆為零。在此需注意,「正弦波」的「傅立業頻譜」𝑿(𝒇)是純虛數。參閱圖2右側,是對應「正弦波」的「傅立業頻譜」𝑿(𝒇)的4個圖示。
針對「餘弦波」及「正弦波」的「傅立業頻譜」𝑿(𝒇),綜合比較討論如下:
1. 理論分析的「傅立業頻譜」𝑿(𝒇):「餘弦波」的 𝑿(𝒇) 是純實數。「正弦波」的 𝑿(𝒇) 是純虛數。只有在
𝑿(𝒇𝟎)=10 Hz時,有值,其他頻率
𝑿(𝒇)=0。
2. 𝑿(𝒇) 的「振幅值」(amplitude)特徵:「餘弦波」及「正弦波」都相同,在 𝒇𝟎=10 Hz時,都是 1,單是從「振幅值」是無法區別「餘弦波」及「正弦波」的差異。
3. 𝑿(𝒇) 的「相位角」(phase angle) 特徵:要探討「相位角」,請參閱圖2中央,有關「相位角」的定義。「餘弦波」的「相位角」在 𝒇𝟎=10 Hz時,是0°,因為是純實數。「正弦波」的「相位角」在 𝒇𝟎=10 Hz時,是 −90°,因為是純虛數、而且是負虛數。
4. 𝑿(𝒇) 的「實數部」(real) 特徵:「餘弦波」的「實數部」,在 𝒇𝟎=10 Hz時,是 𝑿 = 1,因為是純實數。「正弦波」的「實數部」在 𝒇𝟎=10 Hz時,是0,因為是純虛數。
5. 𝑿(𝒇) 的「虛數部」(imaginary) 特徵:「餘弦波」的「虛數部」,在 𝒇𝟎=10 Hz時,是0,因為是純實數。「正弦波」的「虛數部」在 𝒇𝟎=10 Hz時,是 𝑿 = −1,因為是純虛數、而且是負虛數。
由以上討論,可以應用「餘弦波」及「正弦波」的「傅立業頻譜」𝑿(𝒇)特徵,來檢查所撰寫的「FFT頻譜分析」程式之正確性。
所以,如果以相同的「FFT頻譜分析」程式,分別對「餘弦波」及「正弦波」進行「FFT頻譜分析」,如果能夠得到如圖2的各個圖示結果,那麼這個「FFT頻譜分析」程式就是正確了!
最後,回顧一下這個單元,主要是探討如何確認「FFT頻譜分析」程式的正確性,陳述的重點摘錄如下:
1. 對”FFT”作”4W”的思考:瞭解FFT的意義與內涵。
2. ”ISOC”「系統方塊圖」的理念:在撰寫程式時,可以採用”ISOC”的理念,做對應的思考規劃及發展。
3. 對”𝑿(𝒇)”作”4W”的思考:因為,FFT的「頻譜分析」,是要將時間域的信號 𝒙(𝒕),進行FFT,取得 𝒙(𝒕) 的「傅立業頻譜」,𝑿(𝒇) 就是頻率域的信號。所以,要瞭解”𝑿(𝒇)”的意義與內涵。
4. 如何檢查「FFT頻譜分析」程式的正確性:分別應用「餘弦波」及「正弦波」的「傅立業頻譜」𝑿(𝒇)特徵,來檢查所撰寫的「FFT頻譜分析」程式之正確性。
以上個人看法,請多指教!
王栢村
2020.08.26
0 意見:
張貼留言