第一步:如何正確取樣訊號?
在進行任何頻譜分析之前,必須先從連續的真實世界訊號中,擷取出一連串的離散數位訊號點。這個過程稱為「取樣」。如果第一步就做錯了,後面的 FFT 分析將會是徒勞無功。
黃金法則:奈奎斯特-香農取樣定理
為了要能忠實地捕捉一個訊號,取樣頻率 (Fs),必須至少是訊號中感興趣的最高頻率 (f_max) 的兩倍。
如果違反了這個定理(取樣取得太慢),就會發生「混疊 (Aliasing)」,高頻的訊號會偽裝成低頻的訊號,造成頻譜失真,就像用慢速快門相機拍高速旋轉的輪胎,看起來像在倒轉一樣。
💡 實務上的建議
理論上兩倍就夠了,但在工程實務中,通常會保留一個安全邊際,選擇 Fs 為 f_max 的 5 到 10 倍。這麼做的好處是:
- 可以放寬對硬體「抗混疊濾波器」的要求。
- 能更清楚地觀察訊號的波形。
- 避免頻譜邊緣的效應。
所以,規則是:可以遠高於兩倍,但絕不可少於兩倍!
第二步:FFT 核心參數設定
當根據訊號特性決定了取樣頻率 (Fs) 後,接下來就可以設定 FFT 分析的參數。Fs 和決定的 FFT 點數 (N) 將共同決定頻譜的「解析度」與「範圍」。
頻率解析度 (Δf)
0.1 Hz
💡 核心觀念:Ts, T, 與 Δf 的關係
取樣頻率 Fs
,總取樣點數 N
,與總觀測時間 T
的關係如下,它們共同決定了最終的頻率解析度 Δf
。
- Ts (取樣週期):採集單一一個點所需的時間。公式為
Ts = 1 / Fs
。 - N (總取樣點數):總共採集了多少個數據點。
- T (總觀測時間):整個取樣過程的總長度。公式為
T = N * Ts = N / Fs
。
因此,頻率解析度 Δf = 1 / T
是由整個訊號的總長度 T 決定的,而不是由單次取樣的間隔 Ts
決定的。
3. 輸入訊號的影響:實數 vs. 複數
在通訊等領域,訊號常以複數形式(IQ 訊號)存在,它能完整表達振幅與相位。但更常見的情況是,從感測器得到的訊號是純實數(虛部為零)。當輸入訊號只有實部時,其輸出頻譜必然會是對稱的。
💡 實數訊號的對稱性:為何只看一半?
簡單來說,傅立葉轉換是將訊號分解成一系列的旋轉向量。要合成一個純實數訊號,必須有成對的、頻率相同但旋轉方向相反(一個 +f,一個 -f)的向量,它們的虛部才能互相抵消。這種成對的關係,導致了頻譜的「共軛對稱」。
在 FFT 的標準輸出中,負頻率的部分會被摺疊到頻譜的後半段。因此,後半段的資訊只是前半段的鏡像,是多餘的。
舉例來說:若取樣率 Fs = 100 Hz
,FFT 點數 N = 1000
,則頻率解析度為 0.1 Hz
。FFT 會輸出 1000 個點,對應 0 Hz
到 99.9 Hz
的頻譜。
- 真正有用的資訊只在 0 Hz ~ 50 Hz (Fs/2) 的範圍內。
50.1 Hz
的值會等於49.9 Hz
的值,99.9 Hz
的值會等於0.1 Hz
的值,依此類推,形成鏡像。
這就是為什麼處理實數訊號時,我們只分析到奈奎斯特頻率 (Fs/2) 的原因。
4. FFT 點數與補零 (Zero Padding)
如果訊號長度不是 2 的次方怎麼辦?或者,想讓頻譜圖看起來更平滑,該怎麼做?這時「補零」就派上用場了。它指的是在原始訊號的尾端補上一連串的 0。觀察補零前後,頻譜圖發生了什麼變化。
💡 原始訊號 (Original Signal):
假設原始訊號長度較短,FFT 在頻率軸上的取樣點較少,因此頻譜圖看起來比較粗糙,可能無法精確顯示峰值的位置。
深度剖析:補零與內插的關係
補零在時域上的簡單操作,其背後隱含著深刻的頻域意義。它與「內插」有著密不可分的關係。
1. 補零 (Zero Padding)
- 做法:在時域訊號的尾端補上 0。
- 效果:改變 FFT 長度
N
,讓頻域取樣點變多。因為頻率間隔Δf = Fs / N
,N
變大,頻率軸就變得更細密。 - 本質:頻域上產生的是一種「內插後的頻譜曲線」。這些額外的頻率點,其數值完全由數學公式決定,不包含新的訊號訊息。
2. 內插 (Interpolation)
- 做法:在已知離散頻譜點之間,用數學方法(例如 sinc 內插、多項式內插)估算新的點。
- 效果:產生一條更光滑的頻譜曲線。
- 本質:其結果與補零等價,只是實現的路徑不同。
3. 兩者關係:一個等式的兩面
可以這樣理解:在時域補零,就等同於在頻域進行一種 sinc 內插。
所以,補零雖然看起來只是「增加點數」,其本質其實就是一種「自動完成的頻域內插」。
4. 核心區別
- 補零:是一種計算上的技巧,透過延長訊號長度讓 FFT 自然產生更細密的頻率軸。
- 內插:是一種數學上的估算方法,直接在已有的頻譜上進行插值。
5. 實務議題與處理順序
理論之外,實際應用 FFT 時會遇到幾個常見的陷阱與固定的處理順序。了解這些議題能幫助正確解讀頻譜,避免得到錯誤的結論。
鐵則:先 Windowing,再 Zero Padding
這是 FFT 預處理中最重要的順序問題。
1. Windowing 的目的
原始訊號是有限長度的截取樣本,等效於被一個「矩形窗」截斷,這會造成嚴重的頻譜洩漏。因此要先乘上合適的窗函數(如 Hamming, Hanning)來減少洩漏。這個步驟必須在「原始訊號區間」完成。
2. Zero Padding 的目的
補零只是延長訊號長度以增加 FFT 點數,作用僅是讓頻譜顯示得更平滑。它必須在 Windowing 之後進行,避免把「0」也乘上窗函數,進而破壞窗的形狀與能量分布。
✅ 正確順序總結
對原始訊號加窗 (Windowing) → 減少頻譜洩漏
補零 (Zero Padding) → 增加頻譜顯示平滑度
取樣定理 (Nyquist)
這是第一步的基礎,取樣率 (Fs) 必須至少為最高訊號頻率的 2 倍。否則發生「混疊 (Aliasing)」,頻譜失真。
能量歸一化
FFT 的輸出幅度與 N 有關。要得到有物理意義的振幅或功率,需要進行歸一化處理(例如,除以 N 或 N/2),並考慮窗函數的影響。
6. 實務訊號處理流程 (IQ訊號範例)
以下提供一個從「IQ 取樣」開始的實務訊號處理流程。本節將專注在「路線 A:頻譜/量測」上,並對其中幾個關鍵步驟進行深入說明。
路線 A|頻譜/量測 (Spectrum/Measurement)
關鍵步驟詳解:
1. 去直流/去趨勢 (DC offset & Detrend)
目的:訊號中固定的直流偏移(平均值不為零)會在頻譜的 0 Hz 處產生一個巨大的尖峰,這個尖峰會透過頻譜洩漏污染整個頻譜,掩蓋低頻區域的真實訊號。必須移除它。
做法:最簡單的方式是將整個訊號序列減去其平均值:y[n] = x[n] - mean(x)
。
2. 頻率校正 (Frequency Correction)
目的:FFT 的原始輸出範圍是從 0
到 Fs
,這在數學上正確但物理上不直觀。我們通常更關心以 0 Hz 為中心的頻譜(從 -Fs/2
到 +Fs/2
),這樣才能清楚地看到正負頻率成分。
做法:執行 fftshift
操作。這個操作會將頻譜的後半段(Fs/2
到 Fs
)搬移到前半段的前面,完成座標的轉換。
3. 功率譜估計 (Power Spectral Density - PSD)
目的:FFT 的原始幅度 |X[k]|
會隨 FFT 點數 N
變化,不適合直接比較。PSD 則是表示單位頻寬內的訊號功率,經過正規化後,其結果與 N
無關,是更具物理意義的量測標準。
做法:計算公式為 PSD[k] = |X[k]|^2 / (N * U)
。其中 |X[k]|^2
是 FFT 幅度的平方,N
是 FFT 點數,而 U
是所選窗函數的能量正規化因子,用來補償加窗時損失的能量。