數位訊號處理教學平台
DSP Teaching Lab — Graduate Level
涵蓋 Hilbert 空間、分佈理論、Z 轉換、MUSIC/ESPRIT、小波分析、Wigner-Ville 分佈
通訊 · 雷達 · 影像 · 生醫 四大工程應用領域
學習路線圖 (Learning Path)
不知道從哪開始?依照你的目標選擇路徑:
🎯 核心必修路徑(建議所有人完成)
📡 通訊工程路徑
核心 → 2B.4 Z轉換 → 5A 升降取樣 → 4A FIR → 4B IIR → 9C OFDM
🔬 生醫訊號路徑
核心 → 5A 升降取樣 → 3.2 Welch → 4.1 Hilbert → 5.4 CWT → 6.9 EEG/ECG
⚙️ 振動/機械路徑
核心 → 5A 升降取樣 → 3.2 Welch → 4.1 Hilbert → 4.2 包絡 → 6.10 振動分析
📡 雷達/陣列路徑
核心 → 5B Polyphase → 3.4 MUSIC → 6.7 雷達 → 6.8 陣列
嚴格數學
L² 空間 · 分佈理論 · 完整推導
進階理論
MUSIC · 小波 · Wigner-Ville · EMD
四大應用
通訊 OFDM · 雷達 · 影像 · 生醫
📊 真實資料集 (Real-World Datasets)
不要只用合成 sin 波練習。下面列出公開資料集,可以下載真實訊號做完整的 DSP 流程練習。
🫀 生醫訊號
- PhysioNet (physionet.org): ECG, EEG, EMG, PPG 等臨床資料
- MIT-BIH Arrhythmia DB: 經典 ECG 心律不整資料
- Sleep-EDF: EEG 睡眠分期
- 適合練習: m6-1 Hilbert (R 波偵測), m7-1 STFT (EEG 頻帶), m9-9 EEG/ECG
🔊 音訊
- ESC-50: 50 類環境聲音 (5 sec each)
- UrbanSound8K: 都市聲音分類
- LibriSpeech: 1000 小時語音語料
- 適合練習: m3b-1 視窗、m7-1 STFT、m4-* 濾波器設計
⚙ 機械振動
- Case Western Bearing Data: 經典軸承故障資料
- NASA IMS Bearing Dataset: 跑到失效的軸承資料
- MFPT Bearing Fault: 多種轉速條件
- 適合練習: m6-2 包絡譜、m9-10 振動分析、Phase 1 BPFO 計算
📡 通訊/雷達
- RadioML 2018: 各種調變方式的 IQ 樣本
- FMCW Radar Dataset: 自動駕駛雷達資料
- GNU Radio Tutorials: SDR 範例
- 適合練習: m9-6 OFDM, m9-7 雷達, 通訊接收器
💡 入門建議:從 PhysioNet 的 ECG 開始最容易——資料乾淨、有清楚的特徵(R 波)、可以練習從 m6-1 Hilbert 到 m9-9 整個流程。
1.1 Hilbert 空間 (Hilbert Space) 與 $L^2$ 理論
傅立葉分析的數學框架 — 為什麼正弦波能構成「基底」?
⚠ 數學先修建議
本模組(M1 數學基礎)需要以下背景知識:
- 線性代數:內積、正交、特徵值、向量空間
- 實分析基礎:極限、連續、Cauchy 序列、級數收斂
- 複數運算:尤拉公式、複指數、複共軛
- 基礎拓樸(1.1, 1.3):完備性、稠密、收斂模式
如果你不熟悉這些:可以跳過 M1,直接從 M2A.1 傅立葉級數 開始。M1 的內容是「為什麼可以做傅立葉分析」的嚴謹基礎,但即使不懂這些,你仍然可以正確使用所有工具。M1 適合想理解數學本質的進階學生。
為什麼要學這個? 因為「FFT 算出來的能量為什麼等於時域能量?」「為什麼正弦波可以當基底?」這些問題的答案都藏在 Hilbert 空間理論裡。它是整個傅立葉分析大廈的地基——你不需要每天想到它,但理解它會讓你對所有後續工具有更深的信心。
一句話總結:傅立葉分析之所以能 work,是因為正弦波在一個叫 $L^2$ 的空間裡構成了正交基底——就像 3D 空間的 $x, y, z$ 軸。
Learning Objectives
- 定義內積空間、範數、完備性,理解 Hilbert 空間的公理化結構
- 認識 $L^2[0,T]$ 作為傅立葉分析的自然函數空間
- 證明複指數 $\{e^{jn\omega_0 t}\}$ 構成 $L^2$ 中的正交歸一基底 (Orthonormal Basis)
- 從內積推導 Parseval 等式,建立「能量守恆」的嚴格基礎
痛點:FFT 背後你從未問過的問題
每個工程師都會用 FFT 分析頻譜。但你有沒有想過:
- 為什麼正弦波可以當「基底」? 誰規定頻率成分是正弦波而非其他波形?
- Parseval 定理說時域能量=頻域能量,這是哪來的? 是近似還是精確?
- FFT 是不是只是近似? 無限多個正弦波的疊加,截斷到有限項還「正確」嗎?
答案就藏在 Hilbert 空間的理論裡。一旦理解,你會知道 FFT 為什麼不只是一個演算法,而是一個深刻的數學定理的數值實現。
歷史脈絡:19 世紀末到 20 世紀初,David Hilbert (1862–1943) 研究積分方程式時,發現「無窮維向量空間」需要嚴格的數學基礎。Frigyes Riesz 和 Ernst Fischer 在 1907 年證明了 $L^2$ 空間的完備性(Riesz-Fischer 定理),為傅立葉級數的收斂性提供了最優美的解釋。John von Neumann 後來將 Hilbert 空間公理化,使之成為量子力學和訊號處理共同的語言。
原理:從 3D 向量到函數空間
直覺先行:在三維空間中,任何向量 $\vec{v}$ 都可以分解為 $x, y, z$ 方向的分量:
$$\vec{v} = v_x\hat{x} + v_y\hat{y} + v_z\hat{z}$$每個分量由投影(內積)得到:$v_x = \vec{v}\cdot\hat{x}$。傅立葉分析做的是完全一樣的事,只是把三維空間換成「函數空間」,把 $\hat{x}, \hat{y}, \hat{z}$ 換成 $e^{jn\omega_0 t}$。
| 概念 | 3D 向量空間 $\mathbb{R}^3$ | 函數空間 $L^2[0,T]$ |
|---|---|---|
| 元素 | 向量 $\vec{v}$ | 函數(訊號)$f(t)$ |
| 內積 | $\vec{u}\cdot\vec{v} = \sum u_i v_i$ | $\langle f,g\rangle = \frac{1}{T}\int_0^T f\bar{g}\,dt$ |
| 大小 | $|\vec{v}| = \sqrt{\vec{v}\cdot\vec{v}}$ | $\|f\| = \sqrt{\langle f,f\rangle}$(均方根值) |
| 正交基底 | $\hat{x}, \hat{y}, \hat{z}$ | $e^{jn\omega_0 t}$, $n \in \mathbb{Z}$ |
| 投影(坐標) | $v_x = \vec{v}\cdot\hat{x}$ | $c_n = \langle f, e^{jn\omega_0 t}\rangle$(傅立葉係數) |
| 能量守恆 | $|\vec{v}|^2 = v_x^2 + v_y^2 + v_z^2$ | $\|f\|^2 = \sum|c_n|^2$(Parseval) |
嚴格定義
設 $V$ 為複數向量空間。內積 (Inner Product) $\langle \cdot,\cdot\rangle : V \times V \to \mathbb{C}$ 滿足:
由內積誘導的範數 (Norm):$\|f\| = \sqrt{\langle f,f\rangle}$。
若內積空間在此範數下完備 (Complete)(每個 Cauchy 序列都收斂到空間內的元素),則稱為 Hilbert 空間。
$L^2[0,T]$:平方可積函數空間
傅立葉分析的自然棲息地是 $L^2$ 空間:
內積定義為:$\displaystyle\langle f, g \rangle = \frac{1}{T}\int_0^T f(t)\,\overline{g(t)}\,dt$
$L^2$ 的物理意義:有限能量的訊號。$\|f\|^2 = \langle f,f\rangle = \frac{1}{T}\int_0^T |f(t)|^2\,dt$ 就是平均功率。
直覺:$L^2$ 就像一個無限維的「向量空間」。每個訊號是這個空間中的一個「向量」,內積衡量兩個訊號的「相似度」,範數衡量訊號的「大小」(能量)。傅立葉分析就是在這個空間中做正交投影。
正交歸一基底:$\{e^{jn\omega_0 t}\}_{n\in\mathbb{Z}}$
令 $\phi_n(t) = e^{jn\omega_0 t}$,$\omega_0 = 2\pi/T$。關鍵定理:這組函數構成 $L^2[0,T]$ 的正交歸一基底。
展開正交性證明
計算 $\langle \phi_n, \phi_m \rangle$:
$$\langle \phi_n, \phi_m \rangle = \frac{1}{T}\int_0^T e^{jn\omega_0 t}\,\overline{e^{jm\omega_0 t}}\,dt = \frac{1}{T}\int_0^T e^{j(n-m)\omega_0 t}\,dt$$情況一:$n = m$
$$\frac{1}{T}\int_0^T 1\,dt = 1$$情況二:$n \neq m$
$$\frac{1}{T}\left[\frac{e^{j(n-m)\omega_0 t}}{j(n-m)\omega_0}\right]_0^T = \frac{1}{T}\cdot\frac{e^{j(n-m)2\pi} - 1}{j(n-m)\omega_0} = \frac{1-1}{j(n-m)\omega_0} = 0$$因為 $e^{j(n-m)2\pi} = 1$(整數圈)。
結論:$\langle \phi_n, \phi_m \rangle = \delta_{nm}$(Kronecker delta),正交歸一。$\;\blacksquare$
因此,任何 $f \in L^2[0,T]$ 可以展開為:
$c_n$ 就是 $f$ 在基底 $\phi_n$ 上的正交投影係數——完全類比有限維向量的坐標。
Parseval 等式與 Bessel 不等式
Parseval 等式 (Parseval's Identity)
$$\|f\|^2 = \frac{1}{T}\int_0^T |f(t)|^2\,dt = \sum_{n=-\infty}^{\infty} |c_n|^2$$展開 Parseval 等式推導
將 $\|f\|^2 = \langle f, f \rangle$ 展開:
$$\langle f, f \rangle = \left\langle \sum_n c_n \phi_n,\; \sum_m c_m \phi_m \right\rangle = \sum_n \sum_m c_n \overline{c_m} \langle \phi_n, \phi_m \rangle$$利用正交性 $\langle \phi_n, \phi_m \rangle = \delta_{nm}$:
$$= \sum_n \sum_m c_n \overline{c_m}\,\delta_{nm} = \sum_n c_n \overline{c_n} = \sum_n |c_n|^2 \quad\blacksquare$$物理意義:時域計算的總能量(功率) = 頻域各成分能量之和。能量在正交分解中守恆。
Bessel 不等式:若只取有限項 $N$ 項,則 $\sum_{|n|\leq N} |c_n|^2 \leq \|f\|^2$。等號在 $N\to\infty$ 時成立(前提:$\{\phi_n\}$ 構成完備基底)。
怎麼用:工程師的實務觀點
你不需要每天想到 Hilbert 空間,但它解釋了以下工程事實:
| 工程問題 | Hilbert 空間的解釋 |
|---|---|
| FFT 輸出的能量 = 時域能量? | Parseval 等式:正交分解保能量 |
| 為什麼 FFT 用正弦波而非方波? | $\{e^{jn\omega_0 t}\}$ 是 $L^2$ 中的正交歸一基底 |
| 截斷到 $N$ 項是「最佳近似」嗎? | 正交投影定理:部分和是 $L^2$ 最佳逼近 |
| 最小均方誤差濾波器為什麼用投影? | Hilbert 空間上的正交投影 = MSE 最小化 |
互動:正交性驗證
計算 $\langle e^{jm\omega_0 t}, e^{jn\omega_0 t}\rangle$ 的實部。當 $m \neq n$ 時積分為零(正交);$m = n$ 時為 1。
陷阱:$L^2$ 中的「相等」不是逐點相等
在 $L^2$ 中,兩個函數 $f$ 和 $g$ 「相等」的意思是 $\|f - g\| = 0$,即 $\int|f-g|^2\,dt = 0$。這允許它們在零測集(measure-zero set)上不同。例如,$f(t) = 0$ 和 $g(t) = \begin{cases}1 & t=0 \\ 0 & \text{else}\end{cases}$ 在 $L^2$ 中是「同一個函數」。這就是為什麼傅立葉級數可以在不連續點「不收斂到正確值」,但在 $L^2$ 意義下仍然完美收斂。
References: [1] Kreyszig, Introductory Functional Analysis with Applications, Ch.3. [2] Rudin, Real and Complex Analysis, Ch.4. [3] Oppenheim & Willsky, Signals and Systems, Ch.3.
✅ 快速檢核 (Quick Check)
Q1: 為什麼 FFT 算出來的頻譜能量等於時域能量?用一句話解釋。
顯示答案
因為 {e^{jnω₀t}} 是 L² 的正交歸一基底,Parseval 等式保證了在正交分解下能量守恆。
Q2: 如果兩個訊號的 FFT 頻譜完全相同,時域波形一定一樣嗎?
顯示答案
在 L² 意義下是的(幾乎處處相等)。但可能在有限個點不同(零測集上的差異在 L² 中被忽略)。
1.2 廣義函數與分佈理論 (Distribution Theory)
為什麼 $\sin(\omega_0 t)$ 的傅立葉轉換「存在」?
為什麼要學這個? 因為教科書說 cos 的 FT 是兩個 delta,但 delta 不是函數——它到底是什麼?分佈理論讓物理學家和工程師的「直覺操作」有了嚴格基礎,也是理解取樣、脈衝響應等概念的數學根基。
前情提要:在 1.1 我們建立了 Hilbert 空間的框架——正弦波是正交基底、Parseval 保證能量守恆。但有些訊號(如 sin(ωt))的能量是無限大,不在 L² 裡。怎麼辦?
一句話總結:$\sin(\omega t)$ 的能量是無限大,經典傅立葉轉換 (Fourier Transform) 算不出來。分佈理論 (Distribution Theory) 用 $\delta$ 函數解決了這個問題。
Learning Objectives
- 理解經典 FT 對 $\sin$、常數等訊號失效的原因
- 認識 Dirac delta 作為泛函 (Functional) 而非函數的本質
- 嚴格推導 $\mathcal{F}\{\delta\}=1$、$\mathcal{F}\{1\}=2\pi\delta(\omega)$、$\mathcal{F}\{\cos\omega_0 t\}$
- 在工程中安心使用 $\delta(t)$ 的各種性質
痛點:教科書裡的「神秘 delta」
每本訊號處理教科書都寫:
但等一下——$\delta$ 函數在 $t=0$ 的值是「無限大」,其他地方是零?根本沒有經典函數長這樣。那教科書為什麼理直氣壯地寫出來?工程師可以放心使用嗎?會不會某天在某個計算中出錯?
分佈理論的答案是:可以放心用,因為 $\delta$ 不是函數——它是泛函。一旦你理解了這個區別,所有的「神秘操作」都有了嚴格基礎。
歷史脈絡:物理學家 Paul Dirac 在 1930 年代的量子力學研究中大量使用 $\delta$ 函數,用它來表示粒子位於特定位置的狀態。數學家對此感到不安——Dirac 的操作在經典分析中是不合法的。1944-1950 年,法國數學家 Laurent Schwartz 發展了分佈理論 (Theory of Distributions),將 Dirac 的直覺操作建立在嚴格的泛函分析基礎上。Schwartz 因此於 1950 年獲得 Fields 獎。他自己說:「我所做的不過是把物理學家已經知道的事情翻譯成數學語言。」
原理:從經典 FT 的侷限到分佈
Step 1:經典 FT 在哪裡失效?
CTFT 要求 $\int_{-\infty}^{\infty}|x(t)|\,dt < \infty$(絕對可積)或至少 $\int|x|^2\,dt < \infty$($L^2$)。但工程中最基本的訊號違反此條件:
| 訊號 | $\int|x(t)|\,dt$ | $\int|x(t)|^2\,dt$ | 經典 FT? |
|---|---|---|---|
| $x(t) = A$(直流) | $\infty$ | $\infty$ | 不存在 |
| $x(t) = \cos(\omega_0 t)$ | $\infty$ | $\infty$ | 不存在 |
| $x(t) = u(t)$(單位步階) | $\infty$ | $\infty$ | 不存在 |
| $x(t) = e^{j\omega_0 t}$ | $\infty$ | $\infty$ | 不存在 |
這些訊號的共同特徵:無限持續、無限能量。但它們是工程中最常見的訊號!
Step 2:關鍵想法——delta 是泛函,不是函數
直覺:想像一個「探針」$\varphi(t)$——它非常光滑,而且在遠處快速衰減到零。我們不直接問 $\delta(t)$ 在某個點的值是多少(這個問題沒有意義),而是問:「$\delta$ 對這個探針的反應是什麼?」
Dirac delta 的嚴格定義
$$\delta[\varphi] = \varphi(0), \quad \forall\, \varphi \in \mathcal{S}$$「$\delta$ 是一個機器:你餵入任何測試函數 $\varphi$,它吐出 $\varphi$ 在零點的值。」
$\delta$ 不是「函數」——沒有任何經典函數 $f(t)$ 同時滿足 $\int f(t)\varphi(t)\,dt = \varphi(0)$ 且 $f(t) = 0$ for $t \neq 0$。它是一個純粹的泛函 (Functional)——一個「吃函數、吐數字」的映射。
直覺類比:把分佈想像成「廣義的函數」。普通函數 $f(t)$ 也可以看成泛函:$f[\varphi] = \int f(t)\varphi(t)\,dt$。但分佈允許比普通函數更「奇異」的對象存在——$\delta$ 就是最著名的例子。
Step 3:Schwartz 空間(直覺即可)
上面的「探針」$\varphi$ 來自 Schwartz 空間 $\mathcal{S}$——無窮次可微且快速遞減的函數。你不需要記住精確定義,只需知道:
- $\mathcal{S}$ 中的函數非常「乖」:光滑、快速衰減、怎麼微分都不會變壞
- Gaussian $e^{-t^2}$ 是 $\mathcal{S}$ 中的典型成員
- Tempered Distribution(緩增分佈) $T \in \mathcal{S}'$:$\mathcal{S}$ 上的連續線性泛函
Delta 函數的基本性質
以下性質都可以從泛函定義嚴格推導,工程中直接使用即可:
分佈的傅立葉轉換:三步推導
對 $T \in \mathcal{S}'$,定義其 FT $\hat{T} \in \mathcal{S}'$ 為:
(把 FT 的工作「轉嫁」給光滑的測試函數——它們的 FT 永遠存在)
推導 $\mathcal{F}\{\delta(t)\} = 1$
設 $\hat{\varphi}(\omega) = \int_{-\infty}^{\infty}\varphi(t)\,e^{-j\omega t}\,dt$ 為 $\varphi$ 的經典 FT。
由定義:
$$\hat{\delta}[\varphi] = \delta[\hat{\varphi}] = \hat{\varphi}(0) = \int_{-\infty}^{\infty}\varphi(t)\,e^{0}\,dt = \int_{-\infty}^{\infty}\varphi(t)\,dt$$而常數函數 $1$ 作為 distribution 的作用:$1[\varphi] = \int 1 \cdot \varphi(t)\,dt$
兩者完全相同,因此 $\hat{\delta} = 1$。
物理意義:一個無限窄的脈衝包含所有頻率,且每個頻率的振幅相等。$\;\blacksquare$
推導 $\mathcal{F}\{1\} = 2\pi\delta(\omega)$
利用對偶性(Duality)。若 $\mathcal{F}\{f(t)\} = F(\omega)$,則 $\mathcal{F}\{F(t)\} = 2\pi f(-\omega)$。
已知 $\mathcal{F}\{\delta(t)\} = 1$,對偶性給出:
$$\mathcal{F}\{1\} = 2\pi\delta(-\omega) = 2\pi\delta(\omega)$$(最後一步用了 $\delta$ 的對稱性 $\delta(-\omega) = \delta(\omega)$。)
物理意義:一個永恆不變的直流訊號,只包含「零頻率」成分。$\;\blacksquare$
推導 $\mathcal{F}\{\cos(\omega_0 t)\}$——最終目標
Step 1:由 $\mathcal{F}\{1\} = 2\pi\delta(\omega)$ 加上頻移性質 $\mathcal{F}\{e^{j\omega_0 t}f(t)\} = F(\omega - \omega_0)$:
$$\mathcal{F}\{e^{j\omega_0 t}\} = 2\pi\delta(\omega - \omega_0)$$Step 2:利用 Euler 公式 $\cos(\omega_0 t) = \frac{1}{2}(e^{j\omega_0 t} + e^{-j\omega_0 t})$:
$$\mathcal{F}\{\cos(\omega_0 t)\} = \frac{1}{2}\cdot 2\pi\delta(\omega - \omega_0) + \frac{1}{2}\cdot 2\pi\delta(\omega + \omega_0)$$ $$\boxed{\mathcal{F}\{\cos(\omega_0 t)\} = \pi[\delta(\omega - \omega_0) + \delta(\omega + \omega_0)]}$$物理意義:純正弦波的頻譜是兩根「針」,精確位於 $\pm\omega_0$。這完美符合工程直覺——純音只有一個頻率。$\;\blacksquare$
怎麼用:工程師的實務指南
分佈理論保證了以下操作的合法性——你可以安心使用:
| 操作 | 數學 | 工程意義 |
|---|---|---|
| 取樣 = 乘以脈衝串 | $x_s(t) = x(t)\sum_n\delta(t-nT_s)$ | ADC 的數學模型 |
| 衝激響應定義 | $h(t) = T\{\delta(t)\}$ | LTI 系統完全由 $h(t)$ 決定 |
| 離散頻譜 | $\mathcal{F}\{\cos\omega_0 t\} = \pi[\delta(\omega\pm\omega_0)]$ | 頻譜分析器上的「譜線」 |
| 常數的 FT | $\mathcal{F}\{A\} = 2\pi A\,\delta(\omega)$ | 直流偏移 = 零頻分量 |
工程師速記:在頻域中看到 $\delta$,意味著該頻率有「無限窄但有限面積」的能量集中。$\delta(\omega - \omega_0)$ 的面積是 1(積分等於 1),代表一個純頻率成分。
應用場景
- 通訊系統:載波調變 $x(t)\cos(\omega_c t)$ 的頻譜分析。$\cos$ 的 FT 是兩個 delta,乘法對應頻域卷積——這就是頻移的數學基礎。5G NR 的 OFDM 子載波間距 15 kHz,每個子載波的頻譜就是一個 $\delta$。
- 控制系統:衝激響應 $h(t)$ 的定義依賴 $\delta(t)$。PID 控制器的調參從 $h(t)$ 出發。
- 數位訊號處理:取樣過程建模為 $x(t)\cdot\sum\delta(t-nT_s)$,直接推出取樣定理。CD 的 44.1 kHz 取樣率就是從這個模型推導出來的。
陷阱與限制
- 不要對 delta 做非線性運算:$\delta(t)^2$、$\sqrt{\delta(t)}$ 沒有意義。分佈只支持線性操作(加法、純量乘法、微分、卷積、FT)。
- 不要把 $\delta$ 的「值」當成數字:$\delta(0) = \infty$ 只是啟發式說法,嚴格來說 $\delta$ 在任何點都沒有「值」。
- $\delta$ 的乘積有時沒有定義:$\delta(t)\cdot\delta(t)$ 在分佈理論中是未定義的。只有「分佈 $\times$ 光滑函數」才有意義。
References: [1] Strichartz, A Guide to Distribution Theory and Fourier Transforms, CRC Press. [2] Folland, Real Analysis, Ch.8-9. [3] Schwartz, Theorie des Distributions, 1950.
✅ 快速檢核 (Quick Check)
Q1: 為什麼 sin(ωt) 不能用經典 FT?
顯示答案
因為 ∫|sin(ωt)|dt = ∞,不滿足絕對可積條件。需要分佈理論,結果是 π[δ(ω-ω₀)+δ(ω+ω₀)]。
Q2: δ(t) 是函數嗎?
顯示答案
不是。它是一個泛函(分佈),定義為 δ[φ]=φ(0)。沒有任何經典函數能做到這件事。
互動:δ 函數的極限直覺
δ(t) 不是函數,但可以視為「越來越窄、越來越高」的 Gaussian 的極限:$\delta_\sigma(t) = \frac{1}{\sigma\sqrt{2\pi}}e^{-t^2/(2\sigma^2)}$。觀察當 $\sigma \to 0$ 時:高度趨近無窮,但面積永遠等於 1。
1.3 收斂理論 (Convergence Theory)
傅立葉級數「收斂」到底是什麼意思?
為什麼要學這個? 因為傅立葉級數「收斂」有四種不同的意思,搞混了會在工程中犯錯。理解收斂速率 = 理解為什麼方波需要大頻寬、為什麼平滑脈衝省頻寬。Gibbs 現象直接解釋了 DAC ringing 和數位通訊的符號間干擾。
前情提要:1.2 用分佈理論解決了『無限能量訊號的 FT』問題。但另一個問題浮現:傅立葉級數的部分和真的會收斂到原函數嗎?在什麼意義下收斂?
一句話總結:傅立葉級數加越多項越接近原函數——但「接近」有四種不同的意思,工程上通常只需要關心能量意義的接近($L^2$ 收斂)。
Learning Objectives
- 區分逐點、均勻、$L^2$、幾乎處處四種收斂模式
- 陳述 Dirichlet 條件與 Carleson 定理
- 量化收斂速率與訊號平滑度的關係
- 嚴格分析 Gibbs 現象的 8.95% 過衝
痛點:方波的 Gibbs Ringing
你一定見過這個現象:用傅立葉級數重建方波時,不連續點附近會有明顯的振鈴 (ringing)。即使加到幾百項,過衝 (overshoot) 始終不消失——大約是方波振幅的 9%。
- DAC 輸出:數位轉類比轉換器重建方波訊號時,會出現真實的物理振鈴
- 影像處理:JPEG 在銳利邊緣附近的「蚊式雜訊 (mosquito noise)」就是頻域截斷造成的 Gibbs 效應
- 濾波器設計:理想低通濾波器的衝激響應 = sinc 函數(無限長),截斷後 passband 出現 ripple
為什麼振鈴不消失?這是哪種收斂的問題?答案藏在收斂理論的細節裡。
歷史脈絡:Gibbs 現象以 J. Willard Gibbs 命名(1899 年發現),但實際上英國數學家 Henry Wilbraham 早在 1848 年就描述過。Dirichlet (1829) 首先給出傅立葉級數逐點收斂的充分條件。最深刻的結果來自 Lennart Carleson (1966):他證明了 $L^2$ 函數的傅立葉級數「幾乎處處」收斂——這個結果難到讓 Carleson 因此獲得 2006 年 Abel 獎。
原理:四種「接近」的含義
直覺先行:想像你拍了一張照片(原函數),然後用越來越多的像素去近似它。「近似得好」可以有不同標準:
- 逐點:每個像素都對了
- 均勻:誤差最大的那個像素也趨向零
- $L^2$:總誤差能量趨向零(允許個別像素偏差)
- 幾乎處處:除了有限幾個壞像素外,每個都對了
令 $S_N(t) = \sum_{|n|\leq N} c_n e^{jn\omega_0 t}$ 為部分和。收斂到 $f(t)$ 的含義取決於收斂模式:
| 模式 | 定義 | 條件 | 工程意義 |
|---|---|---|---|
| 逐點 (Pointwise) | $\forall t$: $S_N(t) \to f(t)$ | Dirichlet 條件 | 每個時間點都收斂 |
| 均勻 (Uniform) | $\sup_t |S_N(t)-f(t)|\to 0$ | $f$ 連續 + 絕對收斂 | 最強;方波做不到(Gibbs) |
| $L^2$ (Mean-Square) | $\int|S_N-f|^2 dt \to 0$ | $f \in L^2$(總是成立) | 能量意義收斂;最常用 |
| 幾乎處處 (a.e.) | $S_N(t)\to f(t)$ except 零測集 | $f\in L^2$(Carleson 1966) | 除可忽略的點外都收斂 |
關鍵洞察:方波的傅立葉級數在 $L^2$ 意義下完美收斂(總能量誤差→0),但在不連續點附近不均勻收斂(Gibbs 過衝永遠存在)。這不是矛盾——是兩種不同的衡量標準。
收斂速率與平滑度
關鍵定理:訊號越平滑,傅立葉係數衰減越快。
| 訊號 | 連續性 | $c_n$ 衰減 | 10 項近似誤差 | 收斂速度 |
|---|---|---|---|---|
| 方波 | 不連續 | $O(1/n)$ | ~10% | 慢(Gibbs) |
| 三角波 | $C^0$(連續但不可微) | $O(1/n^2)$ | ~1% | 中等 |
| 拋物線波 | $C^1$ | $O(1/n^3)$ | ~0.1% | 快 |
| $C^\infty$ 函數 | 無窮次可微 | 超代數衰減 | $<10^{-10}$ | 極快 |
工程啟示:這解釋了為什麼:(1) 數位通訊中方波需要非常大的頻寬(諧波衰減慢),而平滑的 raised-cosine 脈衝整形只需要有限頻寬。(2) 在 DAC 輸出加平滑濾波器可以大幅減少所需頻寬。(3) Sigma-delta 調變器的雜訊整形利用了這個原理。
Gibbs 現象的嚴格分析
在方波不連續點附近,$S_N$ 的最大過衝趨向:
推導 Gibbs 過衝比例
方波 $f(t) = \text{sgn}(\sin t)$ 的部分和可以寫為:
$$S_N(t) = \frac{4}{\pi}\sum_{k=0}^{N-1}\frac{\sin((2k+1)t)}{2k+1}$$在 $t = \pi/(2N+1)$(第一個過衝點)附近,$S_N$ 取極大值。可以證明:
$$S_N\!\left(\frac{\pi}{2N+1}\right) = \frac{2}{\pi}\sum_{k=0}^{N-1}\frac{\sin\left(\frac{(2k+1)\pi}{2(2N+1)}\right)}{2k+1} \cdot \frac{2}{2N+1}\cdot(2N+1)$$當 $N\to\infty$,此 Riemann 和趨近於:
$$\frac{2}{\pi}\int_0^{\pi}\frac{\sin u}{u}\,du = \frac{2}{\pi}\cdot\text{Si}(\pi) \approx \frac{2}{\pi}(1.8519) \approx 1.1790$$而理想方波值為 1,故過衝 $\approx 17.90\%$ of half-amplitude = $8.95\%$ of full amplitude。
關鍵:這個 $8.95\%$ 與 $N$ 無關——加再多項都不會消失。增加 $N$ 只是讓過衝更靠近不連續點,但高度不變。$\;\blacksquare$
Gibbs 現象的實際影響:
- DAC 輸出:重建方波時有 ~9% 的物理過衝,可能觸發下游電路的閥值
- FIR 濾波器:截斷理想衝激響應 → passband ripple,這就是為什麼需要視窗函數(Hann、Kaiser 等)
- 解決方案:使用 Lanczos sigma 因子、Fejer 求和(Cesàro 平均)、或直接用視窗函數平滑截斷
怎麼用:收斂速率指導工程設計
訊號越平滑 → 係數衰減越快 → 需要的頻寬越少。這個原理的實際應用:
| 場景 | 應用 | 具體參數 |
|---|---|---|
| 脈衝整形 | Raised-cosine 滾降因子 $\alpha$ 控制平滑度 | $\alpha=0.25$:頻寬 = $1.25/T_s$ |
| DAC 重建 | 高階內插 (interpolation) 減少混疊能量 | 線性內插:$-12$ dB/oct;三次:$-24$ dB/oct |
| FIR 設計 | 視窗函數等效於平滑截斷 | Kaiser $\beta=6$:旁瓣 $-46$ dB |
互動:收斂速率比較
比較方波 ($1/n$)、三角波 ($1/n^2$)、拋物線波 ($1/n^3$) 的傅立葉級數收斂速度。拖動滑桿觀察 Gibbs 現象。
陷阱與常見誤解
- 「加更多項就能消除 Gibbs ringing」 — 錯。過衝百分比是固定的 8.95%,不隨 $N$ 改變。
- 「$L^2$ 收斂就夠了」 — 通常夠,但如果你關心訊號的峰值(如功率放大器的 headroom 設計),$L^2$ 收斂不保證峰值控制。
- 「Carleson 定理說幾乎處處收斂」 — 但在不連續點,級數收斂到左右極限的平均值 $\frac{f(t^+)+f(t^-)}{2}$,不是任何一邊的值。
References: [1] Carleson, On convergence and growth of partial sums of Fourier series, Acta Math., 1966. [2] Korner, Fourier Analysis, Cambridge. [3] Gibbs, Fourier's Series, Nature, 1899.
✅ 快速檢核 (Quick Check)
Q1: 為什麼三角波的傅立葉級數比方波收斂快?
顯示答案
三角波是連續的(C⁰),係數以 1/n² 衰減;方波不連續,係數只以 1/n 衰減。越平滑 → 收斂越快。
Q2: Gibbs 過衝在 N→∞ 時會消失嗎?
顯示答案
過衝的『寬度』會趨近零,但『高度百分比』永遠是 ~9%,不會消失。
1.4 不確定性原理 (Uncertainty Principle)
Heisenberg-Gabor 不等式的完整證明與工程應用
為什麼要學這個? 因為不確定性原理決定了你能做到的一切的極限——STFT 窗長怎麼選、雷達的距離和速度解析度為什麼不能同時最好、通訊脈衝整形的最佳化。它不是「理論上的限制」,而是你每天工作中必須面對的工程約束。
前情提要:1.3 告訴我們傅立葉級數確實收斂(在 L² 意義下),收斂速率取決於訊號的平滑度。但即使收斂了,時域和頻域的『集中程度』有個不可突破的下限——
一句話總結:你無法同時精確知道一個訊號「何時發生」和「包含什麼頻率」——這是數學定理,不是儀器限制。
Learning Objectives
- 定義時域展度 $\Delta t$ 與頻域展度 $\Delta\omega$ 的嚴格數學意義
- 從 Cauchy-Schwarz 不等式完整推導 $\Delta t\cdot\Delta\omega \geq \frac{1}{2}$
- 證明 Gaussian 達到等號(最小不確定性)
- 連結到 STFT 解析度限制與雷達模糊函數
痛點:為什麼 STFT 窗長這麼難選?
幾乎每個做時頻分析的工程師都遇過這個困境:
- STFT 窗長選擇:窗長太短 → 頻率解析度差(分不開兩個接近的頻率);窗長太長 → 時間解析度差(分不開兩個接近的事件)。怎麼選都不對。
- 雷達波形設計:距離解析度要求短脈衝(大頻寬),速度解析度要求長脈衝(窄頻寬)。為什麼不能同時最好?
- 通訊系統:OFDM 子載波間距越窄 → 頻譜效率越高,但符號持續時間越長 → 對時變通道更敏感。
答案不是你的設計不夠好——是數學本身禁止了同時精確。這就是不確定性原理。
歷史脈絡:Dennis Gabor (1900–1979,1971 年諾貝爾物理獎得主,全息術的發明者) 在 1946 年的經典論文 Theory of Communication 中,將 Werner Heisenberg 的量子力學不確定性原理引入訊號理論。Gabor 指出:如果把訊號看作時頻平面上的「資訊量子 (logon)」,每個量子至少佔 $\Delta t \cdot \Delta f \geq \frac{1}{4\pi}$ 的面積。這個結果與量子力學的 $\Delta x \cdot \Delta p \geq \hbar/2$ 具有完全相同的數學結構——差別只在物理解釋。
原理:嚴格陳述
直覺先行:想像一根吉他弦被撥了一下。如果你只彈了一個極短的音(click),你知道精確的時間,但「它是什麼音」很模糊。如果你持續彈一個穩定的音(drone),頻率很清楚,但「它何時開始」不明確。你不可能同時讓兩者都無限精確。
定義時域與頻域的「展度」為均方根寬度(二階矩):
Heisenberg-Gabor 不等式
$$\boxed{\Delta t \cdot \Delta\omega \geq \frac{1}{2}}$$等號成立若且唯若 $f(t) = Ce^{-\alpha t^2}$(Gaussian)
完整證明
展開完整推導(使用 Cauchy-Schwarz)
Step 1:不失一般性,假設 $\|f\| = 1$(歸一化),且 $f$ 的質心在原點(否則平移)。
Step 2:利用微分性質 $\mathcal{F}\{tf(t)\} = j\frac{d}{d\omega}F(\omega)$,以及 $\mathcal{F}\{f'(t)\} = j\omega F(\omega)$。由 Parseval:
$$\Delta t^2 = \int t^2|f(t)|^2\,dt, \quad \Delta\omega^2 = \int \omega^2|F(\omega)|^2\,d\omega = \frac{1}{2\pi}\int|f'(t)|^2\,dt$$Step 3:對 $tf(t)$ 和 $f'(t)$ 使用 Cauchy-Schwarz 不等式 (Cauchy-Schwarz Inequality):
$$\left|\int tf(t)\overline{f'(t)}\,dt\right|^2 \leq \int t^2|f|^2\,dt \cdot \int |f'|^2\,dt = \Delta t^2 \cdot 2\pi\Delta\omega^2$$Step 4:計算左邊。注意 $f\overline{f'} = \frac{1}{2}\frac{d}{dt}|f|^2$(當 $f$ 為實值或取實部時),利用分部積分:
$$\text{Re}\int tf(t)\overline{f'(t)}\,dt = \int t \cdot \frac{1}{2}\frac{d}{dt}|f(t)|^2\,dt$$ $$= \left[\frac{t}{2}|f|^2\right]_{-\infty}^{\infty} - \frac{1}{2}\int|f(t)|^2\,dt = 0 - \frac{1}{2}\|f\|^2 = -\frac{1}{2}$$(邊界項消失因為 $f \in L^2$ 意味著 $t|f(t)|^2 \to 0$ as $|t|\to\infty$。)
Step 5:因此 $\left|\int tf\overline{f'}\,dt\right| \geq \frac{1}{2}$。代入 Cauchy-Schwarz:
$$\frac{1}{4} \leq \Delta t^2 \cdot 2\pi\Delta\omega^2$$若用 $\Delta\omega$(弧頻率):$\Delta t \cdot \Delta\omega \geq \frac{1}{2}$。
若用 $\Delta f$(赫茲):$\Delta t \cdot \Delta f \geq \frac{1}{4\pi}$。$\;\blacksquare$
等號條件:Cauchy-Schwarz 等號 $\iff$ $f'(t) = -2\alpha t f(t)$ $\iff$ $f(t) = Ce^{-\alpha t^2}$。Gaussian 是唯一達到最小不確定性的波形。
怎麼用:三大工程約束
1. STFT 窗長選擇
窗長 $T_w$ 決定了時頻解析度:
| 分析目標 | 窗長建議 | 典型值 |
|---|---|---|
| 語音 formant 追蹤 | 短窗(時間解析度優先) | $T_w = 20{-}30$ ms |
| 音樂音高偵測 | 長窗(頻率解析度優先) | $T_w = 50{-}100$ ms |
| 振動監測 | 依頻率範圍調整 | $\Delta f < 1$ Hz → $T_w > 1$ s |
2. 雷達波形設計
距離解析度 $\Delta R = c/(2B)$($B$ = 頻寬),速度解析度 $\Delta v = \lambda/(2T)$($T$ = 脈衝持續時間)。不確定性原理要求 $BT \geq 1$,因此:
解法:使用 chirp(啁啾)脈衝,同時維持大 $B$ 和大 $T$,讓 $BT \gg 1$。
3. 通訊脈衝整形
OFDM 符號長度 $T_{sym}$ 和子載波間距 $\Delta f_{sc}$ 滿足 $T_{sym} \cdot \Delta f_{sc} = 1$(剛好等號)。5G NR 的 numerology(15/30/60/120 kHz)就是在不同的時頻取捨之間切換。
應用場景
- 5G NR OFDM numerology:子載波間距 15 kHz → 符號長度 66.7 us(低速移動);120 kHz → 8.33 us(毫米波高速場景)。取捨由不確定性原理決定。
- X-band 雷達 (FMCW):頻寬 $B = 150$ MHz → $\Delta R = 1$ m。脈衝重複間隔 $T_{PRI} = 100$ us → $\Delta v \approx 8$ m/s。$BT = 15000 \gg 1$(chirp 壓縮)。
- 腦電圖 (EEG) 時頻分析:分析 alpha 波 (8-13 Hz) 需要 $\Delta f < 5$ Hz → 窗長 $> 200$ ms,限制了偵測到瞬態事件的能力。
互動:Gaussian 的 $\Delta t \cdot \Delta f$ 乘積
調整 Gaussian $e^{-\alpha t^2}$ 的 $\alpha$ 參數。觀察:時域越窄 → 頻域越寬,但乘積恆為 $\frac{1}{4\pi}$(等號)。
陷阱與限制
- 不確定性原理是下界,不是等式:只有 Gaussian 達到等號。矩形窗的 $\Delta t \cdot \Delta f$ 遠大於 $1/(4\pi)$。
- 不要和 SNR 混淆:不確定性原理限制的是展度,不是偵測能力。在高 SNR 下,你仍然可以精確估計頻率(例如相位鎖定環)。
- 「超解析度」不違反不確定性原理:MUSIC、ESPRIT 等方法利用了訊號的結構假設(如正弦模型),繞過了不確定性原理的限制。但代價是:假設錯了就崩潰。
References: [1] Folland & Sitaram, The uncertainty principle: a mathematical survey, J. Fourier Anal. Appl., 1997. [2] Gabor, Theory of Communication, J. IEE, 1946. [3] Grochenig, Foundations of Time-Frequency Analysis, Birkhauser.
✅ 快速檢核 (Quick Check)
Q1: STFT 窗長加倍,頻率解析度和時間解析度分別怎麼變?
顯示答案
頻率解析度 Δf 減半(變好),時間解析度 Δt 加倍(變差)。乘積 Δt·Δf 不變。
Q2: 什麼訊號能達到不確定性原理的下限?
顯示答案
Gaussian 脈衝 e^{-αt²},它的 FT 也是 Gaussian,是唯一達到 Δt·Δf = 1/(4π) 等號的訊號。
2.1 傅立葉級數 (Fourier Series)
週期訊號的頻域表示 — 完整理論
為什麼要學這個? 因為傅立葉級數是一切的起點。電力工程師分析 THD、音訊工程師分析音色、通訊工程師分析調變——全部從「把訊號拆成諧波」開始。不理解傅立葉級數,後面的所有工具都是黑盒子。
前情提要:Part I 建立了數學地基。現在我們開始蓋房子——從最基本的傅立葉級數開始,分析週期訊號包含哪些頻率成分。
一句話總結:任何週期訊號都可以拆成一組正弦波的疊加——這些正弦波的頻率是基頻的整數倍(諧波 Harmonics)。
Learning Objectives
- 推導三角形式與複數形式的係數公式
- 利用對稱性(奇/偶/半波)簡化係數計算
- 計算方波、三角波、鋸齒波的傅立葉係數
- 理解 THD (Total Harmonic Distortion) 分析
痛點:電力系統的諧波問題
台電提供的 60 Hz 交流電,理想上是純正弦波。但在實際系統中:
- 非線性負載(整流器、變頻器、LED 驅動器)會注入諧波電流
- 3 次諧波(180 Hz)在三相系統中不會抵消,在中性線累加 → 中性線過熱
- IEEE 519-2022 標準規定 THD 不得超過 5%(電壓)或 8%(電流)
要分析這些諧波,你需要傅立葉級數。這不是抽象數學——是電力工程師每天面對的實務問題。
歷史脈絡:Joseph Fourier (1768–1830) 在 1807 年向法國科學院提交了關於熱傳導的論文,宣稱「任何函數都可以展開為正弦函數的級數」。評審委員 Lagrange 強烈反對,認為不連續函數不可能有此展開。論文被拒。但 Fourier 是對的(至少在 $L^2$ 意義下)。這個爭議催生了 19 世紀分析數學最深刻的進展——從 Riemann 積分到 Lebesgue 積分,從逐點收斂到 $L^2$ 收斂。Fourier 最終在 1822 年出版了 Theorie analytique de la chaleur。
原理:兩種形式
直覺:把週期訊號想像成和弦。和弦由基音(基頻 $f_0$)加上泛音($2f_0, 3f_0, \ldots$)組成。傅立葉級數就是告訴你每個泛音有多強、相位是多少。
三角形式 (Trigonometric Form):
$$f(t) = \frac{a_0}{2} + \sum_{n=1}^{\infty}\left[a_n\cos(n\omega_0 t) + b_n\sin(n\omega_0 t)\right]$$ $$a_n = \frac{2}{T}\int_0^T f(t)\cos(n\omega_0 t)\,dt, \quad b_n = \frac{2}{T}\int_0^T f(t)\sin(n\omega_0 t)\,dt$$複指數形式 (Complex Exponential Form):
$$f(t) = \sum_{n=-\infty}^{\infty}c_n\,e^{jn\omega_0 t}, \quad c_n = \frac{1}{T}\int_0^T f(t)\,e^{-jn\omega_0 t}\,dt$$關係:$c_0 = a_0/2$,$c_n = (a_n - jb_n)/2$,$c_{-n} = \overline{c_n}$(實數訊號)
對稱性簡化 (Symmetry Simplification)
利用訊號的對稱性,可以大幅簡化係數計算——甚至不用積分就知道某些係數為零:
| 訊號對稱性 | 結果 | 級數只含 | 例子 |
|---|---|---|---|
| 偶函數 $f(-t)=f(t)$ | $b_n=0$ | 只有 cosine | 三角波、rectified sine |
| 奇函數 $f(-t)=-f(t)$ | $a_n=0$ | 只有 sine | 方波(奇對稱版)、鋸齒波 |
| 半波對稱 $f(t+T/2)=-f(t)$ | 偶數次諧波為零 | 只有奇數次 | 方波($1,3,5,\ldots$ 次) |
工程速查:方波同時是奇函數 + 半波對稱 → 只含奇數次 sine 諧波。電力系統中,全波整流波形是偶函數 + 無半波對稱 → 含所有偶數次 cosine 諧波。
經典波形係數推導
方波 (Square Wave) 係數推導
週期 $T$、振幅 $\pm 1$ 的方波:$f(t) = 1$ for $0 < t < T/2$,$f(t) = -1$ for $T/2 < t < T$。
$$c_n = \frac{1}{T}\left[\int_0^{T/2}e^{-jn\omega_0 t}\,dt - \int_{T/2}^{T}e^{-jn\omega_0 t}\,dt\right]$$ $$= \frac{1}{T}\cdot\frac{1}{-jn\omega_0}\left[(e^{-jn\pi}-1) - (e^{-jn2\pi}-e^{-jn\pi})\right]$$ $$= \frac{1}{-jn\omega_0 T}\left[2e^{-jn\pi}-1-1\right] = \frac{2((-1)^n-1)}{-jn\cdot 2\pi}$$$n$ 偶數 → $c_n = 0$。$n$ 奇數 → $c_n = \frac{2}{jn\pi}$。
轉回 sine 形式:$b_n = 4/(n\pi)$(奇數 $n$),$a_n = 0$。
$$\boxed{f(t) = \frac{4}{\pi}\sum_{n=1,3,5,\ldots}\frac{1}{n}\sin(n\omega_0 t)} \quad\blacksquare$$三角波 (Triangle Wave) 係數推導
三角波是方波的積分。利用微分性質:若 $f(t) = \text{方波}$,$g(t) = \text{三角波} = \int f$,則 $g$ 的傅立葉係數 $d_n = c_n/(jn\omega_0)$。
$$d_n = \frac{4/(jn\pi)}{jn\omega_0} = \frac{-4}{n^2\pi\omega_0} \quad (\text{奇數 } n)$$轉為標準形式(振幅 1 的三角波):
$$\boxed{f(t) = \frac{8}{\pi^2}\sum_{n=1,3,5,\ldots}\frac{(-1)^{(n-1)/2}}{n^2}\sin(n\omega_0 t)} \quad\blacksquare$$注意係數衰減為 $1/n^2$(比方波的 $1/n$ 快),因為三角波是連續的。
怎麼用:THD 分析步驟
Total Harmonic Distortion (THD) 是衡量波形畸變程度的核心指標:
實務步驟:
- 用 ADC 取樣一個完整週期(或多個週期取平均)
- 做 FFT,取得各諧波的振幅 $|c_n|$
- 基頻 = $|c_1|$,諧波 = $|c_2|, |c_3|, \ldots$(通常到 40 次即可)
- 代入 THD 公式。IEEE 519 要求電壓 THD $\leq 5\%$,個別諧波 $\leq 3\%$
應用場景
- 電力品質監測:台電 60 Hz 系統中,典型的 6-pulse 整流器產生 5, 7, 11, 13 次諧波($6k \pm 1$ 規律)。3 次諧波 (180 Hz) 在三相中性線疊加,可能使中性線電流達相線的 $\sqrt{3}$ 倍。
- 音色分析 (Timbre Analysis):鋼琴 A4 (440 Hz) 的頻譜包含強烈的基頻和逐漸衰減的諧波;小提琴的相同音高諧波結構完全不同——這就是為什麼兩種樂器聽起來不一樣。
- RF 放大器線性度:功率放大器的非線性產生諧波和互調失真 (IMD)。二階諧波 ($2f$) 和三階互調 ($2f_1 - f_2$) 是設計中最關鍵的指標。
互動:諧波合成 (Harmonic Synthesis)
選擇波形和項數,觀察傅立葉級數如何逐步逼近原始波形。注意方波的 Gibbs 振鈴。下方頻譜顯示每個諧波的振幅,觀察方波/三角波/鋸齒波各自不同的衰減速率。
時間域:理想波形 vs 傅立葉級數合成
頻譜:當前使用的諧波
只顯示當前 N 項所使用的諧波。每根線標示頻率(基頻倍數)和振幅 |cn|。
陷阱與常見誤解
- 「THD 低就代表波形乾淨」 — 不一定。THD 是 RMS 指標,可能掩蓋某一個特別強的高次諧波。需要同時看個別諧波的振幅。
- 「傅立葉級數只適用於週期訊號」 — 嚴格來說是。但實際上,只要你擷取的時間窗口包含整數個週期,DFT 的結果就等同於傅立葉級數。非整數週期 → 洩漏問題。
- 「三角形式比較直覺」 — 初學時是,但複數形式在推導和計算上更方便。建議熟悉兩種形式的轉換。
References: [1] Oppenheim & Willsky, Signals and Systems, Ch.3. [2] Stein & Shakarchi, Fourier Analysis, Princeton. [3] IEEE 519-2022, Standard for Harmonic Control.
✅ 快速檢核 (Quick Check)
Q1: 方波只有奇數次諧波,這跟什麼對稱性有關?
顯示答案
半波對稱 f(t+T/2)=-f(t)。滿足此對稱性的訊號只包含奇數次諧波。
Q2: 某電力系統 60Hz 基頻的 3 次諧波是幾 Hz?
顯示答案
60×3 = 180 Hz。
2.2 連續時間傅立葉轉換 (CTFT)
從傅立葉級數到非週期訊號 — 令 $T\to\infty$
為什麼要學這個? 因為 CTFT 把傅立葉分析從週期訊號推廣到所有訊號。「濾波 = 頻域乘法」這個讓整個 DSP 領域存在的核心定理(卷積定理),就是 CTFT 的性質。
前情提要:2.1 的傅立葉級數只能處理週期訊號。但現實中大部分訊號不是週期的(語音、暫態、隨機訊號)。怎麼推廣?
一句話總結:把傅立葉級數推廣到非週期訊號——任何有限能量的訊號都能分解成連續的頻率成分。
Learning Objectives
- 從 FS 推導 CTFT($T\to\infty$ 極限過程)
- 證明時移、卷積、Parseval 等核心性質
- 推導 rect $\leftrightarrow$ sinc 和 Gaussian $\leftrightarrow$ Gaussian 轉換對
- 理解每個性質的工程意義
痛點:現實訊號不是週期的
傅立葉級數只能處理週期訊號,但現實中的訊號幾乎都不是嚴格週期的:
- 語音、音樂:有始有終的暫態訊號
- 雷達回波:一個脈衝,來了又走
- 地震波、腦電波:非週期、非平穩
我們需要一個更通用的工具,能處理任何有限能量的訊號。CTFT 就是這個工具。
歷史脈絡:CTFT 的概念源自一個優美的極限過程:讓傅立葉級數的週期 $T \to \infty$。當 $T$ 增大,離散的諧波頻率 $n\omega_0 = 2\pi n/T$ 之間的間距 $\omega_0 \to 0$,離散求和變成了連續積分。Fourier 本人在 1822 年就提出了這個想法。嚴格的數學基礎由 Plancherel (1910) 和 Wiener (1933) 建立。
原理:從 FS 到 CTFT
直覺先行:傅立葉級數告訴你「第 $n$ 個諧波有多強」(離散頻率)。當週期 → 無限大,諧波的間距 → 零,你不再有離散的「頻率編號」,而是一個連續的頻譜密度函數 $F(\omega)$。
展開完整推導:$T \to \infty$ 的極限
週期訊號 $f_T(t) = \sum_n c_n e^{jn\omega_0 t}$,$c_n = \frac{1}{T}\int_{-T/2}^{T/2}f(t)e^{-jn\omega_0 t}dt$。
定義 $F_T(\omega) = Tc_n\big|_{\omega=n\omega_0} = \int_{-T/2}^{T/2}f(t)e^{-j\omega t}dt$(把 $1/T$ 因子移到 $F_T$ 裡面)。
則原始展開變成:
$$f_T(t) = \frac{1}{T}\sum_n F_T(n\omega_0)e^{jn\omega_0 t} = \frac{1}{2\pi}\sum_n F_T(n\omega_0)\,\underbrace{\omega_0}_{\Delta\omega}\, e^{jn\omega_0 t}$$令 $T\to\infty$:$\omega_0 = 2\pi/T \to d\omega$,$n\omega_0 \to \omega$(連續),離散求和 → Riemann 積分:
$$\boxed{f(t) = \frac{1}{2\pi}\int_{-\infty}^{\infty}F(\omega)\,e^{j\omega t}\,d\omega, \quad F(\omega) = \int_{-\infty}^{\infty}f(t)\,e^{-j\omega t}\,dt} \quad\blacksquare$$CTFT 對 (Fourier Transform Pair)
$$F(\omega) = \int_{-\infty}^{\infty}f(t)\,e^{-j\omega t}\,dt \quad \text{(分析/正轉換)}$$ $$f(t) = \frac{1}{2\pi}\int_{-\infty}^{\infty}F(\omega)\,e^{j\omega t}\,d\omega \quad \text{(合成/逆轉換)}$$核心性質與工程意義
| 性質 | 時域 | 頻域 | 工程意義 |
|---|---|---|---|
| 時移 (Time Shift) | $f(t-t_0)$ | $e^{-j\omega t_0}F(\omega)$ | 延遲 = 相位旋轉,振幅不變 |
| 頻移 (Freq. Shift) | $e^{j\omega_0 t}f(t)$ | $F(\omega-\omega_0)$ | 調變 = 搬移頻譜到載波頻率 |
| 尺度 (Scaling) | $f(at)$ | $\frac{1}{|a|}F(\omega/a)$ | 時域壓縮 ↔ 頻域展寬(不確定性原理) |
| 卷積 (Convolution) | $f*g$ | $F\cdot G$ | LTI 濾波 = 頻域乘法(濾波器設計核心) |
| 乘法 (Multiplication) | $f\cdot g$ | $\frac{1}{2\pi}F*G$ | 窗函數截斷 = 頻域卷積(洩漏來源) |
| 微分 (Differentiation) | $f'(t)$ | $j\omega F(\omega)$ | 高通效果:高頻被放大 |
| Parseval | $\int|f|^2 dt = \frac{1}{2\pi}\int|F|^2 d\omega$ | 時域能量 = 頻域能量(能量守恆) | |
卷積定理證明 (Convolution Theorem)
交換積分順序,令 $u = t - \tau$:
$$= \int f(\tau)e^{-j\omega\tau}\left[\int g(u)e^{-j\omega u}du\right]d\tau = F(\omega)\cdot G(\omega) \quad\blacksquare$$工程意義:LTI 系統的輸出 $y = x * h$ 在頻域變成 $Y = X \cdot H$——這就是為什麼我們可以用頻率響應 $H(\omega)$ 來描述濾波器。乘法比卷積簡單太多了。
怎麼用:常用轉換對速查
| $f(t)$ | $F(\omega)$ | 記憶口訣 |
|---|---|---|
| $\text{rect}(t/\tau)$ | $\tau\,\text{sinc}(\omega\tau/2\pi)$ | 矩形窗 ↔ sinc 洩漏 |
| $e^{-\alpha|t|}$ | $\frac{2\alpha}{\alpha^2+\omega^2}$ | 指數衰減 ↔ Lorentzian |
| $e^{-\alpha t^2}$ | $\sqrt{\pi/\alpha}\,e^{-\omega^2/(4\alpha)}$ | Gaussian ↔ Gaussian |
| $\delta(t)$ | $1$ | 脈衝包含所有頻率 |
| $1$ | $2\pi\delta(\omega)$ | 直流 ↔ 零頻 delta |
| $e^{j\omega_0 t}$ | $2\pi\delta(\omega-\omega_0)$ | 純音 ↔ 頻譜線 |
應用場景
- 濾波器設計(卷積定理):要設計 1 kHz 低通濾波器?在頻域畫一個理想的矩形通帶 $H(\omega)$,逆 FT 得到衝激響應 $h(t) = \text{sinc}$——然後用視窗截斷。FM 收音機的 IF 濾波器(頻寬 200 kHz)就是這樣設計的。
- AM 調變(頻移性質):$x(t)\cos(\omega_c t) = \frac{1}{2}x(t)e^{j\omega_c t} + \frac{1}{2}x(t)e^{-j\omega_c t}$。頻域:基帶頻譜被搬到 $\pm\omega_c$。AM 廣播用的載波頻率 540-1600 kHz。
- 能量計算(Parseval 定理):計算一個 UWB(超寬帶)脈衝在 3.1-10.6 GHz 頻段內的能量:$E = \frac{1}{2\pi}\int_{2\pi\cdot3.1G}^{2\pi\cdot10.6G}|F(\omega)|^2\,d\omega$。
互動:rect $\leftrightarrow$ sinc
調整矩形脈衝的寬度 $\tau$。觀察:脈衝越窄 → sinc 主瓣越寬(不確定性原理的直接體現)。
陷阱與限制
- $1/(2\pi)$ 放在哪裡?不同教科書的 convention 不同。本平台用 $\omega$-convention:正轉換無 $1/(2\pi)$,逆轉換有。$f$-convention 兩邊都沒有,但指數裡是 $e^{-j2\pi ft}$。公式不要混用!
- CTFT 只適用於有限能量($L^1$ 或 $L^2$)訊號:$\cos(\omega_0 t)$ 的 CTFT 需要分佈理論(見 1.2 節)。
- 卷積定理要求兩個函數都可積:對分佈或週期訊號,需要更小心地定義卷積。
References: [1] Oppenheim & Willsky, Signals and Systems, Ch.4. [2] Bracewell, The Fourier Transform and Its Applications, McGraw-Hill. [3] Papoulis, The Fourier Integral and Its Applications.
✅ 快速檢核 (Quick Check)
Q1: 卷積定理對工程的最大意義是什麼?用一句話說。
顯示答案
濾波 = 頻域乘法。設計好 H(ω) 的形狀,就能選擇性地保留或去除任何頻率成分。
Q2: 時域延遲 t₀ 在頻域對應什麼?
顯示答案
乘以 e^{-jωt₀}——幅度不變,只有相位旋轉。這就是為什麼線性相位濾波器等同於純延遲。
互動:常見 CTFT 轉換對
選擇一個訊號,觀察其時域和頻域。試試不同寬度,理解時頻互逆關係。
2.3 離散時間傅立葉轉換 (DTFT)
連接連續世界與離散世界的橋樑
為什麼要學這個? 因為 DTFT 是連接類比世界(CTFT)和數位世界(DFT)的橋樑。不理解「取樣造成頻譜週期化」這件事,你就無法真正理解混疊為什麼發生、DFT 的結果代表什麼。
前情提要:2.2 的 CTFT 是連續世界的工具。但電腦只能處理離散的數字序列。把類比訊號取樣成數位訊號之後,頻譜會怎麼變?
一句話總結:把類比訊號取樣成數位訊號後,它的頻譜變成了週期性重複——DTFT 就是描述這個取樣後世界的工具。
Learning Objectives
- 定義 DTFT 並理解其頻域的 $2\pi$ 週期性
- 從 CTFT + 取樣推導 DTFT(頻域週期化)
- 區分 DTFT(連續頻率)與 DFT(離散頻率取樣)
- 理解零填充的真正作用
痛點:取樣之後頻譜怎麼變?
你用 ADC 把一個類比訊號數位化了,取樣率 $f_s = 48$ kHz。現在你有一串數字 $x[0], x[1], x[2], \ldots$。
- 這串數字的「頻譜」是什麼?跟原始類比訊號的頻譜有什麼關係?
- 為什麼 FFT 的輸出是以 $f_s$ 為週期重複的?
- DTFT 和 DFT 是同一個東西嗎?如果不是,差在哪裡?
DTFT 是理解數位訊號處理的理論基礎。DFT/FFT 是它的實際計算版本。
歷史脈絡:DTFT 的概念隨著數位計算的興起而被形式化。在 1960 年代,隨著 A/D 轉換器和數位電腦的普及,工程師需要一套完整的「離散世界」傅立葉理論。DTFT 填補了 CTFT(純連續)和 DFT(純離散有限長)之間的理論空白,由 Oppenheim、Schafer 等人在 1970 年代的教科書中系統化整理。
原理:定義與週期性
直覺先行:取樣就像用頻閃燈看旋轉的車輪。如果閃光頻率不夠高,車輪看起來會「倒轉」——這是因為頻譜發生了週期性重複(混疊)。DTFT 精確描述了這個現象。
DTFT 定義
$$X(e^{j\omega}) = \sum_{n=-\infty}^{\infty}x[n]\,e^{-j\omega n}$$$X(e^{j\omega})$ 是 $\omega$ 的連續函數,以 $2\pi$ 為週期。
逆轉換:
為什麼是 $2\pi$ 週期?
因為 $e^{-j(\omega+2\pi)n} = e^{-j\omega n}\cdot e^{-j2\pi n} = e^{-j\omega n}\cdot 1 = e^{-j\omega n}$。離散取樣天然無法區分頻率 $\omega$ 和 $\omega + 2\pi$——這就是混疊的數學根源。
💡 直覺:為什麼離散頻率必然是週期的?
考慮兩個離散複指數 $e^{j\omega n}$ 和 $e^{j(\omega+2\pi)n}$:
$$e^{j(\omega+2\pi)n} = e^{j\omega n}\cdot e^{j2\pi n} = e^{j\omega n}\cdot 1 = e^{j\omega n}$$因為 $e^{j2\pi n} = 1$ 對所有整數 $n$ 成立。
結論:頻率 $\omega$ 和 $\omega+2\pi$ 在離散時間中無法區分——它們產生完全相同的取樣值。所以 DTFT 的頻率軸自然是 $2\pi$ 週期的。
這也解釋了為什麼有 Nyquist 限制:類比訊號的頻率超過 $f_s/2$ 後,因為這個 $2\pi$ 摺疊,會被「混疊」回低頻區域。
與 CTFT 的關係:取樣 → 週期化
若 $x[n] = x_c(nT_s)$(取樣),則:
取樣造成頻譜的週期化。若 $X_c$ 的頻寬超過 $\pi/T_s$(Nyquist 頻率),相鄰副本重疊 → 混疊 (aliasing),且不可逆。
DTFT vs DFT:關鍵差異
DFT 是 DTFT 在頻率軸上的均勻取樣:
| 特性 | DTFT | DFT |
|---|---|---|
| 輸入 | 無限長序列 $x[n]$ | 有限長 $N$ 點序列 |
| 輸出 | 連續函數 $X(e^{j\omega})$ | $N$ 個離散值 $X[k]$ |
| 頻率解析度 | 連續(無限解析度) | $\Delta f = f_s/N$ |
| 可計算性 | 理論工具 | FFT 可快速計算 |
核心洞察:DTFT 給出完整的連續頻譜;DFT 只是從中取 $N$ 個等距樣本。零填充增加 DFT 的取樣密度(看到更多 DTFT 的細節),但不改變 DTFT 本身——零填充不提高頻率解析度,只提高頻譜的「顯示解析度」。
怎麼用:從 DTFT 理解 DFT 的結果
- 理解 DFT bin 的意義:$X[k]$ 是 DTFT $X(e^{j\omega})$ 在 $\omega = 2\pi k/N$ 處的取樣。頻率 $f_k = k \cdot f_s / N$。
- 判斷是否需要零填充:如果兩個峰值之間的 DTFT 細節被 DFT 取樣錯過了,增加 $N$(零填充或取更多資料)。
- 區分「真實解析度」和「顯示解析度」:真實解析度由資料長度決定($\Delta f = f_s / N_{data}$),零填充只改善內插,不改善解析度。
應用場景
- FIR 濾波器頻率響應:FIR 濾波器 $h[n]$(有限長度 $M$)的頻率響應就是它的 DTFT:$H(e^{j\omega}) = \sum_{n=0}^{M-1}h[n]e^{-j\omega n}$。用 DFT($N \gg M$,零填充)可以高密度繪製頻率響應曲線。
- 頻譜分析的頻率解析度:分析 $f_s = 48$ kHz 取樣的音訊,想要 $\Delta f = 1$ Hz 的解析度 → 需要 $N = f_s/\Delta f = 48000$ 點 → 最少 1 秒的資料。
- CIC 濾波器的 droop 分析:CIC(Cascaded Integrator-Comb)濾波器的 DTFT 是 $|H(e^{j\omega})| = |\frac{\sin(M\omega/2)}{M\sin(\omega/2)}|^K$,用 DTFT 可以精確分析 passband droop。
互動:DTFT vs DFT
藍色實線 = DTFT(用高密度 DFT 近似),紅點 = $N$ 點 DFT 的取樣。增加 $N$ 看到更多 DTFT 的細節——但 DTFT 本身不變。
陷阱與常見誤解
- 「零填充可以提高解析度」 — 這是最常見的誤解。零填充讓 DFT 在 DTFT 上取更多點(更平滑的頻譜曲線),但 DTFT 本身由原始資料完全決定。你不能從零值中創造出新的資訊。
- $\omega$ 的單位:DTFT 中的 $\omega$ 是歸一化角頻率(弧度/sample),範圍 $[-\pi, \pi]$。對應的物理頻率 $f = \omega f_s/(2\pi)$。$\omega = \pi$ 對應 Nyquist 頻率 $f_s/2$。
- DTFT 存在性:$x[n]$ 必須是絕對可和 ($\sum|x[n]| < \infty$) 或至少平方可和。無限長的週期序列(如 $\cos(\omega_0 n)$)的 DTFT 需要分佈理論($\delta$ 函數出現在頻域)。
References: [1] Oppenheim & Schafer, Discrete-Time Signal Processing, Ch.2-5. [2] Proakis & Manolakis, Digital Signal Processing, Ch.4.
✅ 快速檢核 (Quick Check)
Q1: DTFT 和 DFT 的關鍵差異是什麼?
顯示答案
DTFT 的頻率軸是連續的(ω 取所有值),DFT 是在頻率軸上等距取 N 個點。DFT = DTFT 的取樣。
Q2: 取樣為什麼會造成頻譜週期化?
顯示答案
取樣=乘以脈衝串,頻域變成卷積脈衝串=頻譜的週期性重複。
2.4 DFT 與 FFT
離散傅立葉轉換與快速演算法
為什麼要學這個? 因為 DFT/FFT 是你在電腦上實際執行的運算——前面所有的理論最終都要通過 FFT 落地。理解圓卷積 vs 線性卷積的差異、零填充的真正作用,是避免 FFT 使用錯誤的關鍵。
前情提要:2.3 的 DTFT 給出連續的頻譜——但電腦無法儲存連續函數。我們需要把頻率軸也離散化,這就是 DFT。而 FFT 讓 DFT 快到可以即時計算。
一句話總結:DFT 是電腦實際能算的版本,FFT 是讓它算得快的演算法——從 $O(N^2)$ 降到 $O(N\log N)$。
Learning Objectives
- DFT 矩陣觀點:$\mathbf{X} = \mathbf{W}_N\mathbf{x}$,酉性質
- 理解圓卷積 vs 線性卷積的差異
- Cooley-Tukey radix-2 分治推導
- 正確選擇 $N$,理解零填充的作用與誤解
痛點:1965 年以前的世界
想像一下沒有 FFT 的時代:
| $N$ | DFT 直接計算(乘法次數) | FFT(乘法次數) | 加速比 |
|---|---|---|---|
| 1,024 | 1,048,576 | 5,120 | 205x |
| 4,096 | 16,777,216 | 24,576 | 683x |
| 1,048,576 | $1.1 \times 10^{12}$ | $10,485,760$ | 104,858x |
1965 年以前,做一次 1024 點的頻譜分析在當時的電腦上要好幾分鐘。FFT 的發明讓同樣的計算在毫秒內完成,直接催生了現代數位訊號處理的所有應用。
歷史脈絡:James Cooley 和 John Tukey 在 1965 年發表了劃時代的論文 An algorithm for the machine calculation of complex Fourier series。背景是冷戰核試監測:美國需要分析地震監測站的資料以偵測蘇聯的地下核試。大量的傅立葉分析需求催生了 FFT。有趣的是,Carl Friedrich Gauss 早在 1805 年就發明了類似的演算法(用於計算小行星軌道),但他的手稿直到 1866 年才被發現,且是用拉丁文寫的,長期被忽視。
原理:DFT 矩陣觀點
直覺先行:DFT 就是把一個 $N$ 維向量(時域訊號)乘以一個特殊的 $N \times N$ 矩陣(旋轉因子矩陣),得到另一個 $N$ 維向量(頻域)。
$\frac{1}{\sqrt{N}}\mathbf{W}_N$ 為酉矩陣 (Unitary):$\mathbf{W}_N^H\mathbf{W}_N = N\mathbf{I}$
逆 DFT:$x[n] = \frac{1}{N}\sum_{k=0}^{N-1}X[k]\,W_N^{-kn}$,即 $\mathbf{x} = \frac{1}{N}\mathbf{W}_N^H\mathbf{X}$。
展開推導:實數訊號的 DFT 共軛對稱性
定理:若 $x[n]$ 是實數序列,則其 DFT 滿足 $X[N-k] = X^*[k]$(共軛對稱)。
推導:
$$X[N-k] = \sum_{n=0}^{N-1} x[n]\, e^{-j2\pi(N-k)n/N}$$ $$= \sum_{n=0}^{N-1} x[n]\, e^{-j2\pi n}\, e^{j2\pi kn/N}$$由於 $e^{-j2\pi n} = 1$(任意整數 $n$):
$$= \sum_{n=0}^{N-1} x[n]\, e^{j2\pi kn/N}$$因為 $x[n]$ 是實數,$x[n] = x^*[n]$:
$$= \sum_{n=0}^{N-1} x^*[n]\, e^{j2\pi kn/N} = \left(\sum_{n=0}^{N-1} x[n]\, e^{-j2\pi kn/N}\right)^* = X^*[k] \quad\blacksquare$$實務意義:
- 實數訊號的 DFT 完全由前半部 $X[0], X[1], \ldots, X[N/2]$ 決定
- 計算與儲存可省一半(real-FFT 演算法)
- $X[0]$ 是實數(DC),$X[N/2]$ 也是實數(Nyquist bin)
- $|X[k]| = |X[N-k]|$(幅度譜對稱),$\angle X[k] = -\angle X[N-k]$(相位譜反對稱)
圓卷積 (Circular Convolution) vs 線性卷積
DFT 對應的是圓卷積(末端環繞回頭部),不是線性卷積。
| 類型 | $x$ 長度 $M$,$y$ 長度 $L$ | 結果長度 | DFT 所需 $N$ |
|---|---|---|---|
| 線性卷積 | $M + L - 1$ | $M + L - 1$ | $N \geq M + L - 1$ |
| 圓卷積 | $\max(M, L)$ | $N$ | $N$(但可能有 aliasing) |
關鍵:要用 DFT 計算線性卷積,必須零填充到 $N \geq M + L - 1$。否則圓卷積的「環繞」會污染結果。這是 overlap-add (OLA) 和 overlap-save (OLS) 方法的理論基礎。
Radix-2 FFT:分治法
Cooley-Tukey Radix-2 分治推導
假設 $N = 2^m$。把 DFT 拆成偶數項和奇數項:
$$X[k] = \sum_{n=0}^{N-1}x[n]W_N^{kn} = \underbrace{\sum_{r=0}^{N/2-1}x[2r]W_N^{2rk}}_{A[k]} + W_N^k\underbrace{\sum_{r=0}^{N/2-1}x[2r+1]W_N^{2rk}}_{B[k]}$$注意 $W_N^{2rk} = W_{N/2}^{rk}$(因為 $e^{-j2\pi\cdot 2r k/N} = e^{-j2\pi rk/(N/2)}$)。
所以 $A[k]$ 和 $B[k]$ 各是長度 $N/2$ 的 DFT!
$$X[k] = A[k] + W_N^k\,B[k], \quad k = 0, 1, \ldots, N/2-1$$ $$X[k+N/2] = A[k] - W_N^k\,B[k] \quad (\text{因為 } W_N^{k+N/2} = -W_N^k)$$這就是蝴蝶運算 (Butterfly Operation)。
複雜度:每層 $N/2$ 次蝴蝶,共 $\log_2 N$ 層 → $O(N\log N)$。$\;\blacksquare$
怎麼用:$N$ 的選擇與頻率對應
Step 1:選擇 $N$
需要 $\Delta f = 1$ Hz 且 $f_s = 48000$ Hz → $N = 48000$。FFT 效率最高當 $N = 2^m$,所以取 $N = 2^{16} = 65536$($\Delta f \approx 0.73$ Hz)。
Step 2:FFT bin 對應的頻率
$k = 0$:DC,$k = N/2$:Nyquist,$k > N/2$:負頻率($f_k - f_s$)
Step 3:零填充的正確理解
| 零填充的效果 | 不是的效果 |
|---|---|
| 增加 DFT 取樣密度(更平滑的頻譜曲線) | 提高真實頻率解析度 |
| 讓 $N$ 成為 $2^m$(FFT 效率最高) | 增加訊號的資訊量 |
| 避免圓卷積 aliasing($N \geq M+L-1$) | 降低雜訊 |
Python 範例:計算 FFT 並繪製頻譜
應用場景
- 音訊頻譜分析器:$f_s = 44100$ Hz,$N = 4096$ → $\Delta f = 10.8$ Hz。足以分辨鋼琴相鄰鍵(如 A4 = 440 Hz 和 A#4 = 466 Hz,差 26 Hz)。
- OFDM 通訊:802.11ax (Wi-Fi 6) 使用 1024-point FFT,子載波間距 78.125 kHz。每個 FFT bin 就是一個子載波。
- 實時頻譜儀:Keysight RSA 使用 $N = 2^{22}$ 的 FFT,在 110 MHz 頻寬下達到 $\Delta f \approx 26$ Hz 的解析度,每秒計算數百次。
陷阱與常見錯誤
- FFT bin 頻率搞錯:最常見的錯誤是把 $k = N-1$ 當成最高頻率。實際上 $k > N/2$ 對應負頻率。對實數輸入,只需看 $k = 0, \ldots, N/2$。
- 零填充 $\neq$ 提高解析度:100 點資料零填充到 1024 點,解析度仍是 $f_s/100$,不是 $f_s/1024$。
- 圓卷積 $\neq$ 線性卷積:忘記零填充直接用 FFT 做卷積,結果會有環繞效應 (wrap-around artifact)。
- 大小端 (endianness) 和歸一化:不同的 FFT 函式庫(FFTW、NumPy、MATLAB)的歸一化 convention 不同。有些在正轉換除以 $N$,有些在逆轉換。檢查 Parseval 等式是否成立。
References: [1] Cooley & Tukey, An algorithm for the machine calculation of complex Fourier series, Math. Comp., 1965. [2] Oppenheim & Schafer, Discrete-Time Signal Processing, Ch.8-9. [3] Van Loan, Computational Frameworks for the FFT, SIAM.
📝 例題演練 (Worked Example)
你有一段 0.5 秒的音訊,取樣率 8000 Hz。(a) 總共有幾個取樣點?(b) FFT 的頻率解析度 Δf?(c) 如果需要看到 0.5 Hz 的頻率細節,觀測時間至少要多長?
顯示解題過程
(a) N = 0.5 × 8000 = 4000 點
(b) Δf = fs/N = 8000/4000 = 2 Hz
(c) Δf = 1/T → T = 1/0.5 = 2 秒(零填充無法替代)
✅ 快速檢核 (Quick Check)
Q1: 1024 點 FFT 比直接 DFT 快多少倍?
顯示答案
DFT: N²=1,048,576 次乘法。FFT: (N/2)log₂N=5,120。加速比 ≈ 205 倍。
Q2: 零填充到 4096 點會提高真正的頻率解析度嗎?
顯示答案
不會。真正的解析度只取決於觀測時間 Δf=1/T。零填充只是讓頻率軸更密(內插),不會增加新資訊。
互動:零填充的真正效果
訊號:50Hz + 55Hz,取樣率 500Hz,觀測 0.1秒(50點)。零填充不會分開兩個峰——只讓頻譜更滑順。
範例:8 點 FFT 蝴蝶圖 (Butterfly Diagram)
Radix-2 Cooley-Tukey FFT 把 N=8 點 DFT 分解成 $\log_2 8 = 3$ 級運算,每級有 $N/2=4$ 個「蝴蝶」運算。每個蝴蝶把兩個輸入合成兩個輸出,總共需要 $\frac{N}{2}\log_2 N = 12$ 次複數乘法(直接 DFT 需要 $N^2 = 64$ 次)。
基本蝴蝶運算 (Butterfly):
給定兩個輸入 $a$, $b$ 和旋轉因子 $W_N^k = e^{-j2\pi k/N}$:
$$\begin{aligned} a' &= a + W_N^k \cdot b \\ b' &= a - W_N^k \cdot b \end{aligned}$$每個蝴蝶 = 1 次複數乘法 + 2 次複數加法。
輸入位元反轉 (Bit-Reversal) 排序:輸入順序 0,1,2,3,4,5,6,7 經過位元反轉變成 0,4,2,6,1,5,3,7。輸出則保持自然順序 X[0]~X[7]。
| 原始索引 | 二進位 | 反轉 | 新位置 |
|---|---|---|---|
| 0 | 000 | 000 | 0 |
| 1 | 001 | 100 | 4 |
| 2 | 010 | 010 | 2 |
| 3 | 011 | 110 | 6 |
| 4 | 100 | 001 | 1 |
| 5 | 101 | 101 | 5 |
| 6 | 110 | 011 | 3 |
| 7 | 111 | 111 | 7 |
8 點 FFT 完整資料流圖
藍線 = 加法路徑 (a 路徑);紅線 = 乘以旋轉因子後相減 (b 路徑)。標籤 $W_8^k$ 顯示每個蝴蝶用的旋轉因子。
觀察重點:
- 3 級 (Stage 1, 2, 3):每級都把問題規模減半,最後合成完整 DFT
- Stage 1:4 組「2 點 DFT」,蝴蝶距離 = 1,旋轉因子 $W_8^0 = 1$(不需乘法)
- Stage 2:2 組「4 點 DFT」,蝴蝶距離 = 2,旋轉因子 $W_8^0, W_8^2$
- Stage 3:1 組「8 點 DFT」,蝴蝶距離 = 4,旋轉因子 $W_8^0, W_8^1, W_8^2, W_8^3$
- 總乘法數:$\frac{N}{2}\log_2 N = 12$(vs 直接 DFT 的 $N^2 = 64$,加速 5.3 倍)
- 對於 $N=1024$:FFT 5,120 次 vs DFT 1,048,576 次,加速 205 倍
旋轉因子值(N=8):
$W_8 = e^{-j2\pi/8} = e^{-j\pi/4}$
| k | $W_8^k$ | 數值 |
|---|---|---|
| 0 | $1$ | $1 + 0j$ |
| 1 | $e^{-j\pi/4}$ | $0.707 - 0.707j$ |
| 2 | $e^{-j\pi/2}$ | $0 - j$ |
| 3 | $e^{-j3\pi/4}$ | $-0.707 - 0.707j$ |
完整推導:8 點 FFT 帶數字算給你看
選擇一個輸入訊號,看蝴蝶圖如何一步步把時域訊號轉成頻譜。每一級都顯示具體的複數值,最終得到 $|X[k]|$ 頻譜。
Step 1: 原始輸入 x[n](按時間順序)
Step 2: 位元反轉重排(蝴蝶圖左側輸入)
Step 3: Stage 1 後的中間值(4 個 2 點 DFT)
Step 4: Stage 2 後的中間值(2 個 4 點 DFT)
Step 5: Stage 3 後的最終 DFT 輸出 X[k](複數)
Step 6: 頻譜 $|X[k]|$ 視覺化
取每個 X[k] 的絕對值就得到頻譜。物理頻率 $f_k = k\cdot f_s/N$。
怎麼讀懂這個推導?
- 從上往下看:每一級的輸入是上一級的輸出
- 每一格的數字就是該節點的複數值,格式
a + bj - Stage k 的蝴蝶:把上一級兩個值合成兩個新值(公式 $a' = a + W \cdot b$, $b' = a - W \cdot b$)
- 最後 X[k] 取絕對值得到頻譜。例如選 cos(2π·n/8) 應該在 k=1 和 k=7 看到峰值
Decimation-in-Time vs Decimation-in-Frequency
Cooley-Tukey FFT 有兩種等價但不同的分解方式。本平台示範的是 DIT (Decimation-in-Time)。
DIT — Decimation in Time
把輸入序列分成偶數和奇數兩半:
$$X[k] = \sum_{r=0}^{N/2-1}x[2r]W_{N/2}^{rk} + W_N^k\sum_{r=0}^{N/2-1}x[2r+1]W_{N/2}^{rk}$$- 輸入需要位元反轉排序
- 輸出自然順序
- 蝴蝶結構:先乘後加
DIF — Decimation in Frequency
把輸出分成偶數和奇數兩組:
$$X[2k] = \sum_{n=0}^{N/2-1}\left[x[n]+x[n+N/2]\right]W_{N/2}^{nk}$$ $$X[2k+1] = \sum_{n=0}^{N/2-1}\left[x[n]-x[n+N/2]\right]W_N^n W_{N/2}^{nk}$$- 輸入自然順序
- 輸出需要位元反轉排序
- 蝴蝶結構:先加後乘
實務選擇:
- 兩者運算量完全相同:$\frac{N}{2}\log_2 N$ 次複數乘法
- 大多數現代 FFT 函式庫(FFTW, MKL)兩者都支援
- 選擇通常由「上游/下游處理階段如何排序」決定,避免額外的 bit-reversal
- DIT 更直觀(從蝴蝶圖角度),DIF 是其轉置
⚠ FFT 實作常見陷阱
這些是工程師實際使用 numpy.fft.fft 或 scipy.fft 時最常踩的雷。
陷阱 1:忘記正規化 (Normalization)
numpy 的 fft 預設不做正規化。對 N 點訊號的振幅譜,要乘 2/N(單邊):
陷阱 2:fftfreq 用法錯誤
頻率索引 k 對應的物理頻率是 $f_k = k \cdot f_s / N$,不是 $k$ 本身:
陷阱 3:頻譜洩漏 (Spectral Leakage)
如果訊號頻率不是 $f_s/N$ 的整數倍(即不在 bin 中心),能量會洩漏到鄰近 bin。永遠記得加窗:
陷阱 4:零填充 ≠ 提高解析度
零填充只是讓 DFT bin 變密(內插效果),不會增加真正的頻率解析度。真正解析度由觀測時間 $T$ 決定:$\Delta f = 1/T$。
陷阱 5:DC 漂移
如果訊號有 DC offset,FFT 在 k=0 處會出現巨大峰值,可能掩蓋你要看的低頻成分。先去除均值:
陷阱 6:複數 vs 實數 FFT
對實數訊號,用 np.fft.rfft() 比 fft() 快約 2 倍(只算一半),因為共軛對稱。
2.5 Z 轉換 (Z-Transform)
離散時間系統的統一分析框架
為什麼要學這個? 因為 Z 轉換是數位系統分析的萬用工具。判斷濾波器穩不穩定、從極零點圖讀出頻率響應、設計 IIR 濾波器——全部靠 Z 轉換。它在離散系統中的地位等同於 Laplace 轉換在連續系統中的地位。
前情提要:2.4 的 DFT/FFT 是計算工具。但要分析離散系統的穩定性、設計數位濾波器,需要更強大的框架——Z 轉換。
一句話總結:Z 轉換 (Z-Transform) 是數位系統的「萬用工具」——穩定性、頻率響應、濾波器設計全靠它。
Learning Objectives
- 定義 Z 轉換及收斂域 (Region of Convergence, ROC)
- 理解 DFT = Z 轉換在單位圓上的取樣
- 用極零點分析 (Pole-Zero Analysis) 判斷穩定性和頻率響應
- 設計簡單的 IIR 濾波器
痛點:數位濾波器的核心問題
你設計了一個數位濾波器,差分方程是:
- 它穩不穩定?(會不會輸出爆炸?)
- 它的頻率響應長什麼樣?(哪些頻率被放大,哪些被衰減?)
- 如果我要讓 1 kHz 被完全消除(陷波),該怎麼改?
這些問題用時域差分方程很難回答。Z 轉換把差分方程變成代數方程,一切就清楚了。
歷史脈絡:Z 轉換是 Laplace 轉換 (Laplace Transform) 的離散對應物。在連續系統中,Laplace 轉換把微分方程變成代數方程,變數 $s$ 住在複數平面上。Z 轉換做同樣的事,但對離散系統:變數 $z$ 也住在複數平面上,而 $z = e^{sT_s}$ 把 $s$-平面映射到 $z$-平面。Lotfi Zadeh(後來以模糊邏輯聞名)和 John Ragazzini 在 1952 年引入了 Z 轉換的現代形式。
原理:定義與收斂域
直覺先行:DTFT 是在頻率軸上($e^{j\omega}$,單位圓)評估序列。Z 轉換把評估範圍從單位圓擴展到整個複數平面。這額外的自由度讓我們能分析穩定性、因果性等 DTFT 無法直接告訴我們的資訊。
Z 轉換定義
$$X(z) = \sum_{n=-\infty}^{\infty}x[n]\,z^{-n}, \quad z \in \mathbb{C}$$當 $z = e^{j\omega}$(單位圓):$X(e^{j\omega}) = \text{DTFT}$
當 $z = e^{j2\pi k/N}$(單位圓上等距 $N$ 點):$X[k] = \text{DFT}$
收斂域 (ROC)
使級數 $\sum|x[n]||z|^{-n}$ 收斂的 $z$ 值集合。ROC 的形狀決定了序列的性質:
| 序列類型 | ROC 形狀 | 例子 |
|---|---|---|
| 有限長 (FIR) | 整個 $z$-平面(可能除 $z=0$ 或 $z=\infty$) | $x[n] = \delta[n] - 0.5\delta[n-1]$ |
| 因果右邊序列 | 某個圓的外部 $|z| > r_{\max}$ | $x[n] = a^n u[n]$, ROC: $|z|>|a|$ |
| 反因果左邊序列 | 某個圓的內部 $|z| < r_{\min}$ | $x[n] = -a^n u[-n-1]$, ROC: $|z|<|a|$ |
穩定性判據:因果 LTI 系統穩定 $\iff$ ROC 包含單位圓 $\iff$ 所有極點都在單位圓內部($|p_i| < 1$)。這是數位濾波器穩定性判斷的唯一準則。
極零點分析 (Pole-Zero Analysis)
對一個理性的轉移函數(IIR 濾波器):
$q_k$:零點 (zeros),$p_k$:極點 (poles)
頻率響應的直覺:$H(e^{j\omega})$ 是在單位圓上走一圈,看每個位置離極點和零點有多遠。
- 極點靠近單位圓 → 該頻率被放大(共振 resonance)。極點越靠近,峰越尖銳。
- 零點靠近單位圓 → 該頻率被衰減(陷波 notch)。零點在單位圓上 = 完全消除。
- 極點在單位圓外 → 系統不穩定。
為什麼極點造成共振?
在 $\omega = \theta_p$(極點角度)附近:
$$|H(e^{j\omega})| \approx \frac{|b_0|\prod|e^{j\omega}-q_k|}{\prod_{k\neq i}|e^{j\omega}-p_k| \cdot |e^{j\omega}-p_i|}$$當 $\omega \approx \theta_p$ 時,$|e^{j\omega} - p_i| = |e^{j\omega} - |p_i|e^{j\theta_p}| \approx 1 - |p_i|$(很小)。
因此 $|H| \approx \frac{C}{1-|p_i|}$。$|p_i| \to 1$ 時,增益趨向無窮大。
峰的 3-dB 頻寬 $\approx 2(1-|p_i|)$ 弧度。$\;\blacksquare$
怎麼用:從極零點設計濾波器
- 陷波濾波器(消除特定頻率):在 $z = e^{j\omega_0}$ 和 $z = e^{-j\omega_0}$ 放零點,配以靠近的極點 $z = r\,e^{\pm j\omega_0}$($r < 1$,如 $r = 0.95$)來控制陷波寬度。
- 共振器(增強特定頻率):把極點放在 $z = r\,e^{\pm j\omega_0}$,$r$ 越接近 1,共振越尖銳。$Q$ 值 $\approx \frac{\omega_0}{2(1-r)}$。
- 穩定性檢查:所有極點 $|p_k| < 1$?如果有極點在單位圓上或外面,系統不穩定。MATLAB 的
zplane(b,a)或 Python 的scipy.signal.tf2zpk。
應用場景
- IIR 濾波器設計:Butterworth、Chebyshev、Elliptic 濾波器都是在 $s$-平面設計好極零點,再用雙線性轉換 (bilinear transform) $s = \frac{2}{T_s}\frac{1-z^{-1}}{1+z^{-1}}$ 映射到 $z$-平面。例如,5 階 Butterworth 低通有 5 個極點均勻分布在 $s$-平面的左半圓上。
- 控制系統穩定性:數位 PID 控制器的閉迴路轉移函數 $H_{cl}(z)$ 的極點必須全部在單位圓內。如果某個極點 $|p| = 0.98$(很接近但仍在內部),系統穩定但會有慢衰減的振盪。
- 音訊等化器 (EQ):參數式 EQ 的每個頻段就是一對共軛極點加一對共軛零點。中心頻率由極零點角度決定,$Q$ 值由半徑決定,增益由零點到極點的距離比決定。
互動:極零點圖與頻率響應
調整極點位置(共軛對 $p = re^{\pm j\theta}$),觀察頻率響應(= Z 轉換在單位圓上的值)如何變化。半徑越接近 1,共振峰越尖銳。
陷阱與限制
- ROC 必須指定:同一個 $X(z)$ 代數式,不同的 ROC 對應不同的時域序列。例如 $X(z) = 1/(1-az^{-1})$:ROC $|z|>|a|$ → 因果指數 $a^n u[n]$;ROC $|z|<|a|$ → 反因果 $-a^n u[-n-1]$。
- FIR 永遠穩定:FIR 濾波器沒有回饋極點(所有極點在 $z=0$),因此無條件穩定。這是 FIR 比 IIR 最大的優勢。
- 數值精度:極點越接近單位圓,IIR 濾波器對係數量化越敏感。16-bit 定點實現中,$|p| > 0.99$ 的極點可能導致極限環振盪 (limit cycle oscillation)。
References: [1] Oppenheim & Schafer, Discrete-Time Signal Processing, Ch.3-6. [2] Proakis & Manolakis, Digital Signal Processing, Ch.3. [3] Mitra, Digital Signal Processing: A Computer-Based Approach.
✅ 快速檢核 (Quick Check)
Q1: 怎麼從極零點圖判斷一個頻率被放大還是衰減?
顯示答案
極點靠近單位圓上的某個頻率 → 該頻率被放大(共振);零點靠近 → 該頻率被衰減(陷波)。
Q2: IIR 濾波器穩定的條件是什麼?
顯示答案
所有極點都在單位圓內(|z|<1),等價於 ROC 包含單位圓。
2.6 取樣定理 (Sampling Theorem)
從 Poisson 求和公式嚴格推導 Shannon 定理
為什麼要學這個? 因為取樣是類比到數位的第一步,搞錯取樣率造成的混疊是不可逆的災難。CD 為什麼用 44.1kHz?振動分析為什麼要 2.56 倍?5G 為什麼要 oversampling?全部都是 Nyquist 定理的直接應用。
前情提要:到目前為止我們假設已經有了離散序列 x[n]。但 x[n] 是從類比訊號 x(t) 取樣來的——取樣率要多高才不會丟失資訊?
一句話總結:取樣率不夠高,高頻會偽裝成低頻——這叫混疊 (Aliasing),而且不可逆。
Learning Objectives
- 推導取樣 = 頻域週期化(Poisson 求和公式)
- 從週期化推導 Nyquist 條件 $f_s \geq 2f_{\max}$
- 推導 sinc 重建 (Whittaker-Shannon interpolation) 公式
- 理解實際系統中抗混疊濾波器的設計
痛點:錄音師的噩夢
假設你用 $f_s = 8000$ Hz 的取樣率錄一段包含 5000 Hz 音調的聲音。回放時你聽到的不是 5000 Hz,而是 3000 Hz(= $8000 - 5000$)。
- 5000 Hz 超過了 Nyquist 頻率 $f_s/2 = 4000$ Hz
- 它被「折疊」(aliased)到 $f_s - 5000 = 3000$ Hz
- 不可逆:你無法從錄好的資料中分辨 3000 Hz 和 5000 Hz 的差別
這就是為什麼每個 ADC 前面都必須放一個抗混疊濾波器 (anti-aliasing filter)。取樣定理告訴你這個濾波器的截止頻率要設在哪裡。
歷史脈絡:Harry Nyquist 在 1928 年的論文 Certain Topics in Telegraph Transmission Theory 中首先提出:以 $f_s$ 的速率取樣,最多只能表示頻寬 $f_s/2$ 的訊號。Claude Shannon 在 1949 年的資訊理論奠基論文中給出了完整的數學證明和 sinc 重建公式。在俄羅斯,V. A. Kotelnikov 在 1933 年就獨立得到了同樣的結果。因此這個定理有時也叫 Nyquist-Shannon-Kotelnikov 取樣定理。
原理:嚴格推導
直覺先行:取樣就像用梳子在頻率軸上「印章」——每隔 $f_s$ 就蓋一個原始頻譜的副本。如果原始頻譜太寬,相鄰的副本會重疊(混疊),就像印章蓋太密導致圖案模糊。
從 Poisson 求和到 Shannon 定理
Step 1:取樣 = 乘以脈衝串 (Impulse Train)
$$x_s(t) = x(t)\cdot\sum_{n=-\infty}^{\infty}\delta(t - nT_s) = \sum_n x(nT_s)\,\delta(t-nT_s)$$Step 2:頻域
脈衝串的 FT 是另一個脈衝串:$\mathcal{F}\{\sum_n\delta(t-nT_s)\} = \frac{2\pi}{T_s}\sum_k\delta(\omega-k\omega_s)$,$\omega_s = 2\pi f_s$。
時域乘法 = 頻域卷積:
$$X_s(\omega) = \frac{1}{2\pi}X(\omega) * \frac{2\pi}{T_s}\sum_k\delta(\omega-k\omega_s) = \frac{1}{T_s}\sum_{k=-\infty}^{\infty}X(\omega - k\omega_s)$$取樣造成頻譜的週期性重複,間距 $\omega_s = 2\pi f_s$。
Step 3:Nyquist 條件
若 $X(\omega) = 0$ for $|\omega| > \omega_{\max}$(帶限訊號),且 $\omega_s > 2\omega_{\max}$,則相鄰副本不重疊。可用增益 $T_s$、截止頻率 $\omega_s/2$ 的理想低通濾波器恢復原始頻譜:
$$\boxed{f_s \geq 2f_{\max} \quad \text{(Nyquist Rate)}}$$Step 4:sinc 重建 (Whittaker-Shannon Interpolation)
理想低通濾波器的衝激響應 = sinc 函數。因此:
$$x(t) = \sum_{n=-\infty}^{\infty}x(nT_s)\,\text{sinc}\!\left(\frac{t-nT_s}{T_s}\right)$$其中 $\text{sinc}(u) = \frac{\sin(\pi u)}{\pi u}$。每個取樣點「長出」一個 sinc 波形,所有 sinc 的疊加精確重建原始連續訊號。$\;\blacksquare$
怎麼用:實際系統的取樣率設計
理論上 $f_s \geq 2f_{\max}$ 就夠。但實際上需要更高,因為:
- 抗混疊濾波器不是理想的:理想低通濾波器(磚牆 brick-wall)不可實現。實際的類比 LPF 有過渡帶 (transition band),需要留餘裕。
- 經驗法則:$f_s \geq 2.56 \times f_{\max}$(振動分析業界標準),或更保守的 $f_s \geq 3{-}4 \times f_{\max}$。
- 抗混疊濾波器放在 ADC 前面(類比域),截止頻率設在 $f_s/2$ 或略低。
| 應用 | $f_{\max}$ | $f_s$(實際) | 倍率 | 備註 |
|---|---|---|---|---|
| CD 音訊 | 20 kHz | 44.1 kHz | 2.2x | 人耳上限 20 kHz |
| 專業音訊 | 20 kHz | 96 kHz | 4.8x | 簡化 AAF 設計 |
| 振動分析 | $f_{max}$ | $2.56 \times f_{max}$ | 2.56x | ISO/IEC 標準 |
| 5G 基帶 | 100 MHz | 245.76 MHz | 2.46x | 3GPP 標準取樣率 |
| Sigma-Delta ADC | $f_b$ | $64{-}256 \times f_b$ | 64-256x | Oversampling 換 bit 數 |
應用場景
- 音訊 CD (44.1 kHz):人耳最高感知約 20 kHz。$44100/20000 = 2.205$。為什麼是 44.1 而非 40?因為需要給抗混疊濾波器留過渡帶。44100 的歷史原因與 NTSC 視頻格式有關。
- 機械振動分析 (2.56x):監測渦輪機軸承的故障頻率。若關心的最高頻率是 10 kHz,取樣率 $= 25.6$ kHz,使用 8 階 Butterworth AAF 截止在 10 kHz。$2.56 = 2 \times 1.28$,其中 1.28 的餘裕讓 AAF 在 Nyquist 處衰減 $> 60$ dB。
- Oversampling ADC:Sigma-Delta ADC 以極高的取樣率(如 $256 \times f_b$)取樣,然後用數位 decimation 濾波器降回目標取樣率。好處:抗混疊濾波器可以很簡單(一階 RC 即可),因為過渡帶寬 $\approx 255 \times f_b$。
互動:混疊 (Aliasing) 完整演示
原始訊號包含三個成分:50 Hz + 120 Hz + 200 Hz。調整取樣率,觀察:(1) 時域中取樣點重建出錯誤的波形 (2) 頻譜中高頻成分折疊到低頻位置 (3) 哪些成分存活、哪些被混疊。
時域:原始 vs 取樣重建
頻域:原始頻譜 vs 取樣後頻譜(含混疊折疊)
重建比對:經過「取樣 → 重建」後的波形 vs 原始波形
紅色 = 重建波形(你實際得到的),灰色虛線 = 原始波形(你想要的),橘色 = 兩者之差(誤差)。無混疊時誤差為零。
SNR 計算方式:
$$\text{SNR (dB)} = 20\log_{10}\frac{\text{RMS}_{\text{original}}}{\text{RMS}_{\text{error}}} = 20\log_{10}\frac{\sqrt{\frac{1}{N}\sum_{i}x_{\text{orig}}^2[i]}}{\sqrt{\frac{1}{N}\sum_{i}(x_{\text{orig}}[i]-x_{\text{recon}}[i])^2}}$$其中 $x_{\text{orig}}$ = 原始訊號,$x_{\text{recon}}$ = 經取樣重建後的訊號。SNR 越高表示重建越忠實;無混疊時 SNR = ∞(誤差為零);混疊越嚴重 SNR 越低。
觀察重點:
- $f_s = 500$ Hz:Nyquist = 250 Hz,三個成分 (50, 120, 200) 全在範圍內 → 無混疊,頻譜正確。
- $f_s = 350$ Hz:Nyquist = 175 Hz,200 Hz 超出 → 折疊到 $|200 - 350| = 150$ Hz。頻譜出現假的 150 Hz 峰。
- $f_s = 200$ Hz:Nyquist = 100 Hz,120 Hz 和 200 Hz 都超出 → 120 折疊到 80 Hz,200 折疊到 0 Hz(DC)。原始訊號被嚴重扭曲。
- 這就是為什麼 ADC 前面一定要放抗混疊濾波器 (AAF)。
陷阱與限制
- 「取樣率夠高就不用抗混疊濾波器」 — 錯。任何訊號加上環境雜訊後,頻寬理論上是無限的。沒有 AAF,高頻雜訊會混疊進來。
- 「sinc 重建可以精確恢復」 — 理論上是,但 sinc 函數無限長,不可實現。實際系統使用有限長的近似(如 Lanczos kernel、多項式內插)。
- 帶通取樣 (Bandpass Sampling):如果訊號是帶通的(如 RF 訊號在 $f_c \pm B/2$),取樣率只需 $f_s \geq 2B$(不是 $2f_c$)。但 $f_s$ 的選擇要避免頻譜副本的邊界重疊,需要更仔細的計算。
- 混疊是不可逆的:一旦發生混疊,沒有任何後處理(數位濾波、AI 等)可以恢復原始訊號。預防是唯一的方法。
References: [1] Shannon, Communication in the Presence of Noise, Proc. IRE, 1949. [2] Nyquist, Certain Topics in Telegraph Transmission Theory, Trans. AIEE, 1928. [3] Oppenheim & Schafer, Discrete-Time Signal Processing, Ch.4.
📝 例題演練 (Worked Example)
一個訊號包含 100Hz、250Hz、500Hz 成分。(a) 最低取樣率?(b) 若 fs=800Hz,有沒有混疊?(c) 若 fs=900Hz,500Hz 成分會混疊到哪裡?
顯示解題過程
(a) fs ≥ 2×500 = 1000 Hz
(b) fs=800 < 1000,500Hz 會混疊。250Hz 不受影響(800>500)。
(c) 500Hz 混疊到 |500−900| = 400 Hz
✅ 快速檢核 (Quick Check)
Q1: CD 的取樣率為什麼是 44.1 kHz?
顯示答案
人耳最高聽到 ~20 kHz,Nyquist 要求 ≥40 kHz。44.1 kHz 提供 10% 餘裕給抗混疊濾波器的 transition band。
Q2: 如果忘了加抗混疊濾波器就取樣,事後能修復嗎?
顯示答案
不能。混疊是不可逆的——高頻已經偽裝成低頻,沒有辦法區分真正的低頻和混疊進來的假低頻。
2.7 轉換關係總覽
FS / CTFT / DTFT / DFT / Z-Transform 的完整關係鏈
為什麼要學這個? 因為 FS、CTFT、DTFT、DFT、Z 轉換不是五個獨立工具,而是同一個故事的五個視角。搞清楚它們之間的關係,你就不會在「該用哪個轉換」這個問題上迷路。
前情提要:我們已經學了 5 種轉換(FS、CTFT、DTFT、DFT、Z)。它們看起來是不同的工具,但其實彼此之間有精確的數學關係——理解這個關係圖,你就不會再搞混。
一句話總結:FS、CTFT、DTFT、DFT、Z 轉換——不是五個獨立工具,而是同一個故事的五個視角。
Learning Objectives
- 理解五種轉換之間的推導關係
- 掌握「取樣 → 週期化」和「截斷 → 離散化」的對偶原理
- 根據訊號特性選擇正確的轉換工具
關係鏈:同一棵樹的五個枝幹
直覺先行:所有傅立葉轉換都在做同一件事——把訊號分解成頻率成分。差別在於訊號是連續/離散、週期/非週期。兩個核心操作連接它們:
取樣 (Sampling) → 頻域週期化 (Periodization)
截斷/週期化 (Truncation) → 頻域離散化 (Discretization)
轉換關係圖
| FS 連續週期 → 離散 |
$\xrightarrow{T \to \infty}$ 去週期化 |
CTFT 連續非週期 → 連續 |
||
| $\downarrow$ 取樣 頻域週期化 |
||||
| DTFT 離散非週期 → 連續週期 |
$\xleftarrow{z = e^{j\omega}}$ 單位圓取樣 |
Z-Transform 離散 → $z$-平面 |
||
| $\downarrow$ 截斷 $N$ 點 頻域離散化 |
||||
| DFT 離散週期 → 離散週期 |
完整比較表
| 轉換 | 時域 | 頻域 | 連結操作 | 公式 |
|---|---|---|---|---|
| FS | 連續、週期 $T$ | 離散($c_n$) | — | $c_n = \frac{1}{T}\int_0^T f(t)e^{-jn\omega_0 t}dt$ |
| CTFT | 連續、非週期 | 連續 | $T\to\infty$(FS → CTFT) | $F(\omega) = \int f(t)e^{-j\omega t}dt$ |
| DTFT | 離散、非週期 | 連續、$2\pi$-週期 | 取樣(CTFT → DTFT) | $X(e^{j\omega}) = \sum x[n]e^{-j\omega n}$ |
| DFT | 離散、$N$-週期 | 離散、$N$-週期 | 截斷 $N$ 點(DTFT → DFT) | $X[k] = \sum_{n=0}^{N-1}x[n]e^{-j2\pi kn/N}$ |
| Z-Transform | 離散 | $z$-平面函數 | $z=e^{j\omega}$ → DTFT | $X(z) = \sum x[n]z^{-n}$ |
核心洞察:對偶原理
取樣 ↔ 週期化:時域的取樣(乘以脈衝串)導致頻域的週期化(頻譜重複)。反過來也成立:時域的週期化導致頻域的離散化(變成離散的 $c_n$)。
截斷 ↔ 離散化:時域的截斷(乘以有限窗)等效於頻域的卷積(與窗的 FT 卷積,造成洩漏)。同時,有限長度 $N$ 的序列的 DTFT 可以用 $N$ 個等距樣本完全表示——這就是 DFT。
DFT 是「雙重操作」的結果:既取樣(時域離散)又截斷(時域有限長),所以時域和頻域都是離散且週期的。這就是為什麼 DFT 是電腦能計算的唯一版本——因為電腦只能處理有限個離散數字。
怎麼用:選擇正確的轉換工具
| 你的訊號/需求 | 使用 | 理由 |
|---|---|---|
| 連續週期訊號(如 60 Hz 電源) | FS | 離散諧波結構,THD 分析 |
| 連續暫態訊號(理論分析) | CTFT | 性質推導、濾波器理論 |
| 離散訊號的理論頻譜 | DTFT | FIR/IIR 頻率響應分析 |
| 離散有限長資料(實際計算) | DFT/FFT | 電腦能算的唯一版本 |
| 分析系統穩定性 / 極零點 | Z-Transform | ROC 判穩定,極點判共振 |
| 連續系統的 $s$-域分析 | Laplace | Z 的連續對應物 |
實務經驗法則:
- 做理論推導 → CTFT / DTFT / Z(紙筆工具)
- 寫程式算頻譜 → DFT/FFT(唯一可計算的版本)
- 分析濾波器穩定性 → Z 轉換的極零點
- 理解 FFT 結果的物理意義 → 回到 DTFT 和 CTFT 的理論
轉換之間的「翻譯」實例
以下展示同一個物理問題如何在不同轉換間切換:
場景:設計一個數位低通濾波器
- CTFT:定義理想低通 $H(\omega) = \text{rect}(\omega/2\omega_c)$,逆 FT 得 $h(t) = \text{sinc}$
- 取樣:$h[n] = h(nT_s) = \text{sinc}(nT_s \omega_c/\pi)$ → 進入離散世界(DTFT)
- 截斷:$h_w[n] = h[n] \cdot w[n]$(視窗),長度 $M$ → 有限長 FIR(DFT)
- Z 轉換:$H(z) = \sum_{n=0}^{M-1}h_w[n]z^{-n}$(全部零點,無極點 → FIR 永遠穩定)
- FFT:用 $N$-point FFT 計算 $H(e^{j2\pi k/N})$ 來驗證頻率響應
常見混淆
- DTFT $\neq$ DFT:DTFT 是連續頻率函數(不可直接計算),DFT 是它的 $N$ 點取樣。
- Z 轉換 $\neq$ DTFT:DTFT 是 Z 轉換在單位圓上的特例。Z 轉換的 ROC 資訊在 DTFT 中「看不到」。
- FS $\neq$ DFT:FS 是連續時間的理論,DFT 是離散有限長的計算。但對週期訊號取整數週期的 DFT,結果等同於 FS 係數乘以 $N$。
References: [1] Oppenheim & Willsky, Signals and Systems, Ch.3-5. [2] Oppenheim & Schafer, Discrete-Time Signal Processing, Ch.2-8. [3] Haykin & Van Veen, Signals and Systems.
互動:轉換關係圖
點擊節點或將滑鼠移至節點上方,查看各轉換之間的推導關係。
3.1 週期圖與視窗函數 (Periodogram & Window Functions)
頻譜洩漏的根本原因與視窗的工程取捨
為什麼要學這個? 因為不加窗就做 FFT,等於戴了一副嚴重散光的眼鏡看頻譜——旁邊的洩漏會把微弱訊號完全淹沒。正確使用視窗是做出可信頻譜分析的第一步。
前情提要:Part II 給了我們轉換工具。但直接把訊號丟進 FFT 算頻譜(periodogram),結果會因為截斷效應而嚴重失真。視窗函數就是解決這個問題的第一步。
Learning Objectives
- 推導截斷 = 頻域卷積,理解洩漏的成因
- 比較 Rectangular / Hann / Hamming / Blackman / Kaiser 視窗的性能指標
- 根據解析度 vs 動態範圍需求選擇最佳視窗
- 掌握週期圖作為 PSD 估計器的統計性質
一句話理解
週期圖就是「把訊號丟進 FFT 算平方」,簡單但粗暴——視窗函數是讓它不那麼粗暴的關鍵。
痛點:頻譜裡的「鬼東西」
你用 FFT 分析一段訊號,明明只有一個 100 Hz 的正弦波,頻譜卻在 80、90、110、120 Hz 旁邊長出一堆鬼東西——這就是頻譜洩漏 (Spectral Leakage)。
更嚴重的場景:你想在一個強烈的 1 kHz 訊號旁邊偵測一個微弱的 1.05 kHz 訊號(比如諧波失真分析),但洩漏的旁瓣把微弱訊號完全淹沒了。這不是你的硬體有問題,而是數學上的必然後果。
由來
Arthur Schuster (1898) 首先提出 periodogram 的概念,用於分析太陽黑子活動的週期性。他把觀測資料直接做傅立葉分析,計算各頻率的「強度」——這個想法簡單直覺,但統計性質很差(直到 20 世紀中葉才被完全理解)。
視窗函數的系統研究則要到 Fredric J. Harris (1978) 的經典論文 "On the Use of Windows for Harmonic Analysis with the Discrete Fourier Transform"。Harris 在這篇論文中系統比較了超過 20 種視窗函數的頻域特性,建立了視窗選擇的工程準則。這篇論文至今仍是該領域被引用最多的文獻之一(Google Scholar 引用數超過 10,000)。
Jim Kaiser 在 Bell Labs 開發了以 Bessel 函數為基礎的 Kaiser 視窗,它的獨特之處在於只用一個參數 $\beta$ 就能連續調節主瓣寬度和旁瓣衰減之間的取捨——這讓視窗選擇從「在一堆固定視窗中挑一個」變成「轉一個旋鈕到你要的平衡點」。
原理:為什麼截斷會洩漏?
直覺:你只觀測了一段有限時間的訊號。從數學上看,這等於把一個無限長的訊號乘以一個矩形函數(有限時間窗內為 1,其餘為 0)。時域的乘法 = 頻域的卷積。矩形函數的頻譜是 sinc 函數(有無窮多的旁瓣),所以原本的乾淨譜線被 sinc 的旁瓣「塗抹」開來——這就是洩漏。
截斷 = 乘矩形窗 = 頻域卷積 sinc
$$x_w[n] = x[n] \cdot w[n] \;\longleftrightarrow\; X_w(e^{j\omega}) = \frac{1}{2\pi}\,X(e^{j\omega}) * W(e^{j\omega})$$矩形窗的 DTFT 是 Dirichlet kernel(離散 sinc):
它的第一旁瓣只比主瓣低 -13 dB。這意味著:如果有一個強訊號,它在旁邊頻率洩漏出的能量只比自己低 13 dB——這會完全淹沒任何比它弱 13 dB 以上的鄰近訊號。
展開:為什麼其他視窗能改善旁瓣?
所有視窗的核心設計思路相同:犧牲主瓣寬度來換取旁瓣衰減。
矩形窗的問題在於它在邊緣突然截斷為零,造成頻域的 Gibbs 現象(旁瓣衰減慢)。如果讓窗函數在邊緣平滑地漸變為零(如 Hann 窗的餘弦形狀),頻域的旁瓣就會快速衰減。
數學上,Hann 窗可以表示為三個矩形窗的線性組合:
$$w_{\text{Hann}}[n] = 0.5\,w_{\text{rect}}[n] - 0.25\,w_{\text{rect}}[n]\,e^{j2\pi n/(N-1)} - 0.25\,w_{\text{rect}}[n]\,e^{-j2\pi n/(N-1)}$$因此 Hann 窗的 DTFT 是三個移位 Dirichlet kernel 的疊加。在旁瓣區域,這三項近似互相抵消(destructive interference),使旁瓣快速下降。
代價是主瓣從 2 bins 加寬到 4 bins——你能分辨的最近兩個頻率之間的距離加倍了。
更一般地,窗函數在邊緣處導數的連續階數越高,旁瓣衰減的速率越快:
$$\text{邊緣處 } w^{(k)}(0) = w^{(k)}(N-1) = 0 \text{ 對 } k = 0, 1, \ldots, m \implies \text{旁瓣} \sim O(\omega^{-(m+2)})$$$\blacksquare$
週期圖 (Periodogram) 的定義與統計性質
最簡單的頻譜估計:直接取加窗 DFT 的平方模。
展開:週期圖是不一致估計的證明
週期圖的期望值:
$$E[\hat{S}(\omega)] = \frac{1}{2\pi}S(\omega) * |W(\omega)|^2$$這是真正 PSD $S(\omega)$ 與視窗功率譜的卷積——有 bias,但當 $N \to \infty$ 時 $|W|^2$ 趨近 delta,bias → 0。
然而,變異數是問題所在。可以證明(利用 Bartlett 公式):
$$\text{Var}[\hat{S}(\omega)] \approx S^2(\omega) \quad (\text{不隨 } N \text{ 減少!})$$即相對標準差 $\approx 100\%$,不論 $N$ 多大。增加 $N$ 只是讓你看到更細的頻率格點上的同等劇烈的隨機波動。
這就是為什麼週期圖是「不一致估計 (inconsistent estimator)」——需要 Welch 法或 Multitaper 法來降低變異數。$\;\blacksquare$
視窗函數公式
Rectangular(矩形窗):$w[n] = 1, \quad 0 \leq n \leq N-1$
Hann:$w[n] = 0.5\!\left(1 - \cos\frac{2\pi n}{N-1}\right)$
Hamming:$w[n] = 0.54 - 0.46\cos\frac{2\pi n}{N-1}$
Blackman:$w[n] = 0.42 - 0.5\cos\frac{2\pi n}{N-1} + 0.08\cos\frac{4\pi n}{N-1}$
Blackman-Harris (4-term):$w[n] = 0.35875 - 0.48829\cos\frac{2\pi n}{N-1} + 0.14128\cos\frac{4\pi n}{N-1} - 0.01168\cos\frac{6\pi n}{N-1}$
Flat-top:係數設計使主瓣頂部平坦,犧牲頻率解析度換取振幅精度 ($< 0.01$ dB 誤差)
Kaiser:$w[n] = \frac{I_0\!\left(\beta\sqrt{1 - \left(\frac{2n}{N-1} - 1\right)^2}\right)}{I_0(\beta)}$,其中 $I_0$ 為修正 Bessel 函數
五種視窗比較表
| 視窗 | 主瓣寬度 (bins) | 最高旁瓣 (dB) | 旁瓣衰減率 | ENBW (bins) | 典型用途 |
|---|---|---|---|---|---|
| Rectangular | 2 | -13 | -6 dB/oct | 1.00 | 暫態分析、頻率解析度優先 |
| Hann | 4 | -31 | -18 dB/oct | 1.50 | 通用首選、音訊分析 |
| Hamming | 4 | -42 | -6 dB/oct | 1.36 | 語音分析、FIR 設計 |
| Blackman | 6 | -58 | -18 dB/oct | 1.73 | 高動態範圍、雷達旁瓣抑制 |
| Kaiser ($\beta$=6) | ~5 | -46 | 可調 | ~1.5 | 可調式取捨、濾波器設計 |
| Flat-top | ~10 | -44 | -6 dB/oct | 3.77 | 校準、振幅精確量測 |
ENBW (Equivalent Noise Bandwidth):等效雜訊頻寬,表示視窗讓多少雜訊功率通過。ENBW = 1.0 是理想的(只有矩形窗達到),其他視窗 ENBW > 1 意味著雜訊功率被放大。量測 PSD 時需要用 ENBW 做校正。
怎麼用:視窗選擇決策樹
你的需求是什麼?
- 需要分辨兩個接近頻率? → Rectangular 或 Kaiser($\beta$ 小,如 2~4)
- 需要看強訊號旁邊的微弱訊號(高動態範圍)? → Blackman 或 Kaiser($\beta$ 大,如 10~14)或 Blackman-Harris
- 需要精確量測頻率成分的振幅? → Flat-top
- 不確定 / 通用場景? → Hann(幾乎永遠是安全的選擇)
- 想要連續可調? → Kaiser(調 $\beta$ 從 0 到 20 連續覆蓋所有取捨)
Kaiser $\beta$ 經驗值:$\beta = 0$ → 矩形窗;$\beta \approx 5$ → 近似 Hamming;$\beta \approx 6$ → 近似 Hann;$\beta \approx 8.5$ → 近似 Blackman;$\beta > 10$ → 超越 Blackman 的動態範圍。
Python 範例:比較五種視窗函數
應用場景
- THD (Total Harmonic Distortion) 分析:量測音頻放大器的諧波失真,基波 1 kHz,需要看到比基波低 90 dB 的二次、三次諧波。使用 Hann 或 Flat-top 窗(Flat-top 振幅誤差 < 0.01 dB,但如果頻率解析度夠用的話首選 Flat-top)。業界標準:AES17 規範要求 THD+N 量測使用 Flat-top 窗。
- 音訊頻譜分析(DAW / 混音台):即時顯示音樂訊號的頻譜。通常使用 Hann 窗,NFFT = 4096~8192(在 44.1 kHz 取樣率下,頻率解析度約 5~10 Hz)。Hann 窗的旁瓣足夠低(-31 dB),不會在顯示上造成嚴重的假影。
- 雷達旁瓣抑制:雷達接收到的回波中,強目標(如大型船舶)的旁瓣會遮蔽附近的弱目標(如小型快艇)。使用 Blackman-Harris 4-term 窗(旁瓣 -92 dB)或 Dolph-Chebyshev 窗(等旁瓣設計)。代價是主瓣加寬(距離解析度下降約 50%),但在動態範圍要求極高的場景中是值得的。
陷阱與限制
- 忘記加窗 = 矩形窗 = -13 dB 旁瓣:這是最常見的錯誤。很多初學者直接用
np.fft.fft(x)不加窗,然後疑惑為什麼頻譜這麼「髒」。只要你的訊號不恰好是整數個週期被截取,就一定會有洩漏。 - Flat-top 窗振幅精確但頻率解析度差:主瓣寬度約 10 bins,比 Hann 寬 2.5 倍。兩個接近的頻率會糊在一起。只適合頻率成分已知且間距足夠的場景(如校準量測)。
- 窗函數會改變有效資料量:邊緣的資料被窗函數壓低了權重。有效資料長度 ≈ ENBW × $N / f_s$ 秒。重疊處理可以部分補償這個損失。
- coherent gain 校正:加窗後必須除以窗的平均值(coherent gain = $\frac{1}{N}\sum w[n]$)才能正確讀取單一頻率成分的振幅。忘記校正會讓振幅讀數偏低。
什麼時候不該用週期圖?
- 需要穩定的 PSD 估計:週期圖的變異數不會隨資料量下降 → 改用 Welch 法(3.2 節)或 Multitaper
- 資料極短(幾十點)且需要高解析度:FFT 解析度 = $f_s/N$ 不夠用 → 改用 AR 參數模型(3.3 節)
- 需要分辨極接近的正弦波(超解析度):即使加窗也無法突破 FFT 解析度限制 → 改用 MUSIC / ESPRIT(3.4 節)
- 只關心某個窄頻段的細節:全範圍 FFT 浪費計算資源 → 改用 Chirp-Z 轉換(3.5 節)
互動:視窗頻譜比較
選擇視窗函數,觀察時域形狀和頻域響應(dB 尺度)。注意主瓣寬度和旁瓣高度的取捨。
互動:洩漏與分辨能力
兩個接近頻率的正弦波,切換視窗即時比較 FFT。當兩個頻率太接近時,某些視窗的主瓣太寬,會把兩個峰合併成一個。
References: [1] Schuster, On the Investigation of Hidden Periodicities with Application to a Supposed 26 Day Period of Meteorological Phenomena, Terr. Magn., 1898. [2] Harris, On the Use of Windows for Harmonic Analysis with the DFT, Proc. IEEE, 1978. [3] Kaiser & Schafer, On the Use of the I₀-Sinh Window for Spectrum Analysis, IEEE Trans. ASSP, 1980. [4] Oppenheim & Schafer, Discrete-Time Signal Processing, Ch.10.
📝 例題演練 (Worked Example)
你要分析兩個正弦波:100Hz(0dB)和 108Hz(-35dB)。取樣率 1000Hz,觀測 0.256 秒(256點)。不加窗能分辨嗎?加 Hann 窗呢?加 Blackman 窗呢?
顯示解題過程
Δf = 1000/256 = 3.91 Hz。兩頻率間距 8Hz > Δf,理論上可分辨。
但弱訊號只有 -35dB:
(1) 矩形窗旁瓣 -13dB → 100Hz 的洩漏在 108Hz 處約 -13dB,遠強於 -35dB 的真實訊號 → 看不到
(2) Hann 窗旁瓣 -31dB → 洩漏 -31dB,仍強於 -35dB → 勉強
(3) Blackman 窗旁瓣 -58dB → 洩漏 -58dB,遠低於 -35dB → 清楚看到
✅ 快速檢核 (Quick Check)
Q1: 你需要偵測一個強訊號旁邊的微弱訊號(差 40dB),應該用什麼視窗?
顯示答案
Blackman 窗(旁瓣 -58dB)或 Kaiser(β調大)。Hann 窗旁瓣只有 -31dB,不夠。
Q2: 不加窗做 FFT 等於什麼?
顯示答案
等於用矩形窗,旁瓣只有 -13 dB——幾乎一定會有嚴重的頻譜洩漏。
3.2 Welch 法與 Multitaper 頻譜估計
降低 PSD 估計變異數的兩大方法
為什麼要學這個? 因為單次 FFT 算出來的頻譜每次都不一樣(高變異數),不能直接拿去設定警報閾值或做統計比較。Welch 法讓結果穩定到可以做工程決策。
前情提要:3.1 的視窗解決了洩漏問題,但 periodogram 還有另一個致命缺點:變異數太大(每次算都不一樣)。怎麼讓頻譜估計穩定下來?
Learning Objectives
- 理解 Welch 法:分段加窗平均的 bias-variance 取捨
- 掌握段長、重疊率、視窗的參數選擇流程
- 認識 DPSS (Slepian) 序列與 Multitaper 方法
- 比較 Welch 與 Multitaper 的適用場景
一句話理解
Welch 法的核心思想超簡單:把一段很長的資料切成好幾段,各自算頻譜再平均,讓結果穩定下來。
痛點:不穩定的頻譜
你用 periodogram 計算一段振動訊號的 PSD,每次結果都長得不一樣——波動劇烈,看起來像噪聲而不是乾淨的頻譜。你沒辦法拿這種不穩定的結果去設定機器監測的警報閾值,也沒辦法可靠地比較兩次量測之間的差異。
這是因為 periodogram 是不一致估計 (inconsistent estimator)——不管你收多長的資料,估計值的相對波動始終約 100%。你需要一種方法來「平滑」這些波動。
由來
M.S. Bartlett (1948) 最先提出分段平均的想法:把資料分成 $K$ 段不重疊的段,各自算 periodogram 再取平均。這簡單地把變異數降到了 $\approx 1/K$。
Peter Welch (1967) 在 IBM 將 Bartlett 方法做了兩個關鍵改進:(1) 允許段與段之間重疊 (overlap),從同樣長度的資料中擠出更多段;(2) 每段加視窗函數(而不是矩形窗),降低洩漏。這個方法因為實作簡單、效果好,成為工程界計算 PSD 的事實標準。Python 的 scipy.signal.welch() 和 MATLAB 的 pwelch() 都以此為基礎。
David Thomson (1982) 在 Bell Labs 提出了一個完全不同的思路——Multitaper 方法:不切段,而是用多個正交的視窗(DPSS / Slepian 序列)對同一段資料做多次加窗 FFT,再平均。這樣不需要犧牲頻率解析度(因為不切段),是短資料 PSD 估計的 gold standard。
原理:Welch 法
直覺:一張照片可能有噪點,但 $K$ 張照片平均後就乾淨了。Welch 法對頻譜做同樣的事——把資料切段,每段算一張「頻譜照片」,然後平均。
Welch PSD 估計
$$\hat{S}_W(f) = \frac{1}{K}\sum_{i=0}^{K-1}\frac{1}{LU}\left|\sum_{n=0}^{L-1}w[n]\,x[n+iD]\,e^{-j2\pi fn/f_s}\right|^2$$$L$:段長,$D$:步進($D = L - \text{overlap}$),$K$:段數,$U = \frac{1}{L}\sum|w[n]|^2$(窗功率歸一化)
核心取捨(Bias-Variance Tradeoff):
- 段數 $K$ 越多 → 變異數越低($\approx 1/K$)→ 頻譜越穩定
- 但固定總資料量 $N$ 時,$K$ 越多 → 每段越短($L$ 越小)→ 頻率解析度 $\Delta f = f_s/L$ 越差
- 這是無法迴避的:頻率解析度 × 穩定性 = 固定的(由總資料量 $N$ 決定)
展開:Welch 法的等效自由度推導
每段 periodogram 近似服從 $\chi^2_2$ 分佈(2 個自由度)。$K$ 段平均後:
$$\hat{S}_W(f) \sim \frac{S(f)}{K_{\text{eff}}}\,\chi^2_{2K_{\text{eff}}}$$其中 $K_{\text{eff}}$ 是等效獨立段數。若段之間完全不重疊(Bartlett),$K_{\text{eff}} = K$。若重疊 50% + Hann 窗:
$$K_{\text{eff}} \approx \frac{K}{1 + 2\sum_{k=1}^{K-1}(1-k/K)\rho_k^2}$$其中 $\rho_k$ 為第 $k$ 對相鄰段的加窗資料的相關係數。對 Hann 窗 50% 重疊,$\rho_1 \approx 0.167$,更遠的段幾乎不相關。
經驗結論:Hann + 50% overlap 的等效自由度約為不重疊版本的 1.6 倍——從同樣的資料中多擠出 60% 的統計獨立性。
歸一化標準差(相對誤差):$\epsilon = 1/\sqrt{K_{\text{eff}}}$。工程經驗:$\epsilon < 0.1$(即 $K_{\text{eff}} > 100$)才算「穩定」。$\;\blacksquare$
怎麼用:四步驟參數選擇
Step 1:決定頻率解析度 $\Delta f$
段長 $L = f_s / \Delta f$。例如:$f_s = 10\,\text{kHz}$,需要 $\Delta f = 1\,\text{Hz}$ → $L = 10000$ 點。
Step 2:選擇重疊率
Hann 窗:50% overlap($D = L/2$)。Hamming 窗:67% overlap($D = L/3$)。經驗法則:重疊率 = $1 - 1/\alpha$,其中 $\alpha$ 為 ENBW。
Step 3:選擇視窗
通常 Hann。如需更高動態範圍,改用 Blackman。
Step 4:計算段數與穩定性
$K = \lfloor(N - L)/(L - \text{overlap}) + 1\rfloor$。等效自由度 $\nu \approx 2K \times (\text{overlap correction})$。歸一化誤差 $\epsilon \approx 1/\sqrt{K_{\text{eff}}}$。
具體範例:振動監測
- 加速度計取樣率 $f_s = 10\,\text{kHz}$
- 想要頻率解析度 $\Delta f = 1\,\text{Hz}$ → $L = 10000$ 點(1 秒)
- Hann 窗,50% 重疊 → $D = 5000$
- 收集 10 秒資料($N = 100000$)
- 段數 $K = (100000 - 10000)/5000 + 1 = 19$ 段
- 等效自由度 $\nu \approx 2 \times 19 \times 0.85 \approx 32$(歸一化誤差 $\approx 18\%$)
- 若需要更穩定($\epsilon < 10\%$),收集 30 秒資料 → $K \approx 59$, $\epsilon \approx 10\%$
Multitaper 法 (Thomson, 1982)
直覺:Welch 法把資料切短來換多段平均,犧牲了解析度。能不能用全部資料來保留解析度,但還是做多次平均?可以——用不同的視窗對同一段資料做 FFT。但這些視窗必須是正交的,否則結果不獨立,平均沒效果。
DPSS (Discrete Prolate Spheroidal Sequences / Slepian sequences) 正是這樣的正交視窗族:它們是「在給定頻寬 $NW/N$ 內能量集中度最高」的序列。前 $K \approx 2NW$ 個 DPSS 幾乎完美正交,且能量幾乎全部集中在目標頻寬內。
$\{v^{(k)}\}_{k=0}^{K-1}$:前 $K$ 個 DPSS,$NW$:半頻寬參數(常用 $NW = 3$ 或 4)
| 特性 | Welch | Multitaper |
|---|---|---|
| 降低變異數的方式 | 分段平均 | 多視窗平均(不分段) |
| 頻率解析度 | $f_s/L$($L$ = 段長 < $N$) | $2NW \cdot f_s/N$($\approx f_s/N$ 等級) |
| 等效自由度 | $\approx 2K$ | $\approx 2K$($K \approx 2NW$) |
| 最佳場景 | 長資料 | 短資料(保留全解析度) |
| 計算成本 | $K$ 次 FFT($L$ 點) | $K$ 次 FFT($N$ 點)+ DPSS 計算 |
| 實作 | scipy.signal.welch() | spectrum.pmtm() / nitime |
Gold Standard:Multitaper 不需分段(保留全部頻率解析度),但仍能降低變異數。對於短資料(幾百到幾千點)的 PSD 估計,它是公認最優的方法。代價:需要預先計算 DPSS(但只需做一次),且 $K$ 受限於 $\approx 2NW$(通常 5~8),無法像 Welch 那樣有幾十甚至上百段。
應用場景
- 振動 PSD 趨勢監測(Welch):風力發電機齒輪箱每小時取一段 60 秒加速度資料($f_s = 25.6\,\text{kHz}$),用 Welch 法($L = 25600$, 50% overlap, Hann)計算穩定的 PSD。每天比較 PSD 的特定頻段能量,趨勢上升 → 提前預警故障。
- 通訊系統雜訊底線量測(Welch):量測 RF 接收機的雜訊功率譜密度 $N_0$。需要非常穩定的 PSD 估計($\epsilon < 5\%$),通常用長時間擷取 + Welch 法,段數 $K > 400$。
- 神經科學 LFP/EEG 功率譜(Multitaper):腦電訊號的 trial 通常只有 1-2 秒。用 Multitaper($NW = 4$, $K = 7$ tapers)在保留 $\sim 2\,\text{Hz}$ 解析度的同時,得到穩定的 PSD 估計。這是 neuroscience 社群的標準做法。
陷阱與限制
- 段太短 → 頻率模糊:如果 $\Delta f = f_s/L = 100\,\text{Hz}$,但你要看的兩個頻率只差 50 Hz,它們會糊在一起。永遠先確認 $L$ 對應的 $\Delta f$ 是否滿足需求。
- 段數太少 → 仍然不穩定:$K = 3$ 段只有 6 個自由度,PSD 估計仍然很波動。經驗最低:$K \geq 8$(16 自由度)才開始有用。
- 重疊太多 → 段之間不獨立:90% 重疊看起來段數很多,但相鄰段的資料幾乎完全相同,平均效果大打折扣。Hann + 50% 是最佳平衡點。
- Multitaper 的 $NW$ 選擇:$NW$ 太大 → 解析度差(等效頻寬 $= 2NW \cdot f_s/N$);$NW$ 太小 → DPSS 不夠好(高階 taper 能量洩漏)。通常 $NW = 3$ 或 4。
什麼時候不該用?
- 訊號是非平穩的(non-stationary):Welch 假設每段內訊號統計特性相同。如果訊號頻率隨時間變化(如 chirp),Welch 會把不同時刻的頻譜平均在一起 → 改用 STFT / spectrogram(5.1 節)
- 只需要偵測離散的正弦波頻率(不需要連續 PSD):→ 改用 MUSIC / ESPRIT(3.4 節)更精確
- 資料極短且知道訊號模型(如語音):→ 改用 AR 參數模型(3.3 節)
References: [1] Bartlett, Smoothing Periodograms from Time-Series with Continuous Spectra, Nature, 1948. [2] Welch, The Use of FFT for the Estimation of Power Spectra, IEEE Trans. Audio Electroacoustics, 1967. [3] Thomson, Spectrum Estimation and Harmonic Analysis, Proc. IEEE, 1982. [4] Percival & Walden, Spectral Analysis for Physical Applications, Cambridge, 1993.
📝 例題演練 (Worked Example)
振動監測:fs=10kHz,想要 Δf=2Hz 的 PSD。用 Hann 窗 50% 重疊。(a) 段長?(b) 10 秒資料有幾段?(c) 等效自由度?
顯示解題過程
(a) L = fs/Δf = 10000/2 = 5000 點
(b) hop = 5000×0.5 = 2500,K = floor((100000−5000)/2500)+1 = 39 段
(c) Hann 50% overlap 的等效自由度 ≈ 2×39×(8/3) ≈ 不完全獨立,有效段數約 39×0.67 ≈ 26,DOF ≈ 52
✅ 快速檢核 (Quick Check)
Q1: Welch 法段長 L=1000、取樣率 fs=10kHz,頻率解析度是多少?
顯示答案
Δf = fs/L = 10000/1000 = 10 Hz。
Q2: 段數加倍(K→2K),PSD 估計的變異數大約變成多少倍?
顯示答案
約減半(~1/K),但前提是各段之間近似獨立。
互動:Welch 法 vs 單次 FFT
同一段雜訊訊號(含兩個正弦波),比較 Periodogram 的「鋸齒狀」vs Welch 的「平滑」。每次點擊會重新產生雜訊。
3.3 參數式頻譜估計 (Parametric Spectral Estimation — AR Model)
用模型擬合取代直接 FFT — 短資料的高解析度頻譜
為什麼要學這個? 因為資料很短時(只有幾十個取樣點),FFT 的頻率解析度太差。AR 模型能從短資料中擠出比 FFT 更高的解析度——這在語音分析(每 20ms 一幀)和生醫訊號中特別重要。
前情提要:3.2 的 Welch 法靠分段平均降低變異數,但犧牲了頻率解析度。如果資料很短,有沒有辦法不犧牲解析度?
Learning Objectives
- 建立 AR(p) 模型與線性預測 (Linear Prediction) 的等價關係
- 推導 Yule-Walker 方程式與 Levinson-Durbin 遞迴
- 理解 Burg 演算法的格型 (Lattice) 結構
- 掌握 AR 階數選擇的 AIC/BIC 準則
- 比較 AR 頻譜與 periodogram 的解析度差異
一句話理解
與其直接算 FFT,不如先假設訊號是某種模型(AR 模型)產生的,用模型來推算頻譜——短資料也能得到平滑高解析度的結果。
痛點:短資料的解析度瓶頸
你的資料只有幾十個取樣點(比如 20 ms 的語音片段在 8 kHz 取樣率下只有 160 點),FFT 的頻率解析度 $\Delta f = f_s/N = 8000/160 = 50\,\text{Hz}$。如果有兩個語音共振峰(formant)分別在 500 Hz 和 530 Hz,它們之間只差 30 Hz,遠小於 50 Hz 的解析度——FFT 只會顯示一個模糊的寬峰,完全分不開。
你沒辦法收集更長的資料(語音是非平穩的,超過 20-30 ms 統計特性就變了),零填充也只是插值不是真正增加解析度。你需要一個能從短資料中「擠出」更多頻譜資訊的方法。
由來
AR 模型的故事可以追溯到 G. Udny Yule (1927) 和 Gilbert Walker (1931),他們為了分析太陽黑子的準週期性和印度季風的週期模式,建立了自迴歸模型的估計理論(Yule-Walker equations)。
Norman Levinson (1947) 和後來的 James Durbin (1960) 發展了高效的遞迴解法(Levinson-Durbin recursion),把計算複雜度從 $O(p^3)$(直接解線性方程組)降到 $O(p^2)$。
真正把 AR 模型帶入頻譜估計的是 John Parker Burg (1967),他在 Stanford 大學的博士論文中提出了 Maximum Entropy Method (MEM)。Burg 的洞察是:給定有限的自相關數據,在所有一致的 PSD 中,「資訊熵最大」的那個 PSD 就是 AR 模型對應的 PSD。這給了 AR 頻譜估計一個資訊理論的基礎。Burg 的博士導師正是 Robert White,他的研究動機來自地球物理學中的短資料頻譜分析——地震勘探的資料往往很短,FFT 解析度不夠。
在語音處理領域,AR 模型以 LPC (Linear Predictive Coding) 的名字廣為人知。Itakura (1968) 和 Atal & Hanauer (1971) 將 AR 模型用於語音分析和編碼,開啟了數位語音通訊的時代。早期的 GSM 手機語音編碼(RPE-LTP)和 CELP 編碼的核心就是 AR 模型。
原理:AR(p) 模型
直覺:AR 模型假設訊號的每個值可以由過去 $p$ 個值的線性組合加上白雜訊來預測。如果預測得好,剩下的殘差就是白雜訊。把這個線性預測器反過來看,就是一個「全極點濾波器」,白雜訊通過它產生我們觀測到的訊號。每一對共軛極點在頻譜上產生一個峰值。
AR(p) 差分方程
$$x[n] = -\sum_{k=1}^{p}a_k\,x[n-k] + e[n], \quad e[n] \sim \text{WN}(0, \sigma^2)$$等價表示:$A(z)\,X(z) = E(z)$,其中 $A(z) = 1 + a_1 z^{-1} + \cdots + a_p z^{-p}$
AR 模型的 PSD:
由於分母是多項式的模平方,$S_{AR}(f)$ 只有峰值(對應極點靠近單位圓的位置),沒有零點(谷值)。每對共軛極點 $r\,e^{\pm j\theta}$ 在 $f = \theta f_s/(2\pi)$ 處產生一個峰,極點半徑 $r$ 越接近 1,峰越尖。
Yule-Walker 方程式
展開推導
將 AR 方程式兩邊乘以 $x^*[n-m]$ 取期望值:
$$E[x[n]\,x^*[n-m]] = -\sum_{k=1}^{p}a_k\,E[x[n-k]\,x^*[n-m]] + E[e[n]\,x^*[n-m]]$$左邊 = $r_{xx}[m]$(自相關函數)。右邊第一項 = $-\sum a_k\,r_{xx}[m-k]$。
右邊第二項:因為 $e[n]$ 只與 $x[n], x[n-1], \ldots$ 相關(不與未來值相關),所以:
- $m = 0$:$E[e[n]\,x^*[n]] = \sigma^2$($e[n]$ 是 $x[n]$ 的一部分)
- $m \geq 1$:$E[e[n]\,x^*[n-m]] = 0$($e[n]$ 與過去的 $x$ 不相關)
$m = 1, 2, \ldots, p$ 時,得到 Yule-Walker 線性方程組:
$$\underbrace{\begin{bmatrix}r[0]&r[-1]&\cdots&r[1-p]\\r[1]&r[0]&\cdots&r[2-p]\\\vdots&&\ddots&\vdots\\r[p-1]&\cdots&&r[0]\end{bmatrix}}_{\mathbf{R}\;(\text{Toeplitz})}\begin{bmatrix}a_1\\a_2\\\vdots\\a_p\end{bmatrix} = -\begin{bmatrix}r[1]\\r[2]\\\vdots\\r[p]\end{bmatrix}$$$m = 0$:$\sigma^2 = r[0] + \sum_{k=1}^{p}a_k\,r[-k]$(白雜訊功率)。
$\mathbf{R}$ 是 Toeplitz 正定矩陣(因為是自相關矩陣),可以用 Levinson-Durbin 遞迴在 $O(p^2)$ 內求解(而非一般線性方程組的 $O(p^3)$)。$\;\blacksquare$
Levinson-Durbin 遞迴
展開演算法步驟
從 AR(1) 逐步遞增到 AR(p):
初始化 ($m=0$):$\sigma_0^2 = r[0]$
遞迴 ($m = 1, 2, \ldots, p$):
$$k_m = -\frac{r[m] + \sum_{i=1}^{m-1}a_i^{(m-1)}\,r[m-i]}{\sigma_{m-1}^2} \quad \text{(反射係數 / reflection coefficient)}$$ $$a_m^{(m)} = k_m$$ $$a_i^{(m)} = a_i^{(m-1)} + k_m\,a_{m-i}^{(m-1)}, \quad i = 1, \ldots, m-1$$ $$\sigma_m^2 = (1 - |k_m|^2)\,\sigma_{m-1}^2$$穩定性保證:若 $|k_m| < 1$ 對所有 $m$ 成立(自相關法保證),則 AR 模型穩定(所有極點在單位圓內)。
每一步的 $\sigma_m^2$ 是 AR($m$) 的預測誤差功率——隨 $m$ 增大而遞減。當增加一階後 $\sigma_m^2$ 幾乎不再下降,就是最佳階數的指標。$\;\blacksquare$
階數選擇:AIC 與 BIC 的資訊論基礎
展開推導:AIC 和 BIC 的資訊論基礎
AIC 和 BIC 不是任意公式——它們來自統計學中的「平衡擬合度與模型複雜度」原則。
AIC (Akaike Information Criterion, 1974):
$$\text{AIC}(p) = -2\ln L(\hat{\theta}_p) + 2p$$其中 $L$ 是 likelihood,$p$ 是參數個數。
由來:Akaike 證明這個公式是 KL 散度(Kullback-Leibler divergence)的不偏估計:
$$\text{AIC} \approx 2N \cdot D_{KL}(\text{真實分布} \| \text{模型})$$第一項 $-2\ln L$ 衡量「模型擬合資料的好壞」(越小越好)。
第二項 $2p$ 是「複雜度懲罰」——每多一個參數要付出 2 點代價,防止過擬合。
對 AR(p) 模型且 Gaussian 殘差,可化簡為 $\text{AIC}(p) = N\ln\hat{\sigma}_p^2 + 2p$。
BIC (Bayesian Information Criterion, 1978):
$$\text{BIC}(p) = -2\ln L(\hat{\theta}_p) + p\ln N$$第二項是 $p\ln N$ 而非 $2p$。
由來:BIC 來自貝氏定理 — 它是後驗機率 $P(\text{model}|\text{data})$ 的負對數的近似。
當 $N \to \infty$,$\ln N$ 比 $2$ 大,所以 BIC 給出更強的複雜度懲罰,更傾向選擇簡單模型。
選哪個?
| 準則 | 特性 | 適用 |
|---|---|---|
| AIC | 偏向選複雜模型 | 預測為主時(需要捕捉細節) |
| BIC | 偏向選簡單模型,漸進一致 | 解釋為主時(找真實模型階數) |
怎麼用:四步驟流程
Step 1:選擇 AR 階數 $p$
經驗法則:$p \approx 2 \times$(預期的頻譜峰值數)。例如語音有 4~5 個共振峰 → $p \approx 10$,但加上聲門波和輻射效應 → 通常取 $p = 10$~$14$(8 kHz 取樣率)。
資訊準則:AIC = $N\ln\sigma_p^2 + 2p$;BIC = $N\ln\sigma_p^2 + p\ln N$。選使 AIC/BIC 最小的 $p$。BIC 對高階數懲罰更重,傾向選較低的 $p$。
Step 2:計算自相關 $r[0], r[1], \ldots, r[p]$
$r[k] = \frac{1}{N}\sum_{n=0}^{N-1-k}x[n+k]\,x^*[n]$(biased estimator,但保證 Toeplitz 矩陣正定)。
Step 3:解 Yule-Walker(Levinson-Durbin)得 $\{a_k\}$ 和 $\sigma^2$
或用 Burg 演算法(不需先算自相關,直接從資料估計反射係數,統計性質更好)。
Step 4:計算 PSD
在密集的頻率格點上計算 $S_{AR}(f) = \sigma^2/|A(e^{j2\pi f/f_s})|^2$。
具體範例:語音共振峰分析
- 取樣率 $f_s = 8\,\text{kHz}$,語音幀長 20 ms → $N = 160$ 點
- FFT 解析度 = $8000/160 = 50\,\text{Hz}$(太粗!)
- 選 AR(12):預期 4 共振峰 + 2 額外極點(聲門 + 輻射)= 12
- Levinson-Durbin 求解 → 得到 12 個 AR 係數
- 計算 PSD → 得到平滑的包絡,清楚顯示 $F_1 \approx 500\,\text{Hz}$, $F_2 \approx 1500\,\text{Hz}$, $F_3 \approx 2500\,\text{Hz}$ 等共振峰
- 這就是 LPC (Linear Predictive Coding) 的核心!
應用場景
- 語音分析與編碼 (LPC):LPC = AR 模型。GSM 手機語音編碼(RPE-LTP, 13 kbps)和 CELP 編碼(如 AMR, G.729)的核心是 AR(10)~AR(16) 模型。聲碼器(vocoder)用 AR 模型分離聲門激振和聲道共振,是語音合成和變聲技術的基礎。
- 短資料高解析度頻率估計:地震勘探反射波分析,資料窗只有 50~100 個取樣。AR 模型能在 FFT 解析度不足的情況下分辨多層反射的頻率差異。實際案例:100 點@1 kHz 資料,FFT $\Delta f = 10\,\text{Hz}$,AR(20) 成功分辨 5 Hz 間距的兩個峰。
- 心率變異度 HRV 頻域分析:心電圖 R-R 間隔序列通常只有 300~500 個資料點(5 分鐘 short-term HRV)。AR(16)~AR(20) 模型能清楚分辨 LF(0.04-0.15 Hz)和 HF(0.15-0.4 Hz)成分,比 FFT 平滑且穩定得多。臨床診斷中 LF/HF 比值是自律神經功能的重要指標。
陷阱與限制
- AR 只有峰值,沒有谷值:全極點模型天生只能描述有峰值的頻譜。如果真實頻譜有深谷(零點),AR 模型會需要很高的階數來近似,且效果不好。這種情況應考慮 ARMA 模型(有極點也有零點)。
- 階數太低 → 遺漏峰值:AR(4) 最多只有 2 個頻譜峰值。如果實際有 3 個峰,第三個會被完全忽略。
- 階數太高 → 虛假峰值 (spurious peaks):AR(30) 對 160 點資料會過度擬合,產生不存在的假峰值。始終用 AIC/BIC 來把關。
- 對寬頻雜訊不如 periodogram:AR 模型假設頻譜是平滑的(由少數極點決定),對於寬頻的平坦雜訊底線,它反而不如直接做 periodogram。
- 非平穩訊號:AR 假設訊號平穩。對非平穩訊號,需要在短窗內分段做 AR,或使用 time-varying AR(如 Kalman 濾波 + AR)。
什麼時候不該用?
- 資料很長且只需要一般的 PSD:直接用 Welch 法(3.2 節)更簡單、更穩健、不需選階數
- 頻譜有明顯的零點(深谷):考慮 ARMA 模型(但估計更複雜、收斂性更差)
- 需要超解析度分辨正弦波頻率:AR 模型的解析度仍受限於訊號的 SNR → 改用 MUSIC / ESPRIT(3.4 節)
- 訊號模型不明確:AR 的優勢建立在「假設正確」之上。如果不確定訊號是否適合 AR 描述,用非參數方法(Welch / Multitaper)更安全
互動:AR 頻譜 vs FFT
訊號含兩個正弦波 (100 Hz + 105 Hz) + 雜訊,只有 64 個取樣點。比較 periodogram 與 AR 模型的頻率解析度。調整 AR 階數觀察效果:太低會遺漏峰值,太高會產生虛假峰值。
References: [1] Burg, Maximum Entropy Spectral Analysis, Ph.D. dissertation, Stanford, 1975. [2] Kay & Marple, Spectrum Analysis — A Modern Perspective, Proc. IEEE, 1981. [3] Kay, Modern Spectral Estimation: Theory and Application, Prentice Hall, 1988. [4] Stoica & Moses, Spectral Analysis of Signals, Pearson, 2005. [5] Makhoul, Linear Prediction: A Tutorial Review, Proc. IEEE, 1975.
✅ 快速檢核 (Quick Check)
Q1: AR 模型的階數太低會怎樣?太高呢?
顯示答案
太低:遺漏真正的頻譜峰值。太高:產生虛假的峰值(過擬合)。通常用 AIC/BIC 選擇。
Q2: AR 模型為什麼不能表示頻譜的『谷值』?
顯示答案
因為 AR 是全極點模型。極點只能產生峰值,沒有零點就無法產生谷值。需要 ARMA 模型。
3.4 MUSIC 與 ESPRIT — 子空間頻率估計
超越 Fourier 解析度限制的頻率估計方法
為什麼要學這個? 因為有些場景(雷達目標分辨、陣列天線定位)需要分辨間距比一個 FFT bin 還小的頻率或角度。子空間方法是目前唯一能做到超解析度估計的主流技術。
前情提要:3.3 的 AR 模型比 FFT 解析度好,但仍受限於模型假設。有沒有完全不同的思路,能超越傅立葉的頻率解析度極限?
Learning Objectives
- 理解訊號子空間 (Signal Subspace) 與雜訊子空間 (Noise Subspace) 的分解
- 推導 MUSIC 偽頻譜 (Pseudospectrum) 的原理
- 認識 ESPRIT 的旋轉不變性 (Rotational Invariance)
- 掌握訊號數估計(MDL/AIC)與子空間方法的限制條件
一句話理解
MUSIC 能分辨間距比一個 FFT bin 還小的兩個頻率——它不是更好的 FFT,而是完全不同的思路:把訊號空間和雜訊空間分開。
痛點:FFT 分不開的兩個頻率
你有兩個雷達目標距離太近,對應的都卜勒頻率分別是 100 Hz 和 103 Hz。取樣率 1 kHz,你只擷取了 64 個點的資料。FFT 的一個 frequency bin = $f_s/N = 1000/64 = 15.6\,\text{Hz}$,而兩個頻率只差 3 Hz——FFT 看到的只是一個寬峰,根本分不出是一個目標還是兩個。
零填充到 1024 點呢?那只是把頻率軸做插值,讓 bin 更密,但 sinc 主瓣的寬度不會變——兩個目標仍然糊在同一個主瓣裡。
AR 模型呢?有幫助,但在 SNR 不高時也容易產生偏差或虛假峰值。你需要一個本質上不同的方法。
由來
Ralph O. Schmidt (1979) 在 ESL Inc.(一家國防電子公司)開發了 MUSIC (Multiple Signal Classification) 演算法。他的原始動機是雷達和電子戰中的到達方向估計 (Direction of Arrival, DOA):多個電磁波從不同方向到達天線陣列,如何高精度地估計每個波的到達角?傳統的波束成形 (beamforming) 方法受限於天線陣列的孔徑,解析度有限。Schmidt 的突破在於利用訊號自相關矩陣的子空間結構,繞過了傳統的解析度限制。
MUSIC 論文 (IEEE Trans. AP, 1986) 成為訊號處理領域被引用最多的論文之一(Google Scholar > 12,000 引用)。Schmidt 因此獲得 IEEE 2000 年 Société de l'Industrie Minérale 獎。
Richard Roy 和 Thomas Kailath (1986) 在 Stanford 提出了 ESPRIT (Estimation of Signal Parameters via Rotational Invariance Techniques)。ESPRIT 利用陣列中兩個子陣列之間的旋轉不變性,不需要搜索偽頻譜(MUSIC 需要掃描頻率軸),直接從矩陣的特徵值得到頻率估計。計算更快、不需要精確的陣列校準。
這兩個方法統稱為子空間方法 (Subspace Methods),是現代雷達、通訊、聲納等系統中頻率/方向估計的核心工具。
原理:子空間的直覺
核心直覺:想像你在一個 $M$ 維空間裡。接收到的資料 = 訊號 + 雜訊。如果有 $p$ 個正弦波訊號,它們「住」在一個 $p$ 維的子空間裡(訊號子空間)。雜訊則散佈在整個 $M$ 維空間中。
自相關矩陣的特徵值分解能幫你把這兩個空間分開:$p$ 個大特徵值對應的特徵向量張成訊號子空間,剩下 $M-p$ 個小特徵值($\approx \sigma^2$,雜訊功率)對應的特徵向量張成雜訊子空間。
關鍵事實:訊號的方向向量 (steering vector) 必然正交於雜訊子空間。所以當你拿一個試探向量 $\mathbf{a}(\omega)$ 去和雜訊子空間做內積,在正確的頻率處,內積為零,取倒數就變成無窮大——一個尖銳的峰值。
數學推導
假設觀測到 $p$ 個複正弦波加白雜訊。建立大小 $M \times M$ 的自相關矩陣:
$\mathbf{A} = [\mathbf{a}(\omega_1), \ldots, \mathbf{a}(\omega_p)]$:方向矩陣,$\mathbf{S}$:訊號協方差矩陣
其中方向向量(steering vector):
展開:MUSIC 偽頻譜推導
對 $\mathbf{R}$ 做特徵值分解:
$$\mathbf{R} = \sum_{i=1}^{M}\lambda_i\,\mathbf{e}_i\mathbf{e}_i^H = \underbrace{\sum_{i=1}^{p}(\lambda_i^s + \sigma^2)\,\mathbf{e}_i\mathbf{e}_i^H}_{\text{訊號子空間}} + \underbrace{\sigma^2\sum_{i=p+1}^{M}\mathbf{e}_i\mathbf{e}_i^H}_{\text{雜訊子空間}}$$其中 $\lambda_1 \geq \cdots \geq \lambda_p > \lambda_{p+1} = \cdots = \lambda_M = \sigma^2$。
令 $\mathbf{E}_n = [\mathbf{e}_{p+1}, \ldots, \mathbf{e}_M]$ 為雜訊子空間的特徵向量矩陣。
關鍵性質:$\mathbf{a}(\omega_i) \perp \mathbf{E}_n$ 對所有 $i = 1, \ldots, p$。
證明:因為 $\mathbf{a}(\omega_i)$ 是 $\mathbf{A}$ 的列向量,落在訊號子空間 $\text{span}(\mathbf{e}_1, \ldots, \mathbf{e}_p)$ 中,而訊號子空間與雜訊子空間正交。
因此,定義 MUSIC 偽頻譜:
$$P_{\text{MUSIC}}(\omega) = \frac{1}{\mathbf{a}^H(\omega)\,\mathbf{E}_n\mathbf{E}_n^H\,\mathbf{a}(\omega)}$$在 $\omega = \omega_i$ 處,分母 $\mathbf{a}^H\mathbf{E}_n\mathbf{E}_n^H\mathbf{a} = \|\mathbf{E}_n^H\mathbf{a}\|^2 \to 0$,所以 $P_{\text{MUSIC}} \to \infty$——產生尖銳的峰值。
注意:$P_{\text{MUSIC}}$ 不是真正的功率譜密度,只是一個指標函數(「偽頻譜」),峰值位置有意義(= 頻率估計),但峰值高度沒有功率意義。$\;\blacksquare$
怎麼用:五步驟流程
Step 1:建立自相關矩陣 $\mathbf{R}$(大小 $M \times M$)
從資料 $x[0], \ldots, x[N-1]$ 建構 Hankel 矩陣後估計 $\hat{\mathbf{R}} = \frac{1}{N-M+1}\sum_{n=0}^{N-M}\mathbf{x}_n\mathbf{x}_n^H$,其中 $\mathbf{x}_n = [x[n], x[n+1], \ldots, x[n+M-1]]^T$。
$M$ 的選擇:$M$ 必須大於訊號數 $p$。經驗法則:$M \approx N/3$ 到 $N/2$。$M$ 太小 → 矩陣太小,解析度差;$M$ 太大 → 估計 $\hat{\mathbf{R}}$ 用的 snapshot 太少,不準確。
Step 2:特徵值分解
$\hat{\mathbf{R}} = \mathbf{E}\boldsymbol{\Lambda}\mathbf{E}^H$。觀察特徵值:前 $p$ 個明顯大於其餘的。
Step 3:估計訊號數 $p$
觀察特徵值的「跳崖」:$\lambda_1 \geq \cdots \geq \lambda_p \gg \lambda_{p+1} \approx \cdots \approx \lambda_M$。或用 MDL (Minimum Description Length) / AIC 準則自動判定:
$\text{MDL}(k) = -(N-M+1)(M-k)\ln\frac{\prod_{i=k+1}^{M}\lambda_i^{1/(M-k)}}{\frac{1}{M-k}\sum_{i=k+1}^{M}\lambda_i} + \frac{1}{2}k(2M-k)\ln(N-M+1)$
選使 MDL 最小的 $k$ 為 $\hat{p}$。
Step 4:建構雜訊子空間並掃描偽頻譜
$\mathbf{E}_n = [\mathbf{e}_{p+1}, \ldots, \mathbf{e}_M]$,在頻率軸上密集取樣計算 $P_{\text{MUSIC}}(\omega)$。
Step 5:找峰值 → 頻率估計
$P_{\text{MUSIC}}$ 的峰值位置 = 估計的頻率。可以用拋物線插值進一步精確化。
具體範例:兩個接近的正弦波
- 訊號:$x[n] = \sin(2\pi \cdot 100\,n/f_s) + \sin(2\pi \cdot 103\,n/f_s) + \text{noise}$
- 取樣率 $f_s = 1000\,\text{Hz}$,只有 $N = 64$ 點資料
- FFT bin = $1000/64 = 15.6\,\text{Hz}$ → 完全分不開(3 Hz << 15.6 Hz)
- MUSIC:選 $M = 16$,估計 $p = 2$
- 特徵值分解 → 2 個大特徵值($\gg \sigma^2$)→ 14 個小特徵值($\approx \sigma^2$)
- 掃描偽頻譜 → 在 100 Hz 和 103 Hz 處出現兩個清晰的尖銳峰值
- 成功分辨!解析度提升了 $15.6/3 \approx 5$ 倍
ESPRIT:更高效的替代方案
直覺:MUSIC 需要在整個頻率軸上掃描搜索峰值,計算量大。ESPRIT 利用一個巧妙的觀察——如果將矩陣的前 $M-1$ 行和後 $M-1$ 行分別看成兩個「子陣列」,它們之間的關係是一個旋轉(相位偏移),旋轉量 = $e^{j\omega}$,直接就是頻率!
ESPRIT 旋轉不變性
$$\mathbf{E}_{s2} = \mathbf{E}_{s1}\,\mathbf{\Phi}, \quad \mathbf{\Phi} = \text{diag}(e^{j\omega_1}, e^{j\omega_2}, \ldots, e^{j\omega_p})$$$\mathbf{E}_{s1}$, $\mathbf{E}_{s2}$:訊號子空間在兩個子陣列上的投影
實作步驟:
- 特徵分解得訊號子空間 $\mathbf{E}_s$(與 MUSIC 相同)
- 取 $\mathbf{E}_{s1}$ = $\mathbf{E}_s$ 去掉最後一行,$\mathbf{E}_{s2}$ = $\mathbf{E}_s$ 去掉第一行
- 求 $\mathbf{\Phi} = \mathbf{E}_{s1}^{\dagger}\mathbf{E}_{s2}$(最小二乘解 / Total Least Squares)
- $\mathbf{\Phi}$ 的特徵值 $\lambda_i = e^{j\omega_i}$ → $\omega_i = \angle\lambda_i$ → 頻率 $f_i = \omega_i f_s / (2\pi)$
| 特性 | MUSIC | ESPRIT |
|---|---|---|
| 輸出 | 偽頻譜(需搜索峰值) | 直接給頻率值 |
| 計算成本 | $O(M^3) + O(M^2 \cdot N_{\text{scan}})$ | $O(M^3)$(無需搜索) |
| 陣列校準 | 需要精確校準 | 較不敏感 |
| 解析度 | 略高(可利用全雜訊子空間) | 略低但仍遠超 FFT |
| 額外資訊 | 偽頻譜提供視覺化 | 只有頻率數值 |
應用場景
- 雷達 DOA 估計:相位陣列雷達的 8~64 個天線元件接收訊號,MUSIC 估計多個目標的精確方位角。實際系統中,配合 64 元件 ULA(均勻線陣),MUSIC 可以在 SNR = 10 dB 下分辨角度差 < 1 度的兩個目標(傳統波束成形解析度約 7 度)。
- 無線通訊 AoA 定位:5G 基站使用 massive MIMO 天線陣列,利用 ESPRIT/MUSIC 估計用戶裝置的到達角 (Angle of Arrival),結合多基站資訊實現室內定位(精度可達 < 1 m)。ESPRIT 因計算效率高,在即時系統中更受歡迎。
- 振動分析中密集模態識別:機械結構(如飛機機翼、橋梁)在自然頻率處有多個振動模態,有些模態頻率非常接近(< 1 Hz 差異)。MUSIC 可以從加速度計的短段資料中分辨這些密集模態,用於結構健康監測。
- 音樂訊號多音高估計 (Multiple Pitch Estimation):鋼琴和弦中多個音符的基頻相差不到一個半音(約 6%),且各自帶有諧波。MUSIC 可用於精確估計和弦中每個音符的基頻,是自動音樂轉譜 (Automatic Music Transcription) 的一個工具。
陷阱與限制
- 必須知道或估計訊號個數 $p$:這是子空間方法的「阿基里斯之踵」。$p$ 估計錯了,結果就錯了。高估 $p$ → 虛假峰值;低估 $p$ → 遺漏訊號。MDL 準則在 SNR 較高時可靠,但低 SNR 時容易失效。
- 相關訊號(coherent sources)會失效:如果兩個訊號完全相關(如多路徑中的反射波),$\mathbf{S}$ 不滿秩,訊號子空間的維度小於 $p$,MUSIC 會把部分訊號「漏」到雜訊子空間中。解決方案:spatial smoothing(空間平滑)——犧牲部分陣列孔徑來恢復 $\mathbf{S}$ 的秩。
- 計算量 $O(M^3)$:特徵分解的複雜度。$M = 64$ 時已經很耗時。大規模陣列($M > 100$)需要快速子空間追蹤演算法(如 PAST, GROUSE)。
- SNR 太低時性能急劇下降:子空間方法有一個「門檻效應 (threshold effect)」——當 SNR 低於某個門檻(通常 5~10 dB),性能急劇惡化,估計值出現大偏差甚至完全錯誤。這是因為雜訊特徵值和訊號特徵值開始重疊,子空間分離失敗。
- 只適合「少數正弦波 + 白雜訊」模型:如果訊號是寬頻的(如語音)或雜訊是有色的(非白雜訊),標準 MUSIC/ESPRIT 的假設被違反,結果不可靠。有色雜訊需要先做預白化處理。
什麼時候不該用?
- 需要完整的 PSD(而非離散頻率):MUSIC 只估計離散頻率成分,不給出連續的 PSD → 用 Welch 或 AR 模型
- 訊號數很多且未知:超過 $M/2$ 個訊號就無法處理(子空間方法的根本限制)。實際中 $p > 5$~$8$ 就很困難了
- 即時處理且矩陣很大:$O(M^3)$ 的特徵分解在嵌入式系統中可能太慢 → 考慮 ESPRIT(較快)或子空間追蹤演算法
- 需要穩健的「隨便用都可以」的方法:子空間方法對模型假設(白雜訊、訊號數已知、非相關)很敏感 → 用 Welch / Multitaper 更安全
互動:MUSIC vs FFT
兩個非常接近的正弦波(中心頻率 100 Hz),調整頻率差和 SNR。當 $\Delta f$ 遠小於 FFT bin 寬度時,FFT 只看到一個峰,但 MUSIC 可以分辨出兩個。
FFT bin 寬度 = 15.6 Hz。當 $\Delta f < 15.6$ Hz 時,FFT 原則上無法分辨。降低 SNR 觀察門檻效應。
References: [1] Schmidt, Multiple Emitter Location and Signal Parameter Estimation, IEEE Trans. AP, 1986 (原始報告 1979). [2] Roy & Kailath, ESPRIT — Estimation of Signal Parameters via Rotational Invariance Techniques, IEEE Trans. ASSP, 1989. [3] Stoica & Moses, Spectral Analysis of Signals, Ch.4, Pearson, 2005. [4] Van Trees, Optimum Array Processing, Part IV of Detection, Estimation, and Modulation Theory, Wiley, 2002.
✅ 快速檢核 (Quick Check)
Q1: MUSIC 需要知道什麼資訊才能工作?
顯示答案
需要知道(或估計)訊號的個數 M,以便區分訊號子空間和雜訊子空間。通常用 MDL 或 AIC 準則估計 M。
Q2: 如果兩個訊號完全相關(coherent),MUSIC 會怎樣?
顯示答案
會失效——相關訊號使得自相關矩陣的秩下降,無法正確分離子空間。需要 spatial smoothing 預處理。
3.5 Chirp-Z 轉換 (CZT)
頻譜的放大鏡 — 在 Z 平面上沿任意路徑計算 DFT
為什麼要學這個? 因為有時候你只關心某個窄頻段的細節(例如精確量測電網頻率偏移),CZT 讓你把計算資源集中在那個頻段,像一個頻譜放大鏡。
前情提要:3.4 的 MUSIC 能做超解析度估計,但計算量大。如果你只是想『放大』某個頻段的細節,有更輕量的工具——
Learning Objectives
- 定義 CZT:沿 Z 平面螺線取樣的推廣 DFT
- 推導 Bluestein 恆等式與 $O(N\log N)$ 計算方法
- 理解 CZT 的「頻率 zoom-in」能力及其與零填充的差異
- 區分「更密的頻率取樣」vs「更高的頻率解析度」
一句話理解
CZT 讓你只計算你關心的頻率範圍,像是頻譜上的放大鏡。
痛點:我只關心一小段頻率
你在做電力系統頻率監測,只關心 49.9~50.1 Hz 之間的微小頻率偏移。取樣率 $f_s = 1\,\text{kHz}$,你收集了 1 秒的資料($N = 1000$)。FFT 給你 0~500 Hz 的全範圍頻譜,每個 bin = 1 Hz,在 50 Hz 附近只有一兩個點——遠遠不夠看到 0.01 Hz 的頻率偏移。
你可以零填充到 $N = 100000$(100 秒等效),bin 寬變成 0.01 Hz,但這意味著做一個 100K 點的 FFT,而其中 99.96% 的計算結果(0~49.9 Hz 和 50.1~500 Hz)你根本不需要。
有沒有辦法只計算 49.9~50.1 Hz 這個範圍,但用密集的 0.01 Hz 間距?
由來
Lawrence Rabiner, Ronald Schafer 和 Charles Rader (1969) 在 Bell Labs 提出了 Chirp-Z Transform。他們的關鍵洞察是:DFT 實際上是 Z 轉換在單位圓上的等距取樣,如果把取樣點移到 Z 平面上的任意螺線(spiral),就能得到更靈活的頻率分析工具。
論文標題直接說明了方法的核心:"The Chirp z-Transform Algorithm"。「Chirp」指的是演算法中用到的線性調頻訊號(chirp signal),因為把 DFT 轉化為卷積的 Bluestein 恆等式中,核函數恰好是 chirp。
Rader 的另一個重要貢獻是發現了質數長度的 DFT 可以轉化為卷積(Rader's algorithm, 1968),而 CZT 的 Bluestein 方法更一般化——對任意長度的 DFT 都能轉化為卷積(不需要長度是 2 的冪次或質數)。
原理
直覺:DFT 是 Z 轉換在單位圓上的 $N$ 個等距取樣點。CZT 把這些取樣點推廣到 Z 平面上任意螺線上的 $M$ 個等距取樣點。如果你選擇的螺線只覆蓋你感興趣的小段圓弧(頻率範圍),你就能在那個範圍內得到任意密度的頻譜取樣——而且 $M$ 可以比 $N$ 大很多,也可以比 $N$ 小。
CZT 定義
$$X(z_k) = \sum_{n=0}^{N-1}x[n]\,z_k^{-n}, \quad z_k = A\,W^{-k}, \; k = 0, 1, \ldots, M-1$$$A = A_0\,e^{j\theta_0}$(起始點)、$W = W_0\,e^{j\phi_0}$(步進)定義 Z 平面上的螺線路徑
DFT 是 CZT 的特例:$A = 1$,$W = e^{-j2\pi/N}$,$M = N$(單位圓上 $N$ 等距點)。
頻率 zoom-in:只要取 $A = e^{j2\pi f_1/f_s}$(起始頻率),$W = e^{-j2\pi(f_2-f_1)/(Mf_s)}$(步進頻率),$M$ 點 CZT 就只計算 $[f_1, f_2]$ 範圍內的 $M$ 點頻譜。
展開:Bluestein 恆等式與卷積實作
CZT 的直接計算是 $O(NM)$,但可以利用 Bluestein 恆等式轉化為卷積:
關鍵:$kn = \frac{1}{2}[k^2 + n^2 - (k-n)^2]$。因此:
$$W^{kn} = W^{k^2/2}\,W^{n^2/2}\,W^{-(k-n)^2/2}$$代入 CZT 定義:
$$X(z_k) = W^{k^2/2}\sum_{n=0}^{N-1}\underbrace{\left[x[n]\,A^{-n}\,W^{n^2/2}\right]}_{g[n]}\,\underbrace{W^{-(k-n)^2/2}}_{h[k-n]}$$括號內的求和是 $g[n]$ 和 $h[n] = W^{-n^2/2}$ 的線性卷積!
因此 CZT 可以用三次 FFT 計算:
- 計算 $g[n] = x[n]\,A^{-n}\,W^{n^2/2}$,$n = 0, \ldots, N-1$
- 計算 $h[n] = W^{-n^2/2}$,$n = -(N-1), \ldots, M-1$
- FFT 卷積:$y = g * h$(零填充到 $\geq N+M-1$,FFT → 逐點乘 → IFFT)
- $X(z_k) = W^{k^2/2}\,y[k]$,$k = 0, \ldots, M-1$
總複雜度:$O((N+M)\log(N+M))$,比直接 $O(NM)$ 快很多。$\;\blacksquare$
怎麼用
三個參數即可
- 起始頻率 $f_1$:你感興趣的頻段下限
- 結束頻率 $f_2$:你感興趣的頻段上限
- 取樣點數 $M$:在 $[f_1, f_2]$ 之間要多少個頻率點
頻率間距 = $(f_2 - f_1)/M$。你可以讓這個間距任意小——但要記住,這不會增加真正的頻率解析度。
應用場景
- 電力系統頻率監測:電網標稱頻率 50/60 Hz,但實際頻率在 49.95~50.05 Hz 之間波動。監測這個微小偏移對電網穩定性至關重要。CZT 可以在 1 秒資料上實現 0.001 Hz 精度的頻率量測(直接 FFT 需要 1000 秒資料才能達到相同的 bin 密度)。IEC 61000-4-30 標準中的 Class A 電能品質分析儀實際使用 CZT 類似技術。
- 音樂調音器:A4 = 440 Hz,A4# = 466.16 Hz,半音差 = 26.16 Hz($\approx$ 6%)。調音需要精度 < 1 cent(0.058%,即 0.26 Hz)。對 44.1 kHz 取樣的 0.1 秒音頻($N = 4410$),FFT bin = 10 Hz,完全不夠。CZT zoom 到 430~450 Hz,$M = 2000$ 點 → 間距 0.01 Hz → 輕鬆達到 0.1 cent 精度。
- 精密振動分析:旋轉機械(如渦輪發電機,轉速 3000 RPM = 50 Hz)的軸振動。需要精確追蹤 1X(50 Hz)和 2X(100 Hz)的振幅和相位隨負載/溫度的微小變化。CZT 聚焦在 49~51 Hz 和 99~101 Hz 兩個窄帶,比 order tracking 更靈活。
陷阱與限制
- CZT 不會增加真正的頻率解析度:這是最重要也最容易被誤解的一點。頻率解析度仍然受觀測時間 $T$ 限制:$\Delta f_{\text{resolution}} \approx 1/T$。CZT 只是提供更密集的頻率取樣(像用尺子上更細的刻度去讀),但不能分辨兩個間距小於 $1/T$ 的頻率。這類似於零填充的效果,但 CZT 可以只在你關心的頻段做,更靈活且計算量更小。
- 選擇 $[f_1, f_2]$ 範圍時要留餘量:如果 zoom 範圍太窄,可能把目標頻率的主瓣截斷,導致旁瓣效應。通常在兩端各留 2~3 個主瓣寬度的餘量。
- 仍然需要加窗:CZT 不能免除頻譜洩漏。資料在 CZT 之前仍需加窗函數。
- $|W_0| \neq 1$ 時(螺線而非圓弧)的數值穩定性:如果取樣路徑偏離單位圓太遠,$z_k^{-n}$ 會指數增長或衰減,造成數值問題。通常在單位圓上取樣($|A_0| = |W_0| = 1$)最安全。
什麼時候不該用?
- 需要全範圍頻譜:如果你需要看 0 到 $f_s/2$ 的完整頻譜,直接用 FFT 更快更簡單
- 需要真正增加解析度(分辨接近頻率):CZT 只是放大鏡不是顯微鏡 → 改用 MUSIC / ESPRIT(3.4 節)或收集更長的資料
- $M$ 和 $N$ 都很大且差不多:CZT 的三次 FFT 加上預處理,比直接一次 FFT 慢 → 只有在 zoom 範圍顯著小於全範圍時才划算
References: [1] Rabiner, Schafer & Rader, The Chirp z-Transform Algorithm, IEEE Trans. Audio Electroacoustics, 1969. [2] Bluestein, A Linear Filtering Approach to the Computation of Discrete Fourier Transform, IEEE Trans. AU, 1970. [3] Oppenheim & Schafer, Discrete-Time Signal Processing, Section 9.6.
互動:Chirp-Z 頻率放大鏡
兩個相距僅 1Hz 的正弦波(99.5Hz + 100.5Hz)。FFT 的 Δf≈3.9Hz 無法解析;CZT 可在任意頻帶放大,清楚分開雙峰。
4.1 Hilbert 轉換 (Hilbert Transform)
構造解析訊號的數學基礎 — 從實數訊號提取振幅包絡與瞬時相位
為什麼要學這個? 因為包絡偵測是通訊解調(AM)和機械故障診斷(軸承)的核心操作。Hilbert 轉換是提取包絡最乾淨、最有數學基礎的方法。
前情提要:Part III 教了各種頻譜估計方法。但有些應用不只需要頻譜,還需要『包絡』——訊號的振幅如何隨時間變化。Hilbert 轉換就是提取包絡的數學工具。
Learning Objectives
- 定義 Hilbert 轉換及其頻域表示 $-j\,\text{sgn}(\omega)$
- 理解解析訊號 (Analytic Signal) 的物理意義:消除負頻率冗餘
- 掌握 FFT-based Hilbert 轉換的三步驟實作
- 認識 Hilbert 轉換的限制與正確使用方式
一句話理解
Hilbert 轉換把一個實數訊號變成複數訊號(解析訊號),讓你能提取出振幅包絡和瞬時頻率。
痛點:如何把「藏在載波裡的東西」拿出來?
場景一:AM 收音機。電台把語音(20~4000 Hz)調變到 1 MHz 載波上播出去。收音機要怎麼把語音從載波上「剝下來」?語音就是載波的振幅包絡(envelope),但你怎麼從一個實數訊號中提取包絡?
場景二:軸承故障偵測。軸承外環有一個小缺陷,每次滾動體經過缺陷時產生一個衝擊,這些衝擊激發了軸承座的高頻共振(2~5 kHz)。在時域波形上看到的是一連串被 2~5 kHz 共振「調變」的衝擊脈衝。你要找的是衝擊的重複頻率(BPFO,約 87 Hz),但它藏在高頻共振裡。你需要先提取包絡,再對包絡做 FFT 來找 BPFO。
在這兩個場景中,包絡偵測是核心操作,而 Hilbert 轉換是最乾淨的包絡偵測工具。
由來
David Hilbert (1905) 在研究複變函數論和積分方程時,引入了一類特殊的奇異積分轉換。這個純數學工具在當時與工程毫無關係。
Dennis Gabor (1946) 是將 Hilbert 轉換引入訊號處理的關鍵人物。在他的里程碑式論文 "Theory of Communication"(發表在 Journal of the IEE)中,Gabor 提出了「解析訊號 (analytic signal)」的概念:把實數訊號 $x(t)$ 配上它的 Hilbert 轉換 $\hat{x}(t)$ 作為虛部,形成複數訊號 $z(t) = x(t) + j\hat{x}(t)$。
Gabor 的動機是通訊理論——他想為訊號的「瞬時頻率」和「瞬時振幅」給出嚴格的數學定義。解析訊號提供了這個框架。順帶一提,同一篇論文也提出了後來被稱為 Gabor 轉換(短時傅立葉轉換的特例)的概念。
Gabor 後來因為全像術(holography)的發明獲得 1971 年諾貝爾物理學獎。
原理
直覺:一個實數訊號的頻譜是共軛對稱的($X(-\omega) = X^*(\omega)$),正頻率和負頻率攜帶完全相同的資訊。解析訊號把負頻率砍掉,正頻率乘以 2——資訊不減,但表示更簡潔。而且砍掉負頻率後,訊號變成複數,可以直接用模和相角來提取包絡和瞬時相位。
Hilbert 轉換(時域定義)
$$\hat{x}(t) = \mathcal{H}\{x(t)\} = \frac{1}{\pi}\,\text{p.v.}\!\int_{-\infty}^{\infty}\frac{x(\tau)}{t - \tau}\,d\tau = x(t) * \frac{1}{\pi t}$$p.v. = Cauchy 主值(避開 $\tau = t$ 的奇異點)
Hilbert 轉換(頻域表示)
$$\hat{X}(\omega) = -j\,\text{sgn}(\omega)\cdot X(\omega) = \begin{cases}-jX(\omega), & \omega > 0 \\ 0, & \omega = 0 \\ jX(\omega), & \omega < 0\end{cases}$$效果:正頻率成分相移 $-90°$,負頻率成分相移 $+90°$,幅度不變。它是一個全通相移器(allpass phase shifter)。
展開:為什麼 $-j\,\text{sgn}(\omega)$ 等於 90 度相移?
$-j = e^{-j\pi/2}$,乘以 $-j$ 就是相位減 90 度。
對正頻率成分 $X(\omega)$($\omega > 0$):$\hat{X}(\omega) = -jX(\omega)$,相移 $-90°$。
對負頻率成分($\omega < 0$):$\text{sgn}(\omega) = -1$,故 $\hat{X}(\omega) = jX(\omega)$,相移 $+90°$。
對 $\cos(\omega_0 t)$ 的 Hilbert 轉換:
$$\mathcal{H}\{\cos(\omega_0 t)\} = \sin(\omega_0 t)$$因為 $\cos$ 每個正頻率成分被相移 $-90°$,$\cos(\omega_0 t - 90°) = \sin(\omega_0 t)$。$\;\blacksquare$
解析訊號 (Analytic Signal)
定義
$$z(t) = x(t) + j\,\hat{x}(t)$$解析訊號的頻譜:
只有正頻率——負頻率被完全消除。這就是「解析」的含義:在複變函數論中,解析函數的 Fourier 轉換只存在於半平面。
具體例子:$x(t) = A\cos(\omega_0 t + \phi)$
$\hat{x}(t) = A\sin(\omega_0 t + \phi)$
$z(t) = Ae^{j(\omega_0 t + \phi)}$
$|z(t)| = A$(常數包絡),$\angle z(t) = \omega_0 t + \phi$(線性相位)。
FFT-based Hilbert 轉換:三步驟
這是實務中最常用的實作方式(也是 MATLAB hilbert() 和 SciPy scipy.signal.hilbert() 內部的做法):
怎麼用
包絡偵測流程
- (關鍵!)帶通濾波:先把訊號限制到你感興趣的窄頻帶。不先濾波就算 Hilbert 包絡,結果通常沒有物理意義。
- 計算 Hilbert 轉換 / 解析訊號:用上面的 FFT 三步驟法。
- 取模 = 包絡:$A(t) = |z(t)| = \sqrt{x^2(t) + \hat{x}^2(t)}$
具體範例:AM 解調
$x(t) = [1 + 0.8\cos(2\pi \cdot 5\,t)] \cdot \cos(2\pi \cdot 1000\,t)$
載波 1000 Hz,調變波 5 Hz(調變深度 80%)
- 直接計算 Hilbert 包絡 $|z(t)|$
- 包絡完美還原 $1 + 0.8\cos(2\pi \cdot 5\,t)$ — 調變波形
- 這就是 AM 包絡偵測的原理!
Python 範例:使用 scipy.signal.hilbert 提取訊號包絡
應用場景
- 通訊解調(AM / SSB):AM 包絡偵測如上所述。SSB(單邊帶調變)利用 Hilbert 轉換消除一半的頻寬:$x_{\text{SSB}}(t) = x(t)\cos(\omega_c t) \mp \hat{x}(t)\sin(\omega_c t)$(上/下邊帶)。SSB 頻寬只有 AM 的一半,是業餘無線電和部分軍用通訊的標準調變方式。
- 軸承故障包絡譜分析:加速度計量測軸承振動 → 帶通濾波(聚焦 2~5 kHz 的共振帶)→ Hilbert 包絡 → 包絡 FFT → 在包絡譜中找 BPFO = 87.3 Hz 及其 2X (174.6 Hz)、3X (261.9 Hz) 倍頻。ISO 13373-3 和各大振動分析軟體(如 SKF Microlog, B&K Pulse)都以此為標準流程。
- 語音基頻追蹤:語音訊號帶通濾波到基頻範圍(80~400 Hz)→ Hilbert 包絡 → 包絡的自相關函數 → 第一個非零峰 = 基本週期 $T_0$ → 基頻 $F_0 = 1/T_0$。
- 地震波分析:地震訊號的包絡(瞬時振幅)用於判斷 P 波和 S 波的到達時間,以及震源距離估計。
陷阱與限制
- 寬頻訊號的 Hilbert 包絡沒有物理意義:如果訊號不是窄帶的(即不能寫成 $x(t) \approx A(t)\cos[\omega_c t + \phi(t)]$ 的形式),包絡 $|z(t)|$ 會劇烈波動且難以解讀。必須先帶通濾波讓訊號變成窄帶,再取 Hilbert 包絡。這是最重要的使用準則。
- 端點效應 (Edge Effect):FFT 做的是圓卷積(circular convolution),在訊號起始和結束處會產生假影。解決方案:(a) 資料兩端各延伸一段(鏡像或零填充),計算後截取中間部分;(b) 用 overlap-add 分段處理。
- 離散時間的近似:連續的 Hilbert 轉換是非因果的($1/(\pi t)$ 在 $t < 0$ 也有值)。FFT 實作是一個有限長度的近似。當訊號帶寬接近 Nyquist 頻率時,近似品質下降。
- DC 成分問題:如果訊號有直流偏移,Hilbert 轉換後的直流部分仍在實部但不在虛部,會造成包絡估計出現偏移。先去均值再做 Hilbert。
什麼時候不該用?
- 訊號有多個不同載波的成分:Hilbert 包絡會是所有成分的混合包絡,無法分離 → 先帶通濾波分離各成分,或改用 EMD/HHT(5.6 節)
- 需要時頻分析(而非只要包絡):Hilbert 只給一維的包絡和瞬時頻率,不給完整的時頻分佈 → 改用 STFT(5.1 節)或 CWT(5.4 節)
- 寬頻雜訊中的包絡偵測:先濾波再 Hilbert。如果不先濾波,包絡偵測器會追蹤雜訊的隨機包絡,沒有任何有用資訊
互動:包絡偵測
AM 調變訊號 $x(t) = [1 + m\cos(2\pi f_m t)]\cos(2\pi \cdot 1000\,t)$。Hilbert 包絡(橘色)完美追蹤調變波形。調整調變頻率 $f_m$ 觀察效果。
References: [1] Gabor, Theory of Communication, J. IEE, 1946. [2] Hahn, Hilbert Transforms in Signal Processing, Artech House, 1996. [3] Marple, Computing the Discrete-Time Analytic Signal via FFT, IEEE Trans. SP, 1999. [4] Feldman, Hilbert Transform Applications in Mechanical Vibration, Wiley, 2011.
✅ 快速檢核 (Quick Check)
Q1: Hilbert 轉換在頻域做了什麼?
顯示答案
正頻率相移 -90°,負頻率相移 +90°,幅度不變。等於乘以 -j·sgn(ω)。
Q2: 為什麼要先帶通濾波再做 Hilbert 包絡?
顯示答案
因為寬頻訊號的包絡沒有物理意義。帶通濾波後訊號變窄頻,包絡才能正確反映調變特徵。
4.2 包絡與瞬時頻率 (Envelope & Instantaneous Frequency)
從解析訊號提取時變的振幅與頻率 — 機械故障診斷的核心工具
為什麼要學這個? 因為軸承故障、齒輪缺陷這類旋轉機械問題,故障特徵不在頻譜上直接可見,而是藏在高頻共振的「包絡」裡。包絡譜分析是工業預測性維護的標準工具。
前情提要:4.1 介紹了 Hilbert 轉換的數學。現在來看它最重要的應用:從解析訊號提取包絡和瞬時頻率,這是軸承故障診斷的關鍵技術。
Learning Objectives
- 從解析訊號的極座標表示推導包絡和瞬時頻率
- 理解瞬時頻率對窄帶訊號才有物理意義的限制
- 掌握完整的軸承故障包絡譜分析流程(6 步驟)
- 比較 Hilbert 包絡與傳統整流+低通濾波方法
一句話理解
解析訊號的模是包絡,相位的導數是瞬時頻率——讓你追蹤訊號的振幅和頻率如何隨時間變化。
痛點
「我想知道這個 chirp 訊號在每個瞬間的頻率是多少。」一段線性調頻訊號(chirp),頻率從 100 Hz 線性掃到 1000 Hz,但標準的 FFT 只會告訴你「訊號包含 100~1000 Hz 的成分」——它不告訴你哪個時刻對應哪個頻率。
「軸承衝擊的重複頻率是多少?」加速度計量測到的振動訊號看起來像一團高頻噪聲,肉眼看不出衝擊模式。但如果能提取包絡,衝擊模式就會浮現,進而用包絡譜找出特徵頻率。
由來
瞬時頻率的概念在 Gabor (1946) 的框架下自然浮現:解析訊號 $z(t) = A(t)e^{j\phi(t)}$ 的相位對時間的導數 $\frac{1}{2\pi}\frac{d\phi}{dt}$ 就是瞬時頻率。但「瞬時頻率」在物理上是否有意義,曾經引起長期的學術爭論。
Ville (1948) 嚴格證明了:對窄帶訊號,Gabor 的瞬時頻率等於 Wigner-Ville 分佈的條件期望值(頻率的一階矩),因此有明確的物理意義。但對寬頻訊號,瞬時頻率可以是負的甚至無限大——失去了頻率的直覺意義。
包絡譜分析作為機械故障診斷工具,由 Robert B. Randall 等人在 1980~1990 年代系統化發展,成為旋轉機械狀態監測的國際標準方法(ISO 13373, ISO 10816 系列)。
原理
將解析訊號寫成極座標形式:
$z(t) = A(t)\,e^{j\phi(t)}$
$$A(t) = |z(t)| = \sqrt{x^2(t) + \hat{x}^2(t)} \quad \text{(瞬時振幅 / 包絡)}$$ $$\phi(t) = \arg[z(t)] = \arctan\frac{\hat{x}(t)}{x(t)} \quad \text{(瞬時相位)}$$ $$f_i(t) = \frac{1}{2\pi}\frac{d\phi}{dt} \quad \text{(瞬時頻率)}$$直覺:把訊號想像成一個旋轉的向量(phasor)。在每個瞬間,向量的長度 = 包絡 $A(t)$,向量的角度 = 相位 $\phi(t)$,向量的旋轉速度 = 瞬時角頻率 $2\pi f_i(t)$。
展開:離散時間瞬時頻率的計算
在離散時間中,相位 $\phi[n] = \arctan(\hat{x}[n]/x[n])$。瞬時頻率用差分近似:
$$f_i[n] = \frac{f_s}{2\pi}\,\Delta\phi[n] = \frac{f_s}{2\pi}\left(\phi[n] - \phi[n-1]\right)$$注意:$\arctan$ 的輸出在 $(-\pi, \pi]$ 範圍內,相鄰取樣之間的相位差可能會「跳」$\pm 2\pi$(phase wrapping)。必須先做 phase unwrapping(相位展開)再算差分:
$$\Delta\phi_{\text{unwrapped}}[n] = \text{wrap}(\phi[n] - \phi[n-1]) = \Delta\phi[n] - 2\pi\,\text{round}\!\left(\frac{\Delta\phi[n]}{2\pi}\right)$$或者更穩健的方法——直接用解析訊號的實部和虛部算:
$$f_i[n] = \frac{f_s}{2\pi}\,\text{Im}\!\left(\frac{z[n]\,z^*[n-1]}{|z[n]\,z^*[n-1]|}\right) \cdot \frac{1}{\Delta t}$$$\blacksquare$
怎麼用:完整的軸承故障包絡譜分析流程
這是旋轉機械狀態監測中最重要的頻譜分析技術之一。以下是工業實務中的完整 6 步驟,附具體數值:
Step 1:擷取加速度計資料
取樣率 $f_s = 25.6\,\text{kHz}$(常見的振動分析取樣率,覆蓋到 10 kHz)。擷取 2 秒資料 → $N = 51200$ 點。
Step 2:帶通濾波(聚焦共振帶)
這是最關鍵的步驟。軸承衝擊會激發結構的共振,能量集中在某個高頻帶(通常 2~10 kHz,具體依軸承和結構而定)。
設計帶通濾波器:中心頻率 3.5 kHz,頻寬 2~5 kHz。使用 Butterworth 4 階帶通濾波器。可以用 spectral kurtosis 自動選擇最佳濾波頻帶(Antoni 2006)。
Step 3:Hilbert 包絡偵測
$A[n] = |z[n]| = \sqrt{x_{\text{filtered}}^2[n] + \hat{x}_{\text{filtered}}^2[n]}$
結果:一串脈衝,每個脈衝對應一次滾動體經過缺陷的衝擊。脈衝間距 = $1/\text{BPFO}$。
Step 4:低通濾波包絡(去除載波殘留)
包絡中可能還殘留一些高頻成分(載波的殘留)。用低通濾波器截止頻率 $\approx 500\,\text{Hz}$(遠高於預期的故障頻率,但遠低於載波頻率)。
Step 5:包絡 FFT(包絡譜)
對低通濾波後的包絡做 FFT(用 Hann 窗)。頻率解析度 $\Delta f = f_s/N = 25600/51200 = 0.5\,\text{Hz}$(足以分辨故障頻率的倍頻)。
Step 6:在包絡譜中尋找特徵頻率
軸承故障特徵頻率(以 SKF 6205 軸承、轉速 1797 RPM 為例):
| 故障類型 | 特徵頻率 | 值 (Hz) | 包絡譜中的模式 |
|---|---|---|---|
| 外環 (BPFO) | $n_b f_r(1-d/D)/2$ | 87.3 | 87.3, 174.6, 261.9 Hz |
| 內環 (BPFI) | $n_b f_r(1+d/D)/2$ | 162.2 | 162.2 Hz $\pm f_r$ 邊帶 |
| 滾動體 (BSF) | $Df_r(1-(d/D)^2)/(2d)$ | 69.6 | $2\times$ BSF + 邊帶 |
$n_b$=9(滾動體數),$f_r$=29.95 Hz(轉速),$d/D$=0.3348(滾動體直徑/節圓直徑)
判讀要點:在包絡譜中看到 BPFO 及其 2X, 3X 倍頻 → 外環故障。看到 BPFI 及其旁邊的 $\pm f_r$ 邊帶 → 內環故障(內環隨軸旋轉,故障進出負荷區產生調變)。倍頻的數量和相對高度指示故障嚴重程度。
應用場景
- 旋轉機械狀態監測:風力發電機齒輪箱和發電機軸承(單台風機的軸承更換成本 $150,000~$300,000 美元 + 停機損失)。每小時自動分析包絡譜,趨勢追蹤 BPFO/BPFI 能量。早期預警可以將停機時間從數週縮短到計劃性的數天。全球風電場普遍採用此方法(如 Bruel & Kjaer Vibro, SKF Enlight)。
- 語音 Pitch Tracking(基頻追蹤):語音訊號帶通到 50~500 Hz → Hilbert 包絡 → 包絡的自相關或包絡譜 → 基頻 $F_0$。瞬時頻率更直接:帶通到基頻附近 → 瞬時頻率 $f_i(t)$ 就是語調的即時變化。用於語音合成的韻律 (prosody) 分析和歌唱音準偵測。
- 超音波無損檢測 (NDT):超音波脈衝(中心頻率 5 MHz)在材料內部反射。包絡偵測提取回波的振幅隨深度的變化(A-scan 顯示)。包絡的峰值位置 = 缺陷深度,峰值大小 ∝ 缺陷反射係數。航太、核能、石化等行業的標準檢測方法。
陷阱與限制
- 瞬時頻率只對窄頻訊號有物理意義:這個限制值得反覆強調。如果訊號的帶寬和中心頻率相當(即 $BW \approx f_c$),瞬時頻率會出現快速波動、甚至負值,完全沒有「頻率」的意義。經驗法則:$BW / f_c < 0.3$ 時瞬時頻率才可靠。
- 不先帶通濾波就算包絡 → 結果無意義:如果訊號包含多個頻帶的成分(如軸承振動中同時有軸頻、嚙合頻率、共振頻率),Hilbert 包絡會是所有成分的混合,沒辦法分離出你要的故障特徵。
- 相位展開 (Phase Unwrapping) 的困難:在低 SNR 區域或包絡接近零的瞬間,相位估計會劇烈跳動,使瞬時頻率產生脈衝式的假值 (spike)。對策:(a) 低通濾波瞬時頻率;(b) 只在包絡值足夠大的時段信任瞬時頻率。
- Hilbert 包絡 vs 整流+低通:傳統的「整流+低通濾波」也能做包絡偵測,但 Hilbert 方法的優勢是不需要選低通截止頻率(包絡自動產生),且對窄帶訊號的包絡估計更精確。缺點是 FFT 方法需要整段資料(非因果),不適合即時處理。
什麼時候不該用?
- 需要完整的時頻分佈(不只是一條包絡曲線):改用 STFT spectrogram(5.1 節)或 CWT scalogram(5.4 節)
- 訊號高度非平穩且有多個時變成分:改用 EMD / HHT(5.6 節),它能自適應地分解成多個 IMF,每個 IMF 再取 Hilbert 包絡和瞬時頻率
- 即時(因果)包絡偵測:Hilbert FFT 方法是非因果的(需要整段資料)。即時系統可用 FIR Hilbert 濾波器(有延遲)或簡單的整流+低通濾波
References: [1] Gabor, Theory of Communication, J. IEE, 1946. [2] Randall & Antoni, Rolling Element Bearing Diagnostics — A Tutorial, Mech. Sys. Sig. Proc., 2011. [3] Antoni, The Spectral Kurtosis: A Useful Tool for Characterising Non-Stationary Signals, Mech. Sys. Sig. Proc., 2006. [4] Boashash, Estimating and Interpreting the Instantaneous Frequency of a Signal, Proc. IEEE, 1992.
📝 例題演練 (Worked Example)
CNC 主軸軸承 SKF 6205(n=9, d=7.94mm, D=38.5mm),轉速 3600 RPM。(a) 計算 BPFO。(b) 帶通濾波的頻段怎麼選?(c) 包絡譜的頻率解析度需要多少?
顯示解題過程
(a) fr=60Hz, BPFO = (9/2)×60×(1−7.94/38.5) = 214.2 Hz
(b) 選高頻共振帶,通常 2-8kHz(依實際量測的頻率響應函數決定)
(c) 要看到 BPFO≈214Hz 及其 2x=428Hz,Δf 至少 <5Hz → 觀測時間 ≥0.2秒
互動:軸承故障包絡譜分析
軸承故障產生的週期性衝擊會激發結構共振,但在原始 FFT 中看不到明確的故障頻率。 透過包絡分析(帶通 → Hilbert 包絡 → 包絡譜)可將隱藏的 BPFO 調變頻率提取出來。
4.3 倒頻譜分析 (Cepstrum Analysis)
頻譜的頻譜 — 在「quefrency」域中發現隱藏的週期結構
為什麼要學這個? 因為當頻譜裡有週期性的 pattern(諧波族、邊帶族、回聲),倒頻譜能一眼看出那個週期——它是語音基頻偵測和齒輪箱分析的經典工具。
前情提要:4.2 用包絡分析找到了時域的週期性衝擊。但有時候週期性不在時域而在頻域——頻譜裡有一組等距的峰(諧波族、邊帶族)。倒頻譜就是分析『頻譜的週期性』的工具。
Learning Objectives
- 理解倒頻譜的定義:實倒頻譜 vs 複倒頻譜
- 建立 quefrency 軸峰值與頻譜週期結構的對應關係
- 掌握倒頻譜在語音基頻偵測和齒輪箱故障分析中的應用
- 認識對數運算和相位展開帶來的數值問題
一句話理解
倒頻譜 = 頻譜的頻譜。當頻譜裡有週期性的 pattern(如等距邊帶或諧波族),倒頻譜能幫你找出那個週期。
痛點:頻譜裡的週期性 Pattern
場景一:齒輪箱故障。齒輪嚙合產生的振動頻譜以嚙合頻率(Gear Mesh Frequency, GMF)為中心,兩側有一整族等距的邊帶,間距 = 軸的轉速頻率。例如 GMF = 600 Hz,轉速 = 30 Hz,你在頻譜上看到 510, 540, 570, 600, 630, 660, 690 Hz 的一系列峰——人眼可以看出它們等距(間距 30 Hz),但要用演算法自動偵測「這些峰的間距是多少」卻不容易。
場景二:語音基頻偵測。語音訊號的頻譜有一組諧波:$F_0, 2F_0, 3F_0, \ldots$,其中 $F_0$ 是基本頻率(男性 $\approx$ 100 Hz,女性 $\approx$ 200 Hz)。這些諧波構成頻譜中的等距 pattern,間距 = $F_0$。你需要一個方法來自動找出這個等距間距。
倒頻譜正是為此設計的:它把頻譜再做一次傅立葉轉換,把頻譜中的「週期性 pattern」轉換成倒頻譜中的「峰值」。
由來
B.P. Bogert, M.J.R. Healy 和大名鼎鼎的統計學家 John W. Tukey (1963) 在 Bell Labs 的一次地震波分析研究中提出了 cepstrum。他們的原始動機是偵測地震訊號中的回聲(echo):地震波經過地層反射,產生延遲的副本。在頻譜中,這表現為週期性的波紋(ripple),波紋的頻率 = 回聲延遲的倒數。
Tukey 以他一貫的幽默風格,把所有相關術語都做了字母倒轉:
| 原詞 | 倒轉 | 含義 |
|---|---|---|
| spectrum | cepstrum | 頻譜的頻譜 |
| frequency | quefrency | 倒頻譜的橫軸(單位:時間) |
| harmonics | rahmonics | 倒頻譜中的「諧波」 |
| filtering | liftering | 在倒頻譜域中的濾波操作 |
論文標題本身就充滿 Tukey 的風格:"The Quefrency Alanysis of Time Series for Echoes: Cepstrum, Pseudo-Autocovariance, Cross-Cepstrum, and Saphe Cracking"。是的,連 "alanysis" 也是故意把 "analysis" 倒轉的。
倒頻譜後來在語音處理和機械故障診斷中找到了最廣泛的應用。在語音處理中,它是 MFCC (Mel-Frequency Cepstral Coefficients) 的基礎——語音辨識中最重要的特徵之一。
原理
直覺:如果頻譜中有等距的峰(間距 $\Delta f$),那就像頻譜有「頻率」$= \Delta f$。對頻譜再做一次 FFT,就能找到這個「頻率」——它會在 quefrency = $1/\Delta f$ 處出現峰值。
實倒頻譜 (Real/Power Cepstrum)
$$c[n] = \text{IFFT}\left\{\log\left|X[k]\right|\right\} = \text{IFFT}\left\{\log\left|\text{FFT}\{x[n]\}\right|\right\}$$複倒頻譜 (Complex Cepstrum)
$$\hat{c}[n] = \text{IFFT}\left\{\log X[k]\right\} = \text{IFFT}\left\{\log|X[k]| + j\,\angle X[k]\right\}$$quefrency 軸的意義:
- quefrency 的單位是時間(秒或取樣點數)
- 在 quefrency $= \tau$ 處出現峰值 → 頻譜中有間距 $= 1/\tau$ Hz 的週期結構
- 峰值高度 ∝ 週期結構的強度
展開:為什麼要取 log?
倒頻譜的設計有一個深層原因:卷積的同態分離 (homomorphic deconvolution)。
許多訊號可以建模為兩個成分的卷積:
$$x[n] = s[n] * h[n] \quad \Longleftrightarrow \quad X[k] = S[k] \cdot H[k]$$取對數:
$$\log|X[k]| = \log|S[k]| + \log|H[k]|$$卷積在頻域變乘法,取 log 後變加法。再做 IFFT:
$$c_x[n] = c_s[n] + c_h[n]$$如果 $c_s$ 和 $c_h$ 在 quefrency 域中佔據不同的區域,就可以用 liftering(倒頻譜域的視窗/濾波)把它們分開。
語音的例子:語音 $x = e * v$(聲門激振 $e$ 卷積聲道脈衝響應 $v$)。
- 聲道 $v$ 的倒頻譜集中在低 quefrency($< 3$ ms)→ 頻譜包絡(共振峰)
- 激振 $e$ 的倒頻譜在高 quefrency($= T_0 \approx 5$~$10$ ms)有峰值 → 基頻
用 low-time lifter 保留低 quefrency → 只留聲道響應 → 可求共振峰。
在高 quefrency 找峰值 → 基頻估計。$\;\blacksquare$
怎麼用:三步驟
Step 1:FFT → 取模 → 取 log → IFFT → 實倒頻譜
$c[n] = \text{IFFT}\{\log|X[k]|\}$。注意 $|X[k]|$ 可能有零值 → 加小常數 $\varepsilon$ 避免 $\log(0)$:$\log(|X[k]| + \varepsilon)$。
Step 2:在 quefrency 軸上尋找峰值
忽略 quefrency $\approx 0$ 附近的直流/低頻成分。在合理的 quefrency 範圍內(根據預期的週期結構)搜索峰值。
Step 3:峰值位置 $\tau$ → 對應頻譜中的週期結構間距 $1/\tau$
以及峰值的「rahmonics」($2\tau, 3\tau, \ldots$)確認結果。
具體範例:齒輪箱故障偵測
- 齒輪箱:齒數 $z = 20$,轉速 $N_r = 1800\,\text{RPM} = 30\,\text{Hz}$
- 嚙合頻率 GMF = $z \times f_r = 20 \times 30 = 600\,\text{Hz}$
- 若齒輪有局部缺陷 → 頻譜在 600 Hz 附近出現等距邊帶:$\ldots, 540, 570, 600, 630, 660, \ldots$ Hz
- 邊帶間距 = $30\,\text{Hz}$(= 轉速頻率)
- 倒頻譜在 quefrency $= 1/30 = 33.3\,\text{ms}$ 處出現清晰峰值
- 以及在 $66.7\,\text{ms}$(2X)、$100\,\text{ms}$(3X)處出現較小的峰值(rahmonics)
- 結論:頻譜中有間距 30 Hz 的週期結構 → 指向以轉速為調變頻率的齒輪故障
應用場景
- 語音基頻偵測 (Pitch Detection):語音訊號的頻譜有一系列諧波 $F_0, 2F_0, \ldots, nF_0$。倒頻譜在 quefrency $= 1/F_0$ 處出現峰值。男性 $F_0 \approx 100\,\text{Hz}$ → 峰在 10 ms;女性 $F_0 \approx 200\,\text{Hz}$ → 峰在 5 ms。這是經典的 pitch detection 方法之一(與自相關法並列),在語音編碼(G.729)和音樂分析中廣泛使用。MFCC 特徵的前身就是倒頻譜分析。
- 齒輪箱故障邊帶分析:如上例。倒頻譜能自動從複雜的頻譜中提取邊帶間距,不需要人工辨認頻譜峰值的模式。工業軟體如 B&K PULSE、SKF @ptitude 都內建倒頻譜分析功能。ISO 13373-9 專門規範了倒頻譜在齒輪箱診斷中的應用。
- 回聲偵測與消除:如果訊號 $y[n] = x[n] + \alpha x[n-D]$(原始訊號加上延遲 $D$ 的回聲),頻譜 $|Y| = |X|\cdot|1 + \alpha e^{-j\omega D}|$。$\log|Y| = \log|X| + \log|1 + \alpha e^{-j\omega D}|$。第二項是以 $2\pi/D$ 為週期的函數 → 倒頻譜在 quefrency $= D$ 處出現峰值,精確定位回聲延遲。用於音頻後製和電話回聲消除。
- 機械故障的傳遞路徑隔離:振動訊號 $X = S \cdot H$(激振源 $S$ × 傳遞路徑 $H$)。在倒頻譜中,$c_x = c_s + c_h$。激振源的週期性特徵(如軸承故障頻率)出現在特定 quefrency,傳遞路徑的影響(結構共振的包絡)集中在低 quefrency。用 liftering 可以分離兩者,使故障特徵更清晰。
陷阱與限制
- $\log(0)$ 問題:如果 $|X[k]| = 0$(頻譜有零值),$\log(0) = -\infty$。實務上必須加一個小常數:$\log(|X[k]| + \varepsilon)$,其中 $\varepsilon \approx 10^{-10}$ ~ $10^{-12}$。$\varepsilon$ 太大會改變倒頻譜的形狀。
- 複倒頻譜的相位展開 (Phase Unwrapping) 非常棘手:複倒頻譜需要 $\log X = \log|X| + j\angle X$,其中 $\angle X$ 必須是連續的(unwrapped phase)。但離散頻譜的相位只定義在 $(-\pi, \pi]$,展開演算法在雜訊存在時經常失敗。實務中通常只用實倒頻譜(power cepstrum),避開相位問題。
- 頻率解析度與 quefrency 解析度的取捨:倒頻譜的 quefrency 解析度 = $1/f_s$(一個取樣間距)。要分辨 quefrency 差異很小的兩個峰值(即兩個接近的頻譜週期),需要很高的頻率解析度(長的 FFT),這又需要很長的資料。
- 實倒頻譜是偶函數的:$c[n] = c[-n]$(因為取 log 後是實數,IFFT 結果對稱)。只需看 $n > 0$ 的部分。
- 不適合非週期性的頻譜特徵:倒頻譜的強項是偵測「頻譜中的等距 pattern」。如果故障頻譜不是等距邊帶而是寬帶抬升或單一峰值移動,倒頻譜就不如直接看頻譜有用。
什麼時候不該用?
- 頻譜中沒有週期性 pattern:倒頻譜的優勢在於偵測「頻譜的週期性」。如果你的分析對象是單一頻率峰值或寬帶雜訊特性,直接看頻譜或 PSD 更有效
- 需要精確的功率/能量量測:對數運算破壞了線性的功率關係。如果你需要精確的頻譜能量數值 → 用 Welch PSD(3.2 節)
- 分析軸承故障(非齒輪箱):軸承故障通常用包絡譜(4.2 節)更直接有效。倒頻譜更適合齒輪箱(因為齒輪邊帶是典型的等距 pattern)
- 即時語音基頻追蹤:倒頻譜方法需要整段語音的 FFT,延遲較大。即時系統更常用自相關法或 YIN 演算法
References: [1] Bogert, Healy & Tukey, The Quefrency Alanysis of Time Series for Echoes: Cepstrum, Pseudo-Autocovariance, Cross-Cepstrum, and Saphe Cracking, Proc. Symposium on Time Series Analysis, 1963. [2] Oppenheim & Schafer, Discrete-Time Signal Processing, Ch.13 (Homomorphic Signal Processing). [3] Randall, Vibration-based Condition Monitoring: Industrial, Automotive and Aerospace Applications, Wiley, 2011. [4] Noll, Cepstrum Pitch Determination, JASA, 1967.
互動:倒頻譜回聲偵測
原始訊號加上延遲 D 的回聲。倒頻譜在 quefrency=D 處出現峰值。
5.1 短時傅立葉轉換 (Short-Time Fourier Transform, STFT)
時頻分析的基石 — 一邊滑動一邊做 FFT
為什麼要學這個? 因為大多數真實訊號的頻率會隨時間改變。FFT 只告訴你「有哪些頻率」但不告訴你「何時出現」。STFT 是最基礎的時頻分析工具,也是所有進階方法的比較基準。
前情提要:Part IV 的分析方法假設訊號的頻率特性不隨時間改變。但真實訊號通常是非平穩的。STFT 讓你同時看到『何時』和『什麼頻率』。
Learning Objectives
- 理解 STFT 的核心思想:加窗分段 + FFT,將時間資訊帶入頻率分析
- 掌握窗長、重疊率、NFFT 三個關鍵參數的選擇邏輯
- 解讀 Spectrogram(語譜圖)的典型模式
- 理解 Heisenberg 不確定性原理對 STFT 解析度的根本限制
一句話總結
STFT 就是「一邊滑動一邊做 FFT」——讓你看到頻率如何隨時間改變。把一段長訊號切成很多短片段,每一段各自做 FFT,然後把結果沿時間軸排列起來,就得到一張時頻圖(Spectrogram)。
痛點:FFT 失去了「時間」
標準 FFT 告訴你「訊號裡有哪些頻率成分」,但完全不告訴你這些成分是何時出現的。對於時變訊號,這是致命的缺陷:
- 語音:從母音 /a/ 轉換到 /i/ 時,共振峰 (Formant) 的頻率在 50ms 內急劇改變。FFT 只會把所有頻率混在一起
- 引擎振動:從怠速 800 rpm 加速到 6000 rpm,主要振動頻率連續升高。FFT 只告訴你「800~6000 rpm 的頻率都有」
- 地震波:P 波(縱波,高頻先到)和 S 波(橫波,低頻後到)需要同時分析到達時間和頻率特徵
- 音樂:一段旋律中每個音符的起止時間、音高變化、顫音——都需要時間+頻率同時分析
根本問題:傅立葉轉換的基底函數 $e^{j\omega t}$ 在時間上延伸到 $\pm\infty$,所以它天生無法提供時間定位。我們需要一種方法把訊號「局部化」到有限時段再分析。
由來
Dennis Gabor (1946) 在他的經典論文 Theory of Communication 中首次提出用 Gaussian 窗的 STFT(他稱之為「logon」)來分析通訊訊號。Gabor 的核心洞見是:訊號的資訊不僅在頻率中,也在時間中——我們需要一個聯合的時間-頻率表示。
J. B. Allen (1977) 在 IEEE 論文 Short Term Spectral Analysis, Synthesis, and Modification by Discrete Fourier Transform 中系統化了離散版 STFT 的理論,建立了窗函數選擇、重疊-相加 (Overlap-Add) 重建等完整框架,奠定了現代數位語音處理的基礎。
原理
直覺:想像你在看一場音樂會的錄音。你不是一次聽完整首歌然後分析頻率(那是 FFT),而是每隔一小段時間就「快照」一下——記錄此刻有哪些頻率、多大聲。把所有快照排成一列,就是 Spectrogram。
操作步驟:
- 選一個窗函數 $w[n]$(如 Hann 窗),長度 $L$ 點
- 把窗滑到訊號的位置 $m$,截取局部片段 $x[n] \cdot w[n-m]$
- 對這個局部片段做 FFT → 得到位置 $m$ 的局部頻譜
- 將窗滑動 $H$ 點(Hop Size),重複步驟 2-3
- 把所有局部頻譜沿時間排列 → Spectrogram
離散 STFT 定義
$$\text{STFT}\{x\}[m, k] = \sum_{n=0}^{L-1} x[n + mH]\, w[n]\, e^{-j2\pi kn/N_{\text{FFT}}}$$$m$:時間幀索引,$k$:頻率 bin 索引,$H$:Hop Size,$L$:窗長,$N_{\text{FFT}}$:FFT 長度
Spectrogram(語譜圖)
$$S[m,k] = |\text{STFT}\{x\}[m,k]|^2$$取模的平方 → 得到功率譜密度隨時間的變化
展開:連續 STFT 定義與性質推導
連續版 STFT:
$$\text{STFT}\{x\}(t,\omega) = \int_{-\infty}^{\infty} x(\tau)\, w(\tau - t)\, e^{-j\omega\tau}\, d\tau$$這可以理解為 $x(\tau)$ 與 $w(\tau - t)e^{j\omega\tau}$ 的內積——即訊號在時刻 $t$ 附近、頻率 $\omega$ 附近的「成分大小」。
反轉換(重建):
$$x(t) = \frac{1}{2\pi \|w\|^2} \int_{-\infty}^{\infty}\int_{-\infty}^{\infty} \text{STFT}\{x\}(\tau,\omega)\, w(t-\tau)\, e^{j\omega t}\, d\omega\, d\tau$$前提是窗函數 $w(t) \neq 0$(非零窗),確保完美重建。
能量守恆(Parseval-like):
$$\int_{-\infty}^{\infty} |x(t)|^2\, dt = \frac{1}{2\pi \|w\|^2} \int\!\!\int |\text{STFT}\{x\}(t,\omega)|^2\, dt\, d\omega$$Heisenberg 不確定性原理 (Uncertainty Principle)
STFT 的時間解析度 $\Delta t$ 和頻率解析度 $\Delta f$ 不能同時任意好:
窗越長 → $\Delta f$ 越小(頻率看得越清楚)→ 但 $\Delta t$ 越大(時間看得越模糊)。反之亦然。這不是技術限制,而是數學上的根本極限。STFT 在整個時頻平面上使用相同的窗 → 時頻解析度到處一樣 → 這是一個固定的矩形瓦片 (tiling)。
怎麼用:參數選擇實戰指南
Step 1:決定你需要的頻率解析度 $\Delta f$
頻率解析度由窗長決定:$\Delta f \approx f_s / L$($L$ = 窗長點數)。
公式:想要 $\Delta f = 4$ Hz,取樣率 $f_s = 1000$ Hz → 窗長 $L = f_s / \Delta f = 1000/4 = 250$ 點。
Step 2:選擇窗函數
| 窗函數 | 主瓣寬度 | 旁瓣衰減 | 適用場合 |
|---|---|---|---|
| Rectangular | 最窄 ($2f_s/L$) | -13 dB(最差) | 暫態分析、已知訊號無洩漏 |
| Hann | $4f_s/L$ | -31 dB | 通用首選 |
| Hamming | $4f_s/L$ | -43 dB | 語音分析 |
| Blackman-Harris | $8f_s/L$ | -92 dB | 高動態範圍需求 |
| Gaussian ($\alpha$=2.5) | 可調 | 無旁瓣(理論上) | Gabor 分析、最小時頻面積 |
Step 3:決定重疊率 (Overlap)
重疊率 = $(L - H)/L \times 100\%$,其中 $H$ = Hop Size。
- 50% (Hann 窗):滿足 COLA(Constant Overlap-Add)條件的最低重疊率,保證完美重建
- 75%:更平滑的時間軸、更好的時間解析度,多數情況的推薦值
- 87.5%:用於需要非常精細的時間追蹤(如 pitch tracking)
時間解析度:$\Delta t = H / f_s$(每個幀之間的時間間隔)。
Step 4:選 NFFT
NFFT $\geq$ 窗長 $L$,取下一個 2 的冪次(FFT 效率最高)。若 NFFT $>$ L → 零填充 → 頻率軸更密(插值效果,但不增加真正的頻率解析度)。
具體情境 1:語音分析
| 參數 | 值 | 理由 |
|---|---|---|
| $f_s$ | 16 kHz | 電話/語音辨識標準取樣率 |
| 窗長 $L$ | 512 點 = 32 ms | 涵蓋 2~3 個基頻週期(男性 $F_0 \approx 100$ Hz → 10 ms/週期) |
| 重疊 | 75% → $H$ = 128 點 | 平滑追蹤共振峰變化 |
| NFFT | 512 | 已是 2 的冪次 |
| $\Delta f$ | $16000/512 = 31.25$ Hz | 足以分辨相鄰共振峰 |
| $\Delta t$ | $128/16000 = 8$ ms | 足以追蹤語音的快速變化 |
具體情境 2:機械振動分析
| 參數 | 值 | 理由 |
|---|---|---|
| $f_s$ | 25.6 kHz | 振動分析常用(頻率範圍到 10 kHz) |
| 窗長 $L$ | 4096 點 = 160 ms | 需要精細的頻率解析度以分辨接近的齒輪嚙合頻率 |
| 重疊 | 75% → $H$ = 1024 點 | 追蹤轉速變化 |
| NFFT | 4096 | 已是 2 的冪次 |
| $\Delta f$ | $25600/4096 = 6.25$ Hz | 可分辨相距 10 Hz 的諧波 |
| $\Delta t$ | $1024/25600 = 40$ ms | 足以追蹤中速轉速變化 |
Python 範例:使用 scipy.signal.stft 計算 spectrogram
互動:Spectrogram 與窗長的取捨
選擇不同的訊號和窗長,觀察 Spectrogram 如何變化。窗長越長,頻率軸越清晰但時間軸越模糊,反之亦然。
應用場景
- 語音辨識前端(Mel-Spectrogram):現代 ASR 系統(如 Whisper)的輸入就是 STFT → Mel 濾波器組 → 取 log。典型設定:25ms 窗、10ms hop、80 個 Mel bin。每秒產生 100 幀 $\times$ 80 維的特徵矩陣
- 音樂資訊檢索 (MIR):分析歌曲的和弦進行、旋律線、節奏結構。使用較長的窗(2048~4096 點@44.1kHz = 46~93ms)以獲得足夠的頻率解析度區分半音
- 振動轉速追蹤 (Order Tracking):引擎加速過程中,STFT spectrogram 上的對角線就是各階次 (order) 的頻率軌跡。工程師用來找共振點(某轉速下振幅突然增大)
- 地震波分析:Spectrogram 可以區分 P 波(先到、高頻)和 S 波(後到、低頻),幫助判讀震波特徵
- 腦電圖 (EEG) 事件相關頻譜:分析受試者在特定刺激後的腦波頻率變化(如 alpha 波消失、gamma 波增強),窗長 0.5~2 秒
陷阱與限制
- 窗太長 → 時間模糊:如果訊號在 10ms 內頻率急劇變化,但你用了 100ms 的窗,這個變化會被「平均掉」,在 Spectrogram 上看起來像一團模糊
- 窗太短 → 頻率模糊:32 點的窗@1kHz → $\Delta f = 31$ Hz,根本無法分辨 440 Hz 和 460 Hz 的兩個音
- 沒有「完美」的窗長:Heisenberg 不確定性原理保證你無法同時獲得任意好的時間和頻率解析度。這是物理定律,不是技術缺陷
- Spectrogram 丟失相位:$|STFT|^2$ 捨棄了相位資訊。需要相位時(如訊號重建、Griffin-Lim 演算法)必須保留完整 STFT
- 計算輸出大小:一段 10 秒、$f_s = 44.1$ kHz 的音樂,窗長 2048、hop 512、NFFT 2048 → 時間幀 $\approx 860$、頻率 bin = 1025 → 約 88 萬個複數值。長訊號的記憶體需求可觀
什麼時候不該用 STFT?替代方案
| 情境 | 問題 | 替代方案 |
|---|---|---|
| 需要多解析度(低頻看頻率,高頻看時間) | STFT 的固定窗無法適應 | CWT(小波轉換)→ 5.4 節 |
| 分析極短暫態(< 幾個週期) | 窗長不夠短時頻率無意義 | WVD→ 5.2 節 或 匹配追蹤 (Matching Pursuit) |
| 非線性、非平穩的複雜訊號 | 正弦波基底不適合 | EMD / HHT→ 5.6 節 |
| 只需要幾個特定頻率的追蹤 | STFT 計算整個頻譜太浪費 | Goertzel 演算法或 Chirp-Z 轉換 |
References: [1] Gabor, D., Theory of Communication, J. IEE, 93(26):429-457, 1946. [2] Allen, J.B., Short Term Spectral Analysis, Synthesis, and Modification by Discrete Fourier Transform, IEEE Trans. ASSP, 25(3):235-238, 1977. [3] Oppenheim & Schafer, Discrete-Time Signal Processing, 3rd ed., Ch.10. [4] Griffin & Lim, Signal Estimation from Modified Short-Time Fourier Transform, IEEE Trans. ASSP, 1984.
✅ 快速檢核 (Quick Check)
Q1: 語音分析用 32ms 視窗(fs=16kHz → 512 點),頻率解析度是多少?
顯示答案
Δf = fs/N = 16000/512 = 31.25 Hz。足以分辨語音的共振峰(相距 ~500-1000 Hz)。
Q2: STFT 窗太短會怎樣?太長呢?
顯示答案
太短→頻率模糊(看不清頻率);太長→時間模糊(看不到快速變化)。沒有完美的窗長。
5.2 Wigner-Ville 分佈 (Wigner-Ville Distribution, WVD)
理論上最高解析度的時頻分佈 — 但伴隨「鬼影」的代價
為什麼要學這個? 因為 STFT 的時頻解析度受不確定性原理限制。WVD 突破了這個限制——代價是交叉項。理解 WVD 是理解所有二次時頻分佈的基礎。
前情提要:5.1 的 STFT 受不確定性原理限制:窗長固定 → 時頻解析度固定。WVD 嘗試突破這個限制——代價是交叉項。
Learning Objectives
- 理解 WVD 的定義及其與局部自相關函數的關係
- 證明 WVD 滿足完美的邊際性質 (Marginal Properties),不受 Heisenberg 限制
- 理解交叉項 (Cross-Term) 的成因、位置和幅度
- 掌握 Pseudo-WVD 和 Smoothed-WVD 的平滑策略
一句話總結
WVD 是理論上解析度最高的時頻分佈——但它會在你不預期的地方產生「鬼影」(交叉項, Cross-Terms)。就像一面哈哈鏡:主體看得很清楚,但旁邊會出現奇怪的幻影。
痛點:能突破 Heisenberg 嗎?
STFT 的時頻解析度受 Heisenberg 不等式 $\Delta t \cdot \Delta f \geq 1/(4\pi)$ 限制——窗長是固定的,時間和頻率的解析度此消彼長。
有沒有辦法突破這個限制,同時獲得完美的時間解析度和頻率解析度?WVD 的回答是:可以,但有代價。
由來
Eugene Wigner (1932) 在量子力學中提出此分佈,用於描述量子態在相空間(位置-動量)中的「準機率分佈」。Wigner 注意到它可以取負值——這在經典機率中不可能,反映了量子力學的非經典性。
Jean Ville (1948) 獨立地將同樣的數學形式引入訊號處理,用於分析訊號的瞬時頻率和功率。因此稱為 Wigner-Ville 分佈。
有趣的是,Wigner 後來獲得了 1963 年諾貝爾物理學獎——但不是因為 WVD,而是因為對原子核和基本粒子理論的貢獻。
原理
直覺:在每個時刻 $t$,計算訊號的「局部自相關」(以 $t$ 為中心,看前後 $\tau/2$ 的相關性),然後對延遲 $\tau$ 做傅立葉轉換 → 得到該時刻的「局部頻譜」。
Wigner-Ville Distribution
$$W_x(t,\omega) = \int_{-\infty}^{\infty} x\!\left(t + \frac{\tau}{2}\right)\, x^*\!\left(t - \frac{\tau}{2}\right)\, e^{-j\omega\tau}\, d\tau$$解讀:$x(t+\tau/2) \cdot x^*(t-\tau/2)$ 是以 $t$ 為中心的「瞬時自相關函數」。對 $\tau$ 做 FT → 就像 Wiener-Khinchin 定理一樣,自相關的 FT = 功率譜。只不過這裡是局部的、隨時間變化的。
完美的邊際性質 (Marginal Properties)
WVD 滿足以下令人驚喜的性質:
這意味著 WVD 是一種「理想」的能量分佈——時間和頻率的投影分別精確等於瞬時功率和功率譜。沒有 Heisenberg 不等式的限制。
展開:時間邊際性質證明
計算 $\int W_x(t,\omega)\, d\omega/(2\pi)$:
$$\int \frac{d\omega}{2\pi} \int x\!\left(t+\frac{\tau}{2}\right) x^*\!\left(t-\frac{\tau}{2}\right) e^{-j\omega\tau}\, d\tau$$交換積分順序:
$$= \int x\!\left(t+\frac{\tau}{2}\right) x^*\!\left(t-\frac{\tau}{2}\right) \underbrace{\left[\int \frac{e^{-j\omega\tau}}{2\pi}\, d\omega\right]}_{\delta(\tau)}\, d\tau$$利用 $\delta(\tau)$ 的篩選性質,令 $\tau = 0$:
$$= x(t)\, x^*(t) = |x(t)|^2 \quad \blacksquare$$展開:單成分 Chirp 的 WVD 精確結果
考慮線性 chirp $x(t) = e^{j(\omega_0 t + \beta t^2/2)}$(瞬時頻率 $\omega_i(t) = \omega_0 + \beta t$)。
代入 WVD:
$$x\!\left(t+\frac{\tau}{2}\right) x^*\!\left(t-\frac{\tau}{2}\right) = e^{j(\omega_0 + \beta t)\tau}$$因此:
$$W_x(t,\omega) = \int e^{j(\omega_0+\beta t)\tau}\, e^{-j\omega\tau}\, d\tau = 2\pi\,\delta(\omega - \omega_0 - \beta t)$$WVD 在時頻平面上精確地聚集在瞬時頻率 $\omega_i(t) = \omega_0 + \beta t$ 這條線上——完美的時頻定位,沒有任何模糊。$\blacksquare$
致命問題:交叉項 (Cross-Terms)
對於多成分訊號 $x = x_1 + x_2$:
其中交叉項 $W_{x_1,x_2}(t,\omega) = \int x_1(t+\tau/2)\, x_2^*(t-\tau/2)\, e^{-j\omega\tau}\, d\tau$。
交叉項的三個恐怖性質:
- 位置:出現在 $x_1$ 和 $x_2$ 的時頻位置的中間點(時間和頻率各取平均)
- 幅度:可以跟自項一樣大,甚至更大
- 振盪:交叉項是快速振盪的(在兩個分量的時頻差方向上振盪),頻率正比於兩分量的時頻距離
對 $N$ 個成分的訊號,自項有 $N$ 個,交叉項有 $N(N-1)/2$ 個——當 $N$ 大時,交叉項完全淹沒自項!
怎麼用
- 取解析訊號 (Analytic Signal):先對 $x(t)$ 做 Hilbert 轉換得到解析訊號 $z(t) = x(t) + j\hat{x}(t)$。這消除了正頻率和負頻率之間的交叉項(這類交叉項會出現在零頻率附近,很惱人)
-
計算離散 WVD:
% MATLAB / Octave 概念碼 N = length(z); WV = zeros(N, N); for n = 1:N for tau = -(N-1):(N-1) n1 = n + round(tau/2); n2 = n - round(tau/2); if n1 >= 1 && n1 <= N && n2 >= 1 && n2 <= N WV(n, :) = WV(n, :) + z(n1)*conj(z(n2)) * exp(-1j*2*pi*(0:N-1)*tau/N); end end end
注意:計算量為 $O(N^2)$,遠大於 STFT 的 $O(N \log N)$。
-
用核函數平滑以抑制交叉項:
- Pseudo-WVD (PWVD):只在 $\tau$ 方向加窗 → 抑制遠離 $\tau=0$ 的交叉項分量
- Smoothed Pseudo-WVD (SPWVD):在 $t$ 和 $\tau$ 方向都加窗 → 更強的交叉項抑制,但解析度損失更大
- 視覺化:繪製 $W_x(t,\omega)$。注意 WVD 可以取負值——這不是錯誤,而是其非經典性質(類似量子力學中的準機率分佈)
應用場景
- 單成分 Chirp 訊號的精確時頻分析:雷達回波中的線性調頻脈衝 (LFM chirp),WVD 可以精確到理論極限。例如:一個 10 MHz 帶寬、100 $\mu$s 脈寬的雷達 chirp,WVD 完美還原其時頻斜率 $\beta = 10^{11}$ Hz/s
- 雷達模糊函數 (Ambiguity Function):模糊函數 $A(\tau, \nu)$ 恰好是 WVD 的 2D 傅立葉轉換。因此 WVD 的性質直接對應雷達波形的距離-速度解析能力
- 量子光學 / 量子資訊:Wigner 函數至今仍是描述光場量子態(如壓縮態、Fock 態、cat 態)的主要工具
陷阱與限制
- 多成分訊號幾乎無法直接使用:3 個成分就有 3 個交叉項,10 個成分有 45 個交叉項。平滑後解析度優勢大打折扣
- 計算量 $O(N^2)$:比 STFT 的 $O(N \log N)$ 大很多。N = 10000 時,WVD 約需 STFT 的 750 倍計算時間
- 可以取負值:不能直接解讀為「能量分佈」——雖然邊際是正確的,但局部的負值讓物理解釋變得困難
- 離散化的困難:需要 2 倍過取樣 (oversampling) 才能避免離散 WVD 的混疊 (aliasing)
什麼時候不該用 WVD?替代方案
| 情境 | 問題 | 替代方案 |
|---|---|---|
| 多成分訊號 | 交叉項太多 | Smoothed Pseudo-WVD 或 Choi-Williams→ 5.3 Cohen's Class |
| 需要快速計算 | $O(N^2)$ 太慢 | STFT($O(N\log N)$) |
| 非線性非平穩訊號 | 二次分佈的假設不夠靈活 | EMD / HHT→ 5.6 節 |
| 需要無交叉項且高解析度 | WVD 的交叉項無法根除 | SST→ 5.7 節 |
References: [1] Wigner, E., On the Quantum Correction for Thermodynamic Equilibrium, Phys. Rev., 40:749-759, 1932. [2] Ville, J., Theorie et Applications de la Notion de Signal Analytique, Cables et Transmission, 2(1):61-74, 1948. [3] Claasen, T.A.C.M. & Mecklenbräuker, W.F.G., The Wigner Distribution, Philips J. Res., 1980. [4] Cohen, L., Time-Frequency Analysis, Prentice Hall, 1995.
互動:WVD vs STFT 並排比較
比較 STFT 頻譜圖與 Pseudo-WVD。WVD 有更好的時頻解析度,但雙成分訊號會出現交叉項。
5.3 Cohen's Class 一般化二次時頻分佈
統一框架 — 所有二次時頻分佈都是 WVD 的平滑版本
為什麼要學這個? 因為 STFT 和 WVD 只是時頻分析的兩個極端。Cohen's Class 提供了統一的數學框架,讓你理解所有二次時頻分佈都是「怎麼平滑 WVD」的不同選擇。
前情提要:5.2 的 WVD 有交叉項問題。5.1 的 STFT 沒交叉項但解析度差。Cohen's Class 提供了一個統一框架,讓你在兩者之間找到最佳折衷。
Learning Objectives
- 理解 Cohen's Class 的統一公式:核函數 $\Phi(\theta,\tau)$ 完全決定分佈的性質
- 認識核函數與自項保留 / 交叉項抑制的取捨關係
- 比較 WVD、Spectrogram、Choi-Williams 等具體分佈
- 根據訊號特性選擇適當的核函數
一句話總結
Cohen's Class 是一個統一框架:STFT 的 Spectrogram、WVD、以及所有介於兩者之間的時頻分佈——差別只在「用什麼核函數 (Kernel Function) 平滑 WVD」。選核函數就像調收音機的旋鈕:一端是最高解析度但有交叉項(WVD),另一端是無交叉項但模糊(Spectrogram)。
痛點:STFT 和 WVD 之間能否折衷?
我們現在面對兩個極端:
- STFT Spectrogram:沒有交叉項 ✓ 但解析度受 Heisenberg 限制 ✗
- WVD:解析度不受限制 ✓ 但多成分訊號交叉項嚴重 ✗
有沒有一種介於兩者之間的分佈——保留大部分的解析度優勢,同時有效抑制交叉項?Cohen's Class 提供了系統化的答案。
由來
Leon Cohen (1966, 1989) 提出了這個統一理論。他的核心洞見是:所有「合理的」二次時頻分佈(即滿足時移-頻移共變性的)都可以用同一個數學框架描述,只差在一個二維核函數 $\Phi(\theta, \tau)$ 的選擇。
1989 年他在 Proceedings of the IEEE 上發表的綜述論文 Time-Frequency Distributions — A Review 成為時頻分析領域被引用最多的論文之一(超過 5000 次引用)。
原理
直覺:想像 WVD 是一張高解析度但有很多雜訊(交叉項)的照片。Cohen's Class 就是對這張照片用不同的模糊濾鏡處理——濾鏡越強,雜訊越少,但細節也越模糊。不同的核函數 = 不同的模糊濾鏡。
Cohen's Class 統一公式
$$C_x(t,\omega) = \frac{1}{4\pi^2}\int\!\!\int\!\!\int e^{-j\theta t - j\tau\omega + j\theta u}\, \Phi(\theta,\tau)\, x\!\left(u+\frac{\tau}{2}\right) x^*\!\left(u-\frac{\tau}{2}\right)\, du\, d\tau\, d\theta$$$\Phi(\theta,\tau)$:核函數,完全決定分佈的性質
等價地,可以寫成 WVD 與核函數的二維卷積:
其中 $\phi(t,\omega)$ 是 $\Phi(\theta,\tau)$ 的 2D 傅立葉轉換
含義:所有 Cohen's Class 分佈都是 WVD 的某種二維平滑。核函數決定了在時頻平面的哪些方向、平滑多少。
展開:核函數性質與邊際條件的關係
定理:Cohen's Class 分佈 $C_x$ 滿足邊際性質(即 $\int C_x\, d\omega = |x(t)|^2$ 且 $\int C_x\, dt = |X(\omega)|^2$)的充要條件是:
$$\Phi(\theta, 0) = 1 \;\;\forall\theta \quad \text{且} \quad \Phi(0, \tau) = 1 \;\;\forall\tau$$證明(時間邊際):
$$\int C_x(t,\omega)\, \frac{d\omega}{2\pi} = \frac{1}{2\pi}\int\!\!\int\!\!\int\!\!\int e^{-j\theta t - j\tau\omega + j\theta u}\, \Phi\, K_x(u,\tau)\, du\, d\tau\, d\theta\, d\omega$$先對 $\omega$ 積分:$\int e^{-j\tau\omega}\, d\omega/(2\pi) = \delta(\tau)$,令 $\tau = 0$:
$$= \frac{1}{2\pi}\int\!\!\int e^{-j\theta t + j\theta u}\, \Phi(\theta, 0)\, |x(u)|^2\, du\, d\theta$$若 $\Phi(\theta, 0) = 1$:$= \int |x(u)|^2\, \delta(t-u)\, du = |x(t)|^2 \quad \blacksquare$
注意:大部分實用的核函數不同時滿足兩個邊際條件。放棄邊際性質是抑制交叉項的代價。
常見核函數比較
| 核函數 $\Phi(\theta,\tau)$ | 分佈名稱 | 自項保留 | 交叉項抑制 | 邊際性質 |
|---|---|---|---|---|
| $\Phi = 1$ | WVD | 完美 | 無 | 完美 |
| $\Phi = e^{-\theta^2\tau^2/\sigma}$ | Choi-Williams (CWD) | 好 | 抑制遠離原點的交叉項 | 滿足 |
| $\Phi = e^{-|\theta\tau|^\alpha}$ | Zhao-Atlas-Marks (ZAM) | 好 | 抑制離軸交叉項 | 滿足 |
| $\Phi = h(\tau)$ (只依賴 $\tau$) | Pseudo-WVD | 中等 | $\tau$ 方向平滑 | 頻率邊際 ✓ 時間邊際 ✗ |
| $|H(\omega)|^2$ (Spectrogram) | Spectrogram | 最模糊 | 完全抑制 | 不滿足 |
Spectrogram 也是 Cohen's Class 的成員!可以證明 $|\text{STFT}|^2$ 等價於用窗函數的 WVD 作為核來平滑訊號的 WVD:
$S_x(t,\omega) = \iint W_h(t'-t, \omega'-\omega)\, W_x(t',\omega')\, dt'\, d\omega'$
其中 $W_h$ 是窗函數 $h$ 的 WVD。這就是為什麼 Spectrogram 沒有交叉項——因為用了「最重的」平滑。
怎麼用
- 分析你的訊號特性:成分數量?時頻距離?SNR?
- 選擇核函數:
- 單成分 → WVD($\Phi = 1$),無交叉項問題
- 少數成分、間距較大 → Choi-Williams($\sigma = 1$~$10$),通常是最佳折衷起點
- 成分很多或很接近 → Spectrogram(完全抑制交叉項,接受解析度損失)
- 調參數:Choi-Williams 的 $\sigma$ 越大 → 平滑越少 → 越接近 WVD;$\sigma$ 越小 → 平滑越多 → 越接近 Spectrogram
- 視覺化與驗證:檢查是否仍有殘餘交叉項(在不應有成分的地方出現振盪)
實用建議:先用 Spectrogram 快速觀察訊號的大致時頻結構,確認成分數量和位置。然後用 Choi-Williams 提高解析度,從 $\sigma = 1$ 開始逐漸增大,直到交叉項開始出現。
應用場景
- 引擎加速分析:Choi-Williams 分佈可以清晰呈現齒輪嚙合頻率如何隨轉速線性升高,同時抑制不同階次之間的交叉項。典型參數 $\sigma = 5$,分析 0-6000 rpm 加速過程
- 語音過渡段分析:子音到母音的過渡(如 /ba/ → /a/)涉及共振峰的快速遷移。CWD 比 Spectrogram 更能精確定位遷移的時間和頻率軌跡
- 海洋聲學:水下通道中的多徑傳播導致多個時頻成分重疊。Cohen's Class 分佈幫助分離不同路徑的到達時間和都卜勒頻移
陷阱與限制
- 沒有「最好的」核函數:不同訊號適合不同的核。自動選擇核函數仍是開放研究問題
- 邊際性質通常被犧牲:多數實用的核函數不滿足完美邊際條件,因此時間或頻率投影會有誤差
- 計算量:一般的 Cohen's Class 計算量為 $O(N^2)$ 或更大(三重積分),遠比 STFT 慢
- 可以取負值:與 WVD 一樣,Cohen's Class 分佈一般可以取負值(除非核函數被設計為正定的,如 Spectrogram)
什麼時候不該用?替代方案
| 情境 | 問題 | 替代方案 |
|---|---|---|
| 訊號是多個純正弦波 + 雜訊 | 二次分佈不是最佳工具 | MUSIC / ESPRIT(參數式方法更直接) |
| 需要即時處理 (Real-Time) | $O(N^2)$ 太慢 | STFT($O(N\log N)$),犧牲解析度換速度 |
| 訊號高度非線性 | 二次分佈的假設(平穩性近似)不成立 | EMD / HHT→ 5.6 節 |
| 需要多尺度分析 | Cohen's Class 是固定解析度 | CWT→ 5.4 節 |
References: [1] Cohen, L., Generalized Phase-Space Distribution Functions, J. Math. Phys., 7(5):781-786, 1966. [2] Cohen, L., Time-Frequency Distributions — A Review, Proc. IEEE, 77(7):941-981, 1989. [3] Choi, H. & Williams, W., Improved Time-Frequency Representation of Multicomponent Signals, IEEE Trans. ASSP, 37(6):862-871, 1989. [4] Hlawatsch, F. & Boudreaux-Bartels, G.F., Linear and Quadratic Time-Frequency Signal Representations, IEEE SP Magazine, 1992.
5.4 連續小波轉換 (Continuous Wavelet Transform, CWT)
多解析度時頻分析 — 低頻看頻率,高頻看時間,自動適應
為什麼要學這個? 因為 STFT 的窗長固定,但你常常同時需要看清低頻和定位高頻暫態。小波的多解析度特性自動解決了這個矛盾——這是它在地震學、金融、神經科學中被大量使用的原因。
前情提要:5.3 的 Cohen's Class 仍然使用固定的分析窗。CWT 用可伸縮的小波——低頻自動用長窗、高頻自動用短窗——突破了固定窗的限制。
🌉 從 STFT 到 CWT:為什麼需要小波?
STFT 用固定大小的窗分析訊號,這帶來一個根本問題:
- 低頻訊號變化慢,需要長窗才能解析頻率(但就會失去時間定位)
- 高頻訊號變化快,需要短窗才能定位事件(但會失去頻率精度)
- STFT 只能選一個固定窗長 → 兩端都不滿意
具體例子:分析音樂訊號時,低音(50-200 Hz, 持續 0.5s)需要 ~200ms 窗,但鈸的瞬間擊打(5kHz, 持續 5ms)需要 ~5ms 窗。STFT 不能同時做到。
CWT 的解法:用「會伸縮的窗」——分析高頻時自動變短(時間精度好),分析低頻時自動變長(頻率精度好)。這就是多解析度分析。
下面就來看 CWT 怎麼用一個母小波 $\psi(t)$ 透過尺度(窗的寬度)和位移(窗的位置)兩個參數,達成這個自適應分析。
Learning Objectives
- 理解 CWT 如何透過尺度伸縮 (Dilation) 實現多解析度分析
- 掌握容許條件 (Admissibility Condition) 的物理意義
- 比較 Morlet 和 Mexican Hat 小波的特性與適用場合
- 能將尺度 $a$ 與頻率 $f$ 相互轉換
- 理解 Cone of Influence 的邊界效應
一句話總結
CWT 是 STFT 的進化版——低頻用長窗看清頻率,高頻用短窗看清時間,自動適應。就像望遠鏡的變焦:看遠處(低頻)時自動放大,看近處(高頻)時自動縮小。
痛點:STFT 的固定窗困境
STFT 的窗長是固定的。但很多實際訊號需要不同頻率用不同的解析度:
- 地震波:低頻成分($< 1$ Hz 的面波)需要很長的窗($> 5$ 秒)才能看清頻率,但同時高頻成分($> 10$ Hz 的體波)需要短窗($< 100$ ms)才能精確定位到達時間。STFT 不能兩全
- 音樂:低音的 C2 (65 Hz) 與 C#2 (69 Hz) 只差 4 Hz,需要長窗分辨;但高音區的打擊聲需要毫秒級的時間定位
- 生醫訊號:ECG 的 QRS 波群持續 60-100 ms(高頻),但 T 波持續 200-400 ms(低頻),分析需求截然不同
STFT 的根本限制:固定窗 = 固定的時頻矩形瓦片。所有頻率都用同樣大小的瓦片,無法同時滿足低頻和高頻的不同需求。CWT 的解決方案:讓瓦片的寬高隨頻率自動調整。
由來
Jean Morlet (1982),一位法國地球物理學家,在分析地震波時首先提出了小波分析的概念。他發現傅立葉分析對地震波效果不好(地震訊號短暫、非平穩),於是想到用不同寬度的「小波浪」(wavelet = 小波)來匹配不同頻率的成分。
Alex Grossmann & Jean Morlet (1984) 在 SIAM 上共同發表了嚴格的數學框架,定義了連續小波轉換和容許條件。Grossmann 是理論物理學家,他為 Morlet 的直覺提供了堅實的數學基礎。
Ingrid Daubechies (1988) 進一步建立了小波理論的嚴格框架,構造了具有緊支撐 (compact support) 的正交小波基底,開啟了離散小波的時代(→ 5.5 節)。
原理
直覺:選一個「母小波」$\psi(t)$(一個短暫的振盪波形)。要分析低頻 → 把母小波拉長(放大尺度 $a$)→ 低頻匹配度高、窗長自動變長。要分析高頻 → 把母小波壓縮(縮小尺度 $a$)→ 高頻匹配度高、窗長自動變短。
連續小波轉換 (CWT)
$$W_x(a, b) = \frac{1}{\sqrt{|a|}}\int_{-\infty}^{\infty} x(t)\, \psi^*\!\left(\frac{t-b}{a}\right)\, dt$$$a$:尺度 (Scale),控制小波的寬度($a$ 大 → 拉長 → 低頻)
$b$:平移 (Translation),控制小波的時間位置
$\psi$:母小波 (Mother Wavelet)
$1/\sqrt{|a|}$:能量歸一化因子
容許條件 (Admissibility Condition)
母小波必須滿足:
此條件要求 $\hat{\Psi}(0) = 0$,即母小波的均值為零:$\int \psi(t)\, dt = 0$。
物理直覺:小波必須是振盪的(正負交替),不能有直流分量。這保證了 CWT 的可逆性。
展開:CWT 反轉換公式推導
CWT 的反轉換(重建公式):
$$x(t) = \frac{1}{C_\psi}\int_0^{\infty}\int_{-\infty}^{\infty} W_x(a,b)\, \frac{1}{\sqrt{a}}\,\psi\!\left(\frac{t-b}{a}\right)\, db\, \frac{da}{a^2}$$證明的關鍵步驟是利用 Parseval 定理和容許條件,在頻率域進行:
$$\hat{W}_x(a,\omega) = \sqrt{a}\, \hat{X}(\omega)\, \hat{\Psi}^*(a\omega)$$代入反轉換,對 $a$ 積分時利用:
$$\int_0^{\infty} |\hat{\Psi}(a\omega)|^2\, \frac{da}{a} = C_\psi \quad \text{(與 $\omega$ 無關)}$$因此 $x(t)$ 被完美重建。$\blacksquare$
多解析度特性:CWT vs STFT 的時頻瓦片
| STFT | CWT | |
|---|---|---|
| 時頻瓦片形狀 | 固定大小的矩形 | 隨尺度變化:低頻寬高、高頻窄矮 |
| 低頻行為 | $\Delta f$ 固定(可能不夠小) | $\Delta f$ 小(長窗 → 頻率解析度高) |
| 高頻行為 | $\Delta t$ 固定(可能不夠小) | $\Delta t$ 小(短窗 → 時間解析度高) |
| 面積 $\Delta t \cdot \Delta f$ | 固定(= 由窗函數決定) | 固定(= 由母小波決定) |
| 基底函數 | 平移 + 調變(加窗的 $e^{j\omega t}$) | 平移 + 伸縮(縮放的 $\psi$) |
關鍵理解:CWT 並沒有「違反」Heisenberg 不確定性原理——每個瓦片的面積 $\Delta t \cdot \Delta f$ 仍然受限。差別在於瓦片的形狀隨頻率自動調整,讓每個頻率都得到最適合的時間/頻率解析度比例。
常用母小波 (Mother Wavelets)
Morlet 小波(最常用於時頻分析)
$\omega_0 \approx 5$~$6$(中心頻率,常取 $\omega_0 = 6$)
Gaussian 包絡的複指數 → 時域和頻域都近似 Gaussian → 最小的時頻面積(接近 Heisenberg 極限)。是時頻分析的首選。
Mexican Hat(DOG-2,常用於奇異點偵測)
Gaussian 的負二階導數。實值小波 → 沒有複數相位資訊。形狀像墨西哥帽。適合偵測訊號的尖峰和奇異點。
尺度 ↔ 頻率的對應
$f_\psi$:母小波的中心頻率(Morlet with $\omega_0 = 6$:$f_\psi \approx 0.955$ Hz);$\Delta t$:取樣間隔
注意:尺度與頻率的對應不是精確的,取決於母小波的頻譜形狀。不同的母小波有不同的 $f_\psi$ 值。不要把尺度和頻率畫等號。
怎麼用:Step-by-Step
-
Step 1:選母小波
- 時頻分析 → Morlet(複值,有相位,時頻解析度最佳)
- 奇異點 / 邊緣偵測 → Mexican Hat(實值,對尖峰敏感)
- 需要與 DWT 一致 → Daubechies(緊支撐,用於驗證 DWT 結果)
-
Step 2:決定尺度範圍 $[a_{\min}, a_{\max}]$
- 對應頻率範圍 $[f_{\min}, f_{\max}]$:$a_{\min} = f_\psi / (f_{\max} \cdot \Delta t)$,$a_{\max} = f_\psi / (f_{\min} \cdot \Delta t)$
- 尺度通常等比取樣(對數間隔):$a_k = a_{\min} \cdot 2^{k \cdot dj}$,$dj$ 常取 $1/12$~$1/4$
-
Step 3:計算 CWT 係數
% MATLAB 範例 scales = 2.^(0:0.1:7); % 尺度範圍 coefs = cwtft(x, 'wavelet','morl','scales',scales); % 或用內建函數 [wt, f] = cwt(x, fs, 'amor'); % 'amor' = analytic Morlet
-
Step 4:繪製 Scalogram
$|W_x(a,b)|^2$ — 能量隨尺度(或對應頻率)和時間的分佈。y 軸通常取對數尺度。
具體範例:心電圖 QRS 波群偵測
| 參數 | 值 | 理由 |
|---|---|---|
| 訊號 | ECG,$f_s = 360$ Hz | MIT-BIH 資料庫標準 |
| 母小波 | Morlet ($\omega_0 = 6$) | 同時需要時間定位和頻率分析 |
| 頻率範圍 | 10-40 Hz | QRS 波群的主要能量頻帶 |
| 尺度範圍 | $a \approx 8.6$~$34.4$ | $a = f_\psi / (f \cdot \Delta t)$,$\Delta t = 1/360$ |
| 結果 | Scalogram 在 10-40 Hz 帶的峰值 | 精確對應每次心跳的 R 峰位置 |
互動:CWT Scalogram
Chirp 訊號的 Morlet CWT scalogram。注意低頻區頻率解析度高但時間解析度低(寬而薄的瓦片),高頻區時間解析度高但頻率解析度低(窄而厚的瓦片)。
應用場景
- 地震學:CWT 是分析地震波的標準工具。低頻面波(0.01-0.1 Hz)用大尺度精確量測頻率(判斷地殼厚度),高頻體波(1-20 Hz)用小尺度精確定位到達時間(定位震源)。Morlet CWT 在 IRIS 地震資料中心被廣泛使用
- 金融時間序列:Morlet CWT 用於分析股票指數的多尺度波動性。大尺度(數月~年)揭示商業週期,小尺度(日~週)顯示短期波動。可以發現不同時段的主導週期如何變化
- 神經科學(腦波分析):分析 EEG 的事件相關頻譜擾動 (ERSP)。CWT 在 delta (1-4 Hz)、theta (4-8 Hz)、alpha (8-12 Hz)、beta (13-30 Hz)、gamma (30-100 Hz) 各頻帶自動提供適當的時間/頻率解析度
- 機械故障暫態偵測:軸承損壞產生的週期性衝擊脈衝(高頻暫態),CWT 可以精確定位每次衝擊的時間,同時分析其頻率特徵(判斷是內環、外環還是滾動體故障)
陷阱與限制
- 尺度 ↔ 頻率不精確:不同母小波有不同的 $f_\psi$,而且母小波的頻譜寬度意味著每個尺度對應的是一個頻率範圍而非單一頻率
- 邊界效應 — Cone of Influence (COI):在訊號的開頭和結尾,大尺度的小波「伸出」訊號邊界。COI 以外的區域不可信——通常在 scalogram 上標記為陰影區
- 計算量比 STFT 大:CWT 對所有尺度和平移計算 → $O(N \cdot N_{\text{scales}})$。若用頻率域卷積加速 → $O(N \log N \cdot N_{\text{scales}})$
- 高度冗餘:CWT 產生的係數遠多於原始訊號長度(連續的 $a$ 和 $b$),因此不適合用於壓縮
- 重建公式需要容許條件:若母小波不嚴格滿足容許條件(如 Morlet 小波在 $\omega_0 < 5$ 時),重建會有誤差
什麼時候不該用 CWT?替代方案
| 情境 | 問題 | 替代方案 |
|---|---|---|
| 只需要八度頻帶分解(壓縮、去噪) | CWT 太冗餘、太慢 | DWT($O(N)$,無冗餘)→ 5.5 節 |
| 需要固定頻率解析度 | CWT 的頻率解析度隨尺度變化 | STFT(固定 $\Delta f$)→ 5.1 節 |
| 需要最高時頻聚焦度 | CWT 因母小波寬度而模糊 | SST(銳化 CWT)→ 5.7 節 |
| 非線性訊號、不想預設基底 | 小波仍是預設的基底函數 | EMD / HHT→ 5.6 節 |
References: [1] Morlet, J. et al., Wave Propagation and Sampling Theory, Geophysics, 47(2):203-236, 1982. [2] Grossmann, A. & Morlet, J., Decomposition of Hardy Functions into Square Integrable Wavelets of Constant Shape, SIAM J. Math. Anal., 15:723-736, 1984. [3] Daubechies, I., Ten Lectures on Wavelets, SIAM, 1992. [4] Torrence, C. & Compo, G.P., A Practical Guide to Wavelet Analysis, Bull. Amer. Meteorol. Soc., 1998.
✅ 快速檢核 (Quick Check)
Q1: CWT 跟 STFT 的根本差異是什麼?
顯示答案
STFT 的窗寬固定。CWT 的窗寬隨頻率自適應調整:低頻用長窗(高頻率解析度),高頻用短窗(高時間解析度)。
Q2: 母小波為什麼需要滿足零均值條件?
顯示答案
這是容許條件 (admissibility condition),保證 CWT 可逆。物理意義:小波必須是振盪的(有正有負),不能是純正或純負。
5.5 離散小波轉換 (Discrete Wavelet Transform, DWT)
Mallat 的濾波器組架構 — 像洋蔥一樣逐層剝開頻帶
為什麼要學這個? 因為 CWT 計算量大且冗餘度高。DWT 用 O(N) 的計算量實現了同樣的多解析度分析,是 JPEG 2000 影像壓縮和 ECG 去噪的工業標準。
前情提要:5.4 的 CWT 計算量大(連續尺度和位移)。DWT 用濾波器組實現了 O(N) 的離散版本,是影像壓縮和去噪的工業標準。
Learning Objectives
- 理解 DWT 等價於迭代的二通道濾波器組 (Mallat 演算法)
- 掌握頻率域的八度分解結構
- 理解消失矩 (Vanishing Moments) 的直覺意義與實際影響
- 學會選擇小波族、分解層數,並應用於去噪和壓縮
- 認識 DWT 的平移不變性問題及解決方案
一句話總結
DWT 用一組遞迴的低通 + 高通濾波器把訊號逐層拆解——像洋蔥一樣一層一層剝開不同的頻帶。每剝一層,頻率範圍二分,資料量也減半,因此整個計算只需要 $O(N)$ 時間。
痛點:CWT 太冗餘、太慢
CWT 在連續的尺度 $a$ 和連續的平移 $b$ 上計算 → 產生大量冗餘的係數(遠多於原始訊號的資料量)。這在理論分析中很好,但在工程應用中有三個問題:
- 計算量大:$O(N \cdot N_{\text{scales}} \cdot \log N)$,對長訊號不切實際
- 冗餘度高:不適合壓縮(目標是用最少的係數表示訊號)
- 無正交性:連續尺度的小波不構成正交基底,不利於數學分析
解決:只在二進取樣 (dyadic sampling) 的尺度 $a = 2^j$ 和平移 $b = k \cdot 2^j$ 上計算 → DWT。
由來
Stephane Mallat (1989) 做出了連接小波理論與工程實作的關鍵貢獻:他證明 DWT 等價於迭代的二通道濾波器組,可以用 $O(N)$ 的計算量完成。這個演算法被稱為 Mallat 演算法(或金字塔演算法, Pyramid Algorithm),讓小波從理論走向實用。
Ingrid Daubechies (1988) 構造了具有緊支撐 (Compact Support)的正交小波基底——意味著濾波器長度有限、可以精確數位實現。她構造的 Daubechies 小波族(db1=Haar, db2, db3, ..., dbN)至今是最廣泛使用的小波。
Daubechies 後來在 2019 年獲得了 Fudan-Zhongzhi 科學獎,2023 年獲得 Wolf 數學獎,是小波理論最重要的奠基者之一。
原理:Mallat 快速小波轉換
直覺:每一級分解把訊號通過兩個濾波器——低通(留下低頻的「大致輪廓」)和高通(留下高頻的「細節」)。然後對低頻部分降取樣(因為頻寬減半,取樣率可以減半),再用同樣的方法繼續分解。就像剝洋蔥:每剝一層,露出更深處的結構。
分解公式 (Analysis)
$$c_{A}^{(j+1)}[k] = \sum_{n} h[n - 2k]\, c_{A}^{(j)}[n] \quad \text{(低通濾波 + 降取樣 2 → 近似係數 Approximation)}$$ $$c_{D}^{(j+1)}[k] = \sum_{n} g[n - 2k]\, c_{A}^{(j)}[n] \quad \text{(高通濾波 + 降取樣 2 → 細節係數 Detail)}$$$h[n]$:低通分解濾波器(對應尺度函數);$g[n]$:高通分解濾波器(對應小波函數)
$g[n] = (-1)^n h[L-1-n]$(QMF 關係)
重建公式 (Synthesis)
$$c_{A}^{(j)}[n] = \sum_{k} \tilde{h}[n - 2k]\, c_{A}^{(j+1)}[k] + \sum_{k} \tilde{g}[n - 2k]\, c_{D}^{(j+1)}[k]$$$\tilde{h}, \tilde{g}$:重建濾波器。完美重建 (Perfect Reconstruction) 條件保證 $x = \text{IDWT}(\text{DWT}(x))$。
頻率域的八度分解
假設 $f_s$ 為取樣率,有效頻率範圍 $[0, f_s/2]$:
| 分解層級 | 細節係數頻帶 | 近似係數頻帶 | 係數數量 |
|---|---|---|---|
| Level 1 | $[f_s/4,\; f_s/2]$ | $[0,\; f_s/4]$ | $N/2$ + $N/2$ |
| Level 2 | $[f_s/8,\; f_s/4]$ | $[0,\; f_s/8]$ | $N/4$ + $N/4$ |
| Level 3 | $[f_s/16,\; f_s/8]$ | $[0,\; f_s/16]$ | $N/8$ + $N/8$ |
| Level $J$ | $[f_s/2^{J+1},\; f_s/2^J]$ | $[0,\; f_s/2^{J+1}]$ | $N/2^J$ + $N/2^J$ |
總係數數 = $N$(無冗餘)。計算量 = $N + N/2 + N/4 + \cdots < 2N = O(N)$。
展開:完美重建條件 (PR) 推導
在 $z$ 域中,二通道濾波器組的分析-合成系統輸出為:
$$\hat{X}(z) = \frac{1}{2}\left[\tilde{H}(z)H(z) + \tilde{G}(z)G(z)\right]X(z) + \frac{1}{2}\left[\tilde{H}(z)H(-z) + \tilde{G}(z)G(-z)\right]X(-z)$$完美重建要求:
- 消除混疊 (Aliasing Cancellation):$\tilde{H}(z)H(-z) + \tilde{G}(z)G(-z) = 0$
- 無失真 (No Distortion):$\tilde{H}(z)H(z) + \tilde{G}(z)G(z) = 2z^{-d}$(延遲 $d$ 的完美通過)
對正交小波($\tilde{H} = H$, $\tilde{G} = G$),只需要 $H(z)$ 滿足:
$$|H(e^{j\omega})|^2 + |H(e^{j(\omega+\pi)})|^2 = 2$$這就是 Daubechies 用來構造正交小波的關鍵方程。$\blacksquare$
消失矩 (Vanishing Moments) 的直覺
小波 $\psi(t)$ 有 $p$ 個消失矩,意思是:
直覺解釋:$p$ 個消失矩 = 小波對 $p-1$ 次多項式「視而不見」。
- 1 個消失矩 (Haar):對常數(0 次多項式)視而不見 → 只捕捉「與常數不同」的部分
- 2 個消失矩 (db2):對常數和線性趨勢都視而不見 → 只捕捉「與直線不同」的部分
- 4 個消失矩 (db4):對 $\leq 3$ 次多項式視而不見 → 只捕捉更高階的細節
實際影響:消失矩越多 → 平滑區域的小波係數越小(趨近零)→ 壓縮效率越高(更多係數可以丟棄)。但代價是:濾波器越長(db$p$ 的濾波器長度 = $2p$)→ 計算延遲越大、邊界效應越嚴重。
怎麼用:Step-by-Step
-
Step 1:選小波族
小波 濾波器長度 消失矩 特性 適用場合 Haar (db1) 2 1 最簡單,不連續 二值訊號、步階偵測 db4 8 4 緊支撐,不對稱 通用首選 sym8 16 8 近似對稱 需要近線性相位 coif3 18 6 (小波) + 6 (尺度) 小波和尺度函數都有消失矩 數值分析、近似 CDF 9/7 9+7 (biorthogonal) 4+4 對稱,浮點 JPEG 2000 影像壓縮 -
Step 2:選分解層數 $J$
$J$ = 你需要多少個八度頻帶。最大 $J_{\max} = \lfloor\log_2(N/L)\rfloor$($L$ = 濾波器長度)。
經驗法則:$J = \lfloor\log_2(N)\rfloor - 1$ 或根據頻帶需求決定。
-
Step 3:分解
% MATLAB [C, L] = wavedec(x, J, 'db4'); % C = [cA_J | cD_J | cD_{J-1} | ... | cD_1] % L = 各層係數長度 # Python (PyWavelets) import pywt coeffs = pywt.wavedec(x, 'db4', level=J) # coeffs = [cA_J, cD_J, cD_{J-1}, ..., cD_1]
-
Step 4:處理係數(根據目的)
- 去噪(Denoising):對細節係數做閾值處理
- 軟閾值 (Soft Thresholding):$\hat{d} = \text{sign}(d) \cdot \max(|d| - \lambda, 0)$ — 平滑,偏差小
- 硬閾值 (Hard Thresholding):$\hat{d} = d \cdot \mathbf{1}(|d| > \lambda)$ — 保留大係數,但不連續
- 通用閾值 (Universal Threshold):$\lambda = \sigma \sqrt{2\ln N}$,$\sigma$ 由 Level 1 細節係數的 MAD 估計:$\hat{\sigma} = \text{MAD}(cD_1) / 0.6745$
- 壓縮:只保留最大的 $K$ 個係數,其餘置零 → 重建。壓縮比 = $N/K$
- 特徵提取:計算各層的能量 $E_j = \sum_k |cD_j[k]|^2$,作為分類特徵
- 去噪(Denoising):對細節係數做閾值處理
-
Step 5:重建
% MATLAB x_rec = waverec(C_modified, L, 'db4'); # Python x_rec = pywt.waverec(coeffs_modified, 'db4')
具體範例:ECG 去噪
訊號:ECG,$f_s = 360$ Hz,混有 60 Hz 工頻干擾和高頻肌電雜訊 (EMG)
方法:db4、4 層分解
| 層級 | 頻帶 (Hz) | 對應成分 | 處理 |
|---|---|---|---|
| cD1 | 90-180 | 高頻 EMG 雜訊 | 軟閾值(幾乎全去除) |
| cD2 | 45-90 | 60 Hz 工頻 + 部分 EMG | 軟閾值 |
| cD3 | 22.5-45 | QRS 波群主能量 | 保留 |
| cD4 | 11.25-22.5 | P 波、T 波 | 保留 |
| cA4 | 0-11.25 | 基線漂移 | 去除或保留(視需求) |
結果:重建後的 ECG 清晰保留 QRS、P、T 波形,高頻雜訊和基線漂移有效去除。
應用場景
- 影像壓縮 — JPEG 2000:使用 CDF 9/7 biorthogonal 小波對影像做 2D DWT,然後量化和熵編碼小波係數。JPEG 2000 在同品質下比 JPEG(使用 DCT)壓縮率高 20-30%。影像中的平滑區域 → 小波係數趨近零(消失矩的功勞)→ 高壓縮比
- ECG/EEG 去噪:如上範例。軟閾值 + 通用閾值準則在醫學訊號處理中是標準方法
- 地震資料壓縮:地震勘探產生 TB 級的資料。DWT 壓縮後可減少 10-50 倍的儲存空間,同時保留地質結構的關鍵特徵
- 邊緣偵測:影像中的邊緣 = 亮度的突變 → 在 DWT 的高頻(細節)係數中表現為大值。Haar 或 db2 小波特別適合偵測步階式邊緣
陷阱與限制
- 不是平移不變 (Not Shift-Invariant):同一訊號平移一個取樣點,DWT 係數可能完全不同。原因是降取樣操作。這導致:(a) 去噪結果可能因訊號起始點不同而異;(b) 重建訊號在邊緣處可能有 Gibbs-like 振鈴
- 解決方案 — Stationary Wavelet Transform (SWT):不做降取樣 → 平移不變,但冗餘度高($J \times N$ 個係數 vs DWT 的 $N$ 個)
- 選錯小波可能引入 artifacts:例如用不連續的 Haar 小波處理平滑訊號 → 重建中出現塊狀效應 (blocky artifacts)
- 只有八度頻帶分解:頻率解析度隨層級呈指數下降。Level 1 覆蓋 $[f_s/4, f_s/2]$,Level 5 覆蓋 $[f_s/64, f_s/32]$——沒有「中間」的頻帶寬度選擇
- 邊界處理:每層分解時訊號邊界需要延伸(對稱、週期、或補零),不同延伸方式會影響邊界附近的係數
什麼時候不該用 DWT?替代方案
| 情境 | 問題 | 替代方案 |
|---|---|---|
| 需要連續的時頻表示 | DWT 只有離散的八度頻帶 | CWT→ 5.4 節 |
| 需要平移不變性 | 降取樣破壞平移不變 | SWT(Stationary WT,不降取樣)或 DTCWT(Dual-Tree CWT) |
| 需要均勻的頻帶分割 | 八度分解不是均勻的 | Wavelet Packet(可以任意分割頻帶) |
| 需要資料驅動的分解 | DWT 基底是預設的 | EMD→ 5.6 節 或 VMD |
References: [1] Mallat, S., A Theory for Multiresolution Signal Decomposition: The Wavelet Representation, IEEE Trans. PAMI, 11(7):674-693, 1989. [2] Daubechies, I., Orthonormal Bases of Compactly Supported Wavelets, Comm. Pure Appl. Math., 41(7):909-996, 1988. [3] Donoho, D.L. & Johnstone, I.M., Ideal Spatial Adaptation by Wavelet Shrinkage, Biometrika, 81(3):425-455, 1994. [4] Mallat, S., A Wavelet Tour of Signal Processing, 3rd ed., Academic Press, 2008.
互動:Haar DWT 分解
將訊號用 Haar 小波逐層分解為近似(低頻)和細節(高頻)係數。
5.6 經驗模態分解 (Empirical Mode Decomposition, EMD) / Hilbert-Huang Transform (HHT)
資料驅動的自適應分解 — 讓資料自己告訴你基底
為什麼要學這個? 因為傅立葉和小波都使用預設的基底函數,但有些訊號(海浪、地震、生物節律)的形狀不像正弦波也不像已知小波。EMD 讓資料自己決定基底——這是處理非線性非平穩訊號的獨特工具。
前情提要:到目前為止所有方法都使用預定義的基底(正弦波、小波)。但如果訊號的形狀不像任何已知基底呢?EMD 讓資料自己決定基底。
Learning Objectives
- 理解 EMD 的 Sifting Process(篩選過程)的每一個步驟
- 掌握 IMF (Intrinsic Mode Function) 的定義和物理意義
- 理解 Hilbert-Huang Transform 如何從 IMF 得到時頻表示
- 認識模態混疊 (Mode Mixing) 問題及 EEMD/CEEMDAN 的改進
一句話總結
EMD 完全不假設基底函數——它讓資料自己告訴你應該分解成哪些成分。不用正弦波、不用小波——訊號長什麼樣子,分出來的成分就長什麼樣子。
痛點:預設基底不夠靈活
傅立葉分析假設訊號由正弦波組成;小波分析用預選的母小波作為基底。對於非線性、非平穩的訊號,這些預設的基底函數可能根本不適合:
- 海浪:真實海浪的波形不是正弦波——波峰尖銳、波谷平坦(Stokes 波)。用傅立葉分析會產生大量虛假的諧波(2 倍頻、3 倍頻...),這些諧波不是真實的物理成分
- 生物訊號:心率變異 (HRV) 具有非線性、非平穩特性。傅立葉頻譜中 LF/HF 比值被廣泛使用,但其假設(平穩性)經常被違反
- 機械故障:軸承損壞產生的衝擊響應被非線性的彈簧-阻尼系統調變,波形既不是正弦波也不像任何標準小波
根本問題:真實世界的訊號不「欠」我們一個正弦波分解。為什麼不讓資料自己決定分解方式?
由來
Norden E. Huang et al. (1998) 在 NASA Goddard Space Flight Center 提出了 EMD 和 HHT。這篇發表在 Proceedings of the Royal Society A 的論文是近 25 年來訊號處理領域被引用最多的論文之一(超過 15000 次引用)。
靈感來源:Huang 是海洋學家,他的核心動機來自海浪分析——海浪是高度非線性、非平穩的。傅立葉分析產生的諧波是數學上的人為產物,不代表真實的物理過程。他想要一種方法,讓分解出來的成分直接反映物理現象。
Huang 曾說:「EMD is like a surgeon's scalpel — you don't need it for healthy tissue, but when you need it, nothing else will do.」
原理:Sifting Process(篩選過程)
直覺:就像淘金——把訊號放在篩子上晃,最表層的振盪(最高頻的成分)先被篩出來,然後再篩下一層,一層一層直到只剩下緩慢的趨勢。
Sifting 的完整步驟
- 找局部極值:找出訊號 $x(t)$ 的所有局部極大值和局部極小值
- 構造上包絡:對所有局部極大值做三次樣條插值 (Cubic Spline Interpolation) → 得到上包絡 $e_{\max}(t)$
- 構造下包絡:對所有局部極小值做三次樣條插值 → 得到下包絡 $e_{\min}(t)$
- 計算均值包絡:$m(t) = \frac{e_{\max}(t) + e_{\min}(t)}{2}$
- 去除趨勢:$h(t) = x(t) - m(t)$
- 檢查 IMF 條件:
- 條件 1:極值點數(極大 + 極小)和零穿越數 (Zero Crossings) 的差 $\leq 1$
- 條件 2:均值包絡在任何時刻近似為零
- 若滿足:$h(t)$ 就是第一個 IMF → $\text{IMF}_1(t) = h(t)$
- 若不滿足:以 $h(t)$ 取代 $x(t)$,回到 Step 1 繼續 sifting
- 去除第一個 IMF:$r_1(t) = x(t) - \text{IMF}_1(t)$(殘差)
- 以殘差作為新的輸入:$x(t) \leftarrow r_1(t)$,回到 Step 1 提取 $\text{IMF}_2$
- 重複直到殘差 $r_K(t)$ 為單調函數(不再有振盪),或只剩 $\leq 1$ 個極值
EMD 分解結果
$$x(t) = \sum_{i=1}^{K} \text{IMF}_i(t) + r_K(t)$$$\text{IMF}_i$:第 $i$ 個固有模態函數(從高頻到低頻排列);$r_K$:最終殘差(趨勢)
IMF 的直覺:每個 IMF 可以看作是訊號中一個「近似窄帶」的振盪成分。它的振幅和頻率都可以隨時間慢慢變化(這是傅立葉分析做不到的),但在每個時刻只有一個主導頻率。
展開:Sifting 停止準則的細節
Sifting 迭代何時停止(何時宣布 $h$ 是 IMF)?常用的準則有:
Cauchy 型準則 (Huang 1998):
$$\text{SD} = \frac{\sum_t |h_{k-1}(t) - h_k(t)|^2}{\sum_t h_{k-1}^2(t)} < \epsilon$$$\epsilon$ 通常取 0.2~0.3。缺點:純粹看數值收斂,可能過度 sifting。
Rilling 三準則 (2003):
- $|m(t)/a(t)| < \theta_1$ 在至少 $(1-\alpha)$ 比例的時間點成立($a(t) = (e_{\max} - e_{\min})/2$ 為局部振幅)
- $|m(t)/a(t)| < \theta_2$ 在所有時間點成立
- 典型值:$\theta_1 = 0.05$, $\theta_2 = 0.5$, $\alpha = 0.05$
這個準則更穩健,避免過度 sifting 導致 IMF 失真。
Hilbert-Huang Transform (HHT)
得到 IMF 之後,對每個 IMF 做 Hilbert 轉換以提取瞬時頻率和振幅:
- 對 $\text{IMF}_i(t)$ 做 Hilbert 轉換 → 得到解析訊號 $z_i(t) = \text{IMF}_i(t) + j\,\hat{H}[\text{IMF}_i](t)$
- 瞬時振幅:$a_i(t) = |z_i(t)|$
- 瞬時相位:$\phi_i(t) = \arg[z_i(t)]$
- 瞬時頻率:$\omega_i(t) = d\phi_i/dt$
Hilbert 譜 (Hilbert Spectrum)
$$H(\omega, t) = \sum_{i=1}^{K} a_i(t)\, \delta(\omega - \omega_i(t))$$每個 IMF 在每個時刻貢獻一個能量值到其瞬時頻率所在的位置 → 時頻表示
與 STFT/CWT 不同,Hilbert 譜的頻率不是固定的格點,而是隨時間連續變化的曲線。這對非平穩訊號是更自然的表示方式。
怎麼用
具體範例:海浪資料分析
訊號:某海域 20 分鐘的波高時間序列,$f_s = 2$ Hz(取樣間隔 0.5 秒)
EMD 結果:分解出 8 個 IMF + 殘差
| IMF | 典型週期 | 物理對應 |
|---|---|---|
| IMF 1-2 | 1-3 秒 | 風浪 (Wind Waves) — 局部風力產生的短波 |
| IMF 3 | 3-5 秒 | 過渡帶 — 風浪向湧浪的轉換 |
| IMF 4-6 | 5-15 秒 | 湧浪 (Swell) — 遠處風暴傳來的長波 |
| IMF 7-8 | 30 秒-數分鐘 | 長週期波 / 次重力波 (Infragravity Waves) |
| 殘差 $r$ | $> 10$ 分鐘 | 潮汐和平均水位變化 |
優勢:EMD 自動把不同物理成因的波浪分開,不需要預設頻率邊界。每個 IMF 的波形反映真實的波浪形狀(非正弦),Hilbert 譜揭示瞬時頻率和振幅的時變特性。
應用場景
- 海洋工程(波浪分析):EMD 的原始應用領域。分析颱風波浪、畸形波 (Rogue Waves)、波浪與結構物交互作用。IEEE Oceanic Engineering Society 推薦用於非線性波浪分析
- 結構健康監測:橋梁和建築物在地震或強風下的振動響應是非線性非平穩的。EMD 可以分離不同模態的振動,追蹤自然頻率隨損傷程度的變化
- 生醫訊號(心率變異分析):HRV 分析中,EMD 可以提取呼吸相關成分(高頻 IMF)和血壓調節相關成分(低頻 IMF),不需要假設平穩性
- 金融時間序列:股價指數的趨勢提取。低頻 IMF + 殘差 = 長期趨勢;高頻 IMF = 短期波動和雜訊。比移動平均更自適應
陷阱與限制
-
模態混疊 (Mode Mixing):最嚴重的問題。一個 IMF 裡混入了明顯不同頻率的成分,或者同一物理成分被分散到多個 IMF 中。
成因:間歇性訊號(某個頻率成分時有時無)會導致 sifting 過程中包絡插值出問題。
解決方案:
- EEMD (Ensemble EMD, Wu & Huang 2009):加入白雜訊 → EMD → 平均多次結果。雜訊幫助「打破」混疊。典型設定:雜訊幅度 = 0.1~0.2 倍標準差,集成次數 = 100~500
- CEEMDAN (Complete EEMD with Adaptive Noise, Torres et al. 2011):在每一步的殘差上加噪而非原始訊號 → 更乾淨的分解、更少的殘餘雜訊
- 沒有嚴格的數學理論:不像 Fourier 有完備性、Parseval 定理,不像小波有框架理論。EMD 的收斂性、唯一性、穩定性都沒有嚴格的數學證明
- 端點效應 (End Effect):三次樣條插值在訊號邊界需要外推 → 包絡可能發散或不合理。常用解決方法:鏡像延伸 (Mirror Extension)、外推極值點
- 結果不唯一:不同的 sifting 停止準則、不同的包絡插值方法、不同的邊界處理 → 結果可能不同。這對需要可重複性的科學研究是個問題
- 計算量:每次 sifting 需要找極值、插值、相減 → 整體計算量不小,尤其 EEMD 需要重複數百次
什麼時候不該用 EMD?替代方案
| 情境 | 問題 | 替代方案 |
|---|---|---|
| 需要嚴格的數學框架和可重複性 | EMD 缺乏理論保證 | CWT 或 DWT(有完備的數學理論) |
| 需要穩定、確定性的分解 | EMD 結果受參數影響 | VMD (Variational Mode Decomposition) — 用最佳化方法代替 sifting,結果唯一且穩定 |
| 訊號是線性、平穩的 | EMD 的優勢不明顯,反而更複雜 | FFT / Welch(簡單直接) |
| 需要高效的即時處理 | EMD(尤其 EEMD)太慢 | STFT 或 DWT |
VMD (Variational Mode Decomposition, Dragomiretskiy & Zosso 2014):將模態分解轉化為帶約束的變分最佳化問題。優點:結果唯一、不受初始化影響、可以指定模態數量。缺點:需要預設模態數 $K$(但可以用殘差準則自動選擇)。在很多場合正在取代 EMD。
References: [1] Huang, N.E. et al., The Empirical Mode Decomposition and the Hilbert Spectrum for Nonlinear and Non-Stationary Time Series Analysis, Proc. R. Soc. Lond. A, 454:903-995, 1998. [2] Wu, Z. & Huang, N.E., Ensemble Empirical Mode Decomposition, Adv. Adaptive Data Analysis, 1(1):1-41, 2009. [3] Torres, M.E. et al., A Complete Ensemble Empirical Mode Decomposition with Adaptive Noise, IEEE ICASSP, 2011. [4] Dragomiretskiy, K. & Zosso, D., Variational Mode Decomposition, IEEE Trans. Signal Process., 62(3):531-544, 2014.
互動:EMD Sifting 過程動畫
觀察 EMD 逐步「篩選」出各 IMF 的過程:找極值 → 包絡 → 均值 → 扣除 → 收斂。
5.7 Synchrosqueezing Transform (SST)
銳化 CWT — 兼具小波的穩健性與接近 WVD 的解析度
為什麼要學這個? 因為 CWT 時頻圖太模糊、WVD 有交叉項。SST 結合了兩者優點——小波的穩定性加上接近 WVD 的銳利度,是近十年時頻分析領域最重要的進展之一。
前情提要:5.6 的 EMD 缺乏數學理論且結果不唯一。SST 結合了 CWT 的穩定性和 WVD 的銳利度,是最近十年的重要進展。
Learning Objectives
- 理解 SST 的核心思想:用瞬時頻率估計「擠壓」CWT 能量到正確位置
- 認識 Frequency Reassignment 的歷史脈絡與 SST 的改進
- 比較 SST 與 CWT、WVD 的解析度和交叉項特性
- 理解 SST 對雜訊的敏感性及 2nd-order SST 的擴展
一句話總結
SST 把 CWT 的模糊時頻圖「擠壓」(Squeeze) 成銳利的線條——保持小波的穩健性和無交叉項特性,但得到接近 WVD 的時頻聚焦度。就像把一張模糊的照片重新對焦。
痛點:CWT 模糊,WVD 有鬼影
到目前為止,我們面對一個三難困境:
| 方法 | 解析度 | 交叉項 | 穩健性 |
|---|---|---|---|
| STFT / Spectrogram | 受 Heisenberg 限制 ✗ | 無 ✓ | 高 ✓ |
| WVD | 完美 ✓ | 嚴重 ✗ | 低 ✗ |
| CWT Scalogram | 多解析度(但仍模糊) | 無 ✓ | 高 ✓ |
有沒有辦法兩全其美——像 CWT 一樣沒有交叉項、像 WVD 一樣銳利?SST 給出了接近完美的答案。
由來
Frequency Reassignment (Auger & Flandrin, 1995):最早的「銳化」想法。他們觀察到 STFT/CWT 的能量被「塗抹」在窗/小波的寬度範圍內,但可以用每個係數的瞬時頻率把能量「搬移」到正確的位置。問題是:reassignment 後的結果不能反轉(不可逆)。
Ingrid Daubechies, Jianfeng Lu & Hau-Tieng Wu (2011):在 Applied and Computational Harmonic Analysis 上提出 SST。他們的關鍵貢獻是:設計了一種可逆的 reassignment 方法——只在頻率方向(尺度方向)擠壓,不動時間方向。這保證了可逆性,同時獲得了銳利的時頻表示。
Daubechies 在小波理論(CWT/DWT, 5.4-5.5 節)和 SST 上都做出了奠基性貢獻——她是時頻分析領域最具影響力的學者之一。
原理
直覺:想像 CWT 的 scalogram 是一張模糊的照片——能量像水彩一樣暈開在一個範圍的尺度上。SST 做的事情是:對每個係數,問它「你的真正頻率是多少?」(用瞬時頻率估計),然後把能量從當前的尺度「擠」到對應的真正頻率上。就像把每滴水彩推回它應該在的位置。
Step 1:計算 CWT
Step 2:估計每個係數的瞬時頻率
$W_x^{(\psi')}$:用 $\psi'(t)$(母小波的導數)做的 CWT
直覺:$\omega(a,b)$ 是在尺度 $a$、時刻 $b$ 處,CWT 係數「感知到」的真正頻率。如果訊號在此處的真正頻率是 $\omega_0$,那麼無論 $a$ 取什麼值(只要 $W_x(a,b)$ 不太小),$\omega(a,b) \approx \omega_0$。
Step 3:Synchrosqueezing(擠壓)
將 CWT 的能量從尺度 $a$ 重新分配到瞬時頻率 $\omega(a,b)$:
對每個頻率 bin $\omega_l$,把所有瞬時頻率指向它的尺度上的 CWT 係數加起來
展開:為什麼 SST 可逆而 Reassignment 不可逆?
Frequency Reassignment (Auger-Flandrin):同時在時間和頻率兩個方向重新分配能量。這是一個多對一的映射(多個時頻點可能映射到同一個點)→ 不可逆。
SST:只在頻率(尺度)方向重新分配,時間位置 $b$ 保持不變。因此在每個固定 $b$ 上,擠壓操作是一維的。
可逆性定理 (Daubechies et al. 2011):對於由 $K$ 個具有分離瞬時頻率的成分組成的訊號,SST 結果 $T_x(\omega, b)$ 可以唯一地反轉回原始訊號:
$$x(t) = \text{Re}\left[\frac{1}{C_\psi}\int T_x(\omega, t)\, d\omega\right]$$前提是成分之間的瞬時頻率在任何時刻都不重疊(分離條件)。$\blacksquare$
展開:單成分 Chirp 的 SST 效果分析
考慮 $x(t) = A(t)\, e^{j\phi(t)}$,瞬時頻率 $\omega_0(t) = \phi'(t)$。
CWT 在尺度 $a$ 的響應:$W_x(a, b) \approx A(b)\sqrt{a}\, \hat{\Psi}^*(a\omega_0(b))\, e^{j\phi(b)}$
瞬時頻率估計:$\omega(a, b) = \omega_0(b)$(與 $a$ 無關!)
因此 SST 將所有尺度的能量都擠壓到 $\omega_0(b)$ → 在頻率軸上形成一條銳利的線,完美跟蹤瞬時頻率。
CWT scalogram:在 $\omega_0(b)$ 附近的一個帶狀區域有能量(因為母小波有寬度)。
SST:在 $\omega_0(b)$ 上集中為一條線。
銳化程度等同於 WVD,但沒有交叉項。$\blacksquare$
SST vs CWT vs WVD:視覺比較
| 特性 | CWT Scalogram | WVD | SST |
|---|---|---|---|
| 單成分呈現 | 模糊帶狀 | 銳利線條 | 銳利線條 |
| 多成分交叉項 | 無 | 嚴重 | 無 |
| 可逆性 | 可逆 | 可逆 | 可逆(分離條件下) |
| 可取負值 | 否($|W|^2 \geq 0$) | 是 | 是(複數值) |
| 計算量 | $O(N \cdot J \log N)$ | $O(N^2)$ | $O(N \cdot J \log N)$(與 CWT 同階) |
怎麼用
- 選擇母小波:通常用 Morlet(analytic wavelet),因為 SST 需要精確的瞬時頻率估計,Morlet 的窄帶特性最適合
- 計算 CWT:與 5.4 節相同
- 計算瞬時頻率圖:$\omega(a,b)$ — 需要同時計算 $W_x$ 和 $W_x^{(\psi')}$
- 執行 Synchrosqueezing:把 CWT 係數重新分配到對應的頻率 bin
- 視覺化:繪製 $|T_x(\omega, b)|^2$
應用場景
- 多成分非平穩訊號的成分分離:例如兩個 chirp 訊號在時頻平面交叉——STFT 看到一團模糊,WVD 看到交叉項干擾,但 SST 可以看到兩條銳利的交叉線條。結合 Ridge Extraction 演算法可以自動分離每個成分並反轉重建
- 地質學(地震波模態分離):地震面波 (Surface Waves) 的不同模態(基本模態、高階模態)在頻散曲線 (Dispersion Curve) 上表現為不同的 $f$-$v$ 關係。SST 的銳利時頻圖讓模態分離更精確,有助於反演地下結構
- 心率變異 (HRV) 分析:SST 可以精確追蹤呼吸頻率的時變特性(呼吸頻率隨活動、睡眠階段等變化),比 CWT 更銳利地定位瞬時呼吸頻率
- 機械故障診斷:變速工況下的齒輪嚙合頻率追蹤。SST 把 CWT 中模糊的頻率軌跡銳化為精確的線條,有助於計算轉速和檢測異常
陷阱與限制
- 對雜訊敏感:瞬時頻率估計 $\omega(a,b) = -\text{Im}[\partial_b W / W]$ 在 $|W|$ 很小的區域(低 SNR)變得不穩定。雜訊會導致 $\omega$ 的估計亂跳 → SST 結果出現散射的雜點。實務上需要設定一個能量閾值,忽略 $|W|$ 太小的區域
- 不適合快速頻率跳變:SST 假設瞬時頻率在局部緩慢變化。對於突然的頻率跳變(如 FSK 調變),SST 在跳變處的銳化效果會變差
- 2nd-order SST (Oberlin et al. 2015):改進版本。用二階瞬時頻率估計(考慮 $\omega$ 的變化率)→ 對 chirp 等頻率快速變化的訊號效果更好。但計算量更大、實作更複雜
- 分離條件:成分的瞬時頻率在某些時刻重合時,SST 無法分離它們(與 WVD 不同——WVD 理論上可以,但有交叉項)
- 計算量比 CWT 稍大:需要額外計算 $W_x^{(\psi')}$(用導數小波做一次 CWT)和瞬時頻率映射。大約是 CWT 的 2-3 倍
什麼時候不該用 SST?替代方案
| 情境 | 問題 | 替代方案 |
|---|---|---|
| 只需要粗略的時頻觀察 | SST 計算量比 STFT 大很多 | STFT Spectrogram(快得多,通常就夠了) |
| SNR 很低(< 0 dB) | 瞬時頻率估計不穩定 | CWT Scalogram(模糊但穩定)或Multitaper Spectrogram |
| 頻率有突然跳變 | 1st-order SST 假設不成立 | 2nd-order SST 或 STFT(短窗更能追蹤快速變化) |
| 非線性訊號,不想預設小波 | SST 仍依賴母小波選擇 | EMD / HHT→ 5.6 節 |
| 需要精確的能量分佈 | SST 結果是複數值,不是正的能量 | Reassigned Spectrogram (Auger-Flandrin) |
Part V 時頻分析方法總覽
七種方法的定位與適用場景:
| 方法 | 核心特性 | 最適合 | 最大限制 |
|---|---|---|---|
| 5.1 STFT | 固定窗,計算快 | 通用時頻分析的首選 | 固定解析度 |
| 5.2 WVD | 最高解析度 | 單成分精確分析 | 多成分交叉項 |
| 5.3 Cohen's | 統一框架,可調核 | 理論分析和比較 | 計算量大 |
| 5.4 CWT | 多解析度 | 多尺度時頻分析 | 冗餘、模糊 |
| 5.5 DWT | $O(N)$、無冗餘 | 壓縮、去噪、特徵提取 | 只有八度頻帶 |
| 5.6 EMD | 資料驅動、自適應 | 非線性非平穩訊號 | 缺乏理論、模態混疊 |
| 5.7 SST | 銳化 CWT、無交叉項 | 多成分非平穩分離 | 雜訊敏感 |
選擇指南:先用 STFT 快速觀察 → 若需要多解析度用 CWT → 若需要更銳利用 SST → 若有交叉項問題避免 WVD → 若訊號高度非線性嘗試 EMD → 若需要壓縮/去噪用 DWT。
References: [1] Daubechies, I., Lu, J. & Wu, H.-T., Synchrosqueezed Wavelet Transforms: An Empirical Mode Decomposition-like Tool, Appl. Comp. Harm. Anal., 30(2):243-261, 2011. [2] Auger, F. & Flandrin, P., Improving the Readability of Time-Frequency and Time-Scale Representations by the Reassignment Method, IEEE Trans. Signal Process., 43(5):1068-1089, 1995. [3] Oberlin, T., Meignen, S. & Perrier, V., Second-Order Synchrosqueezing Transform or Invertible Reassignment?, IEEE Trans. Signal Process., 63(5):1335-1344, 2015. [4] Thakur, G. et al., The Synchrosqueezing Algorithm for Time-Varying Spectral Analysis, Signal Processing, 93(5):1079-1094, 2013.
6.1 進階 FFT 演算法 (Advanced FFT Algorithms)
Learning Objectives
- 區分 Split-Radix、Bluestein、Goertzel 的適用場景
- 判斷何時用 Goertzel 比 FFT 省、何時不省
- 用 Bluestein 恆等式理解任意長度 DFT 如何轉化為卷積
為什麼要學這個? 因為真實世界的資料長度不一定是 2 的冪次,而且有時候你只需要一個頻率的結果,不需要算完整 FFT 浪費時間。
前情提要:Part V 建立了時頻分析的理論。Part VI 回到工程實務——從 FFT 的進階實作技巧開始。
- Goertzel 演算法 (Goertzel Algorithm) — Gerald Goertzel, 1958。設計來只計算單一頻率 bin 的 DFT 值。
- Bluestein 演算法 (Chirp-Z Transform) — Leo Bluestein, 1970。巧妙地把任意長度 DFT 轉換成卷積問題。
- Split-Radix FFT — Duhamel & Hollmann, 1984。結合 Radix-2 和 Radix-4 的優點,省下約 20% 的複數乘法。
原理
直覺:Radix-2 FFT 是「通用型工具」,但在特殊場景下有更高效的選擇:
- Split-Radix:同時用長度 N/2(偶數部分)和兩個 N/4(奇數部分)的 DFT,比純 Radix-2 少約 20% 乘法。
- Bluestein:任意 N 都能做,靠的是一個代數恆等式把 DFT 變成卷積。
- Goertzel:只算一個 bin,用二階遞迴(IIR),計算量 O(N)。
公式:
Bluestein 恆等式:
$$kn = \tfrac{1}{2}\bigl[k^2 + n^2 - (k-n)^2\bigr]$$
代入 DFT 的旋轉因子 $W_N^{kn}$:
$$X[k] = W_N^{k^2/2} \sum_{n=0}^{N-1} \bigl(x[n]\,W_N^{n^2/2}\bigr)\,W_N^{-(k-n)^2/2}$$
括號內是 $x[n]$ 乘以一個已知序列(chirp),外面是和另一個已知序列做卷積。三次 FFT(零填充到 2 的冪次長度)即可完成任意 N 的 DFT。
Goertzel 遞迴:
$$s[n] = x[n] + 2\cos(2\pi k/N)\,s[n-1] - s[n-2], \quad s[-1]=s[-2]=0$$
$$X[k] = s[N-1] - W_N^k\,s[N-2]$$
完整推導:Bluestein 恆等式
DFT 定義:$X[k] = \sum_{n=0}^{N-1} x[n]\,W_N^{kn}$,其中 $W_N = e^{-j2\pi/N}$。
利用恆等式 $kn = \tfrac{1}{2}[k^2 + n^2 - (k-n)^2]$(展開右邊即可驗證):
$$W_N^{kn} = W_N^{k^2/2}\,W_N^{n^2/2}\,W_N^{-(k-n)^2/2}$$
代入 DFT:
$$X[k] = W_N^{k^2/2} \sum_{n=0}^{N-1} \bigl[x[n]\,W_N^{n^2/2}\bigr]\,W_N^{-(k-n)^2/2}$$
令 $a[n] = x[n]\,W_N^{n^2/2}$,$b[n] = W_N^{-n^2/2}$,則求和項是 $a$ 和 $b$ 的卷積在第 $k$ 點的值。把 $a, b$ 分別零填充到長度 $\geq 2N-1$(取 2 的冪次),就可以用三次 FFT 完成卷積。
完整推導:Goertzel 演算法
DFT 第 k bin:$X[k] = \sum_{n=0}^{N-1} x[n]\,W_N^{kn}$。
觀察 $W_N^{-kN} = 1$,所以:
$$X[k] = W_N^{-kN}\sum_{n=0}^{N-1} x[n]\,W_N^{kn} = \sum_{n=0}^{N-1} x[n]\,W_N^{-k(N-n)}$$
這等於把 $x[n]$ 通過一個系統函數 $H(z)=\frac{1}{1-W_N^{-k}z^{-1}}$ 的濾波器,在 $n=N$ 時取輸出值。
但這是一階複數遞迴。為避免複數乘法,把分子分母同乘 $(1-W_N^{k}z^{-1})$:
$$H(z) = \frac{1 - W_N^{k}z^{-1}}{1 - 2\cos(2\pi k/N)z^{-1} + z^{-2}}$$
分母是實係數二階遞迴(只需實數乘法),跑完 N 步後用分子(一次複數乘法)得到 $X[k]$。
總計:N 次實數乘法 + 1 次複數乘法 = O(N) per bin。
怎麼用
- N 是 2 的冪 → 直接用 Radix-2 或 Split-Radix FFT。
- N 不是 2 的冪 → 零填充到下一個 2 的冪次(最簡單),或用 Bluestein(嚴格需要精確 N 時)。
- 只需要 K 個 bin(K << N) → 用 K 次 Goertzel。當 $K < \log_2 N$ 時比完整 FFT 省。
具體範例:DTMF 撥號音偵測
DTMF (Dual-Tone Multi-Frequency) 只需偵測 8 個頻率:697, 770, 852, 941, 1209, 1336, 1477, 1633 Hz。
// 取樣率 8000Hz, 每段 205 個樣本(~25.6ms)
// 完整 FFT (N=256): 256 × log₂(256) = 256 × 8 = 2048 次複數乘法
// 8 次 Goertzel: 8 × 205 = 1640 次實數乘法 + 8 次複數乘法
// Goertzel 省下約 90% 計算量(考慮複數 vs 實數差異後)
for each freq in [697, 770, 852, 941, 1209, 1336, 1477, 1633]:
k = round(freq * N / fs)
coeff = 2 * cos(2 * pi * k / N)
s1, s2 = 0, 0
for sample in segment:
s0 = sample + coeff * s1 - s2
s2 = s1
s1 = s0
power = s1*s1 + s2*s2 - coeff*s1*s2
if power > threshold:
tone_detected(freq)
應用場景
- DTMF 電話撥號音偵測:電話交換機用 Goertzel 偵測 8 個頻率。每段 205 樣本 @8kHz,每秒處理 ~39 段。
- 電力品質量測:智慧電表只需量測 50Hz 基頻和幾個諧波(100, 150, 200... Hz),Goertzel 比完整 FFT 省電 >10 倍,延長電池壽命。
- 非標準長度資料:某些通訊協定的幀長度不是 2 的冪次(如 LTE SC-FDMA 用 12 的倍數),Bluestein/CZT 可直接處理。
- 零填充到 2 的冪次通常是最簡單有效的方案。除非有嚴格的 N 限制(記憶體、延遲),否則不需要 Bluestein。
- Goertzel 的效率優勢在 $K > \log_2 N$ 時消失,此時直接做 FFT 更快。
- Split-Radix 實作比 Radix-2 複雜,現代 CPU 有 SIMD 最佳化的 FFT 庫(FFTW, MKL),手動實作很難超越。
- 如果你可以自由選擇資料長度,直接取 2 的冪次即可,不需要 Bluestein。
- 如果你需要完整頻譜(所有 N 個 bin),Goertzel 沒有優勢。
- 替代方案:現代 FFT 庫(FFTW)內建 Mixed-Radix 演算法,能高效處理任何長度(只要 N 有小質因數)。N 是質數時才真正需要 Bluestein。
✅ 快速檢核 (Quick Check)
Q1: DTMF 偵測只需要 8 個頻率,用 Goertzel 和完整 FFT(N=256)比,哪個省?省多少?
顯示答案
Goertzel: 8×N=2048 次運算。FFT: (N/2)log₂N=1024 次。這個例子 FFT 反而更快!Goertzel 只在 K < log₂N 時才省。
Q2: 資料長度 N=300(不是 2 的冪次),最簡單的處理方式是什麼?
顯示答案
零填充到 512(下一個 2 的冪次),用標準 Radix-2 FFT。比 Bluestein 演算法簡單得多。
互動:Goertzel vs FFT 效率比較
比較 Goertzel(只算 K 個頻率)和完整 FFT 的運算量。當 K < log2N 時 Goertzel 較省,否則 FFT 較省。
6.2 數值精度 (Numerical Precision)
Learning Objectives
- 計算浮點 FFT 的 SQNR 與 N 和精度的關係
- 解釋定點 FFT 的溢位問題及兩種 scaling 策略
- 根據 SQNR 需求選擇浮點/定點精度
為什麼要學這個? 因為在嵌入式系統和 FPGA 上實作 FFT 時,數值精度直接決定系統性能——搞不清楚定點溢位和捨入誤差,你的頻譜結果就是垃圾。
前情提要:6.1 介紹了不同的 FFT 演算法。但在真實硬體(FPGA、嵌入式)上,浮點數不是真正的實數——數值精度是你必須面對的工程問題。
原理
直覺:FFT 是一系列蝴蝶運算 (butterfly operations) 的串接。每一步蝴蝶都涉及乘法和加法,每一步都會引入捨入誤差 (rounding error)。$\log_2 N$ 級蝴蝶 = $\log_2 N$ 次誤差累積。
浮點 FFT 誤差界限:
$$\|X_{\text{computed}} - X_{\text{exact}}\|_{\text{rms}} \;\leq\; C\,\varepsilon_m\,\sqrt{\log_2 N}\;\|x\|_{\text{rms}}$$
其中 $\varepsilon_m$ 是機器精度 (machine epsilon):float32 為 $\approx 1.19 \times 10^{-7}$,float64 為 $\approx 2.22 \times 10^{-16}$。
定點 FFT 的問題——溢位 (Overflow):
蝴蝶運算 $a + b$ 可能超出定點數的表示範圍。兩種解決策略:
- 每級右移 1 bit (Convergent Scaling):每經過一級蝴蝶,所有值右移 1 bit(除以 2)。保證不溢位,但每級損失 1 bit 精度。$\log_2 N$ 級後損失 $\log_2 N$ bit。
- Block Floating Point (BFP):每級檢查最大值,只在需要時才 scaling。平均損失比每級右移少。
具體數值:
| 配置 | N | SQNR (dB) | 備註 |
|---|---|---|---|
| Float64 | 1024 | ≈ 281 | 幾乎任何應用都夠用 |
| Float32 | 1024 | ≈ 131 | 大多數消費級應用足夠 |
| Fixed 32-bit | 1024 | ≈ 132 | FPGA 主流選擇 |
| Fixed 16-bit (每級 scaling) | 1024 | ≈ 72 | 10 級蝴蝶損失 10 bit,剩 6 bit 有效 |
| Fixed 16-bit (BFP) | 1024 | ≈ 84 | 比固定 scaling 好 ~12dB |
推導:定點 FFT 每級 scaling 的 SQNR
16-bit 定點數的量化雜訊功率:$\sigma_q^2 = 2^{-2B}/12$,B=16 時 $\sigma_q^2 \approx 3.2 \times 10^{-11}$。
每級右移 1 bit 等於加入一次量化。$\log_2 N = 10$ 級,每級引入一次獨立的量化雜訊。
總量化雜訊功率 $\approx 10 \times \sigma_q^2$(但注意每級的 scaling 使有效位元逐級降低)。
更精確地:每級右移後有效位元從 B 降為 B-1,最終只剩 B - log₂N = 16 - 10 = 6 bit 有效。
SQNR ≈ 6.02 × 6 + 1.76 + 10log₁₀(N/2) ≈ 36.1 + 1.76 + 27.1 ≈ 65-72 dB(視訊號統計而定)。
怎麼用
- Float64 (double):科學計算、無精度顧慮的離線分析。SQNR > 280dB。
- Float32 (single):GPU 加速、大多數消費電子、N ≤ 220 時足夠。SQNR ≈ 130dB。
- Fixed 32-bit:FPGA 雷達/通訊,大多數情況等效 float32。
- Fixed 16-bit:低功耗嵌入式。必須用 BFP 或每級 scaling。SQNR 70-85dB。
具體範例:FPGA 雷達 FFT 設計
// 規格:1024 點 FFT,輸入 14-bit ADC,要求 SQNR > 75dB
// 方案:使用 18-bit 內部字寬 + Block Floating Point
// 每級蝴蝶後檢查最大值:
if (max_value > 0.5 * FULL_SCALE):
right_shift_all_by_1()
block_exponent += 1
// 10 級蝴蝶,平均只需 scaling 5-6 次(取決於訊號)
// 有效位元:18 - 6 = 12 bit → SQNR ≈ 6.02×12 + 1.76 ≈ 74 dB
// 結論:18-bit BFP 勉強達標,建議用 20-bit 以留餘裕
應用場景
- FPGA 雷達處理器:Xilinx/AMD FPGA 的 DSP48 slice 原生支援 18×25 bit 乘法。1024 點 FFT 用 18-bit BFP,throughput 500MHz。
- 嵌入式音訊 DSP:手機晶片內的音訊 DSP(如 Qualcomm Hexagon)通常用 16-bit 定點處理。256 點 FFT 用每級 scaling,SQNR ≈ 80dB,對音訊夠用(人耳動態範圍 ~96dB)。
- 5G 基頻處理器:4096 點 FFT @30.72MHz 取樣率。使用 16-bit 定點 + BFP,每秒處理數萬個 OFDM 符號。
- Float32 在大 N 時:N > 220 時,累積誤差可能顯著。天文觀測、大型地震陣列等場景建議用 float64。
- 定點忘記 scaling:最常見的 bug。溢位後數值會「繞回」(wraparound),結果完全錯誤且難以 debug。
- 旋轉因子 (twiddle factor) 的精度:定點 FFT 中,sin/cos 查表的精度也會影響結果。通常需要比資料多 2-4 bit。
- Parseval 定理檢驗:時域能量應等於頻域能量。如果差異 > 預期精度,表示有精度問題。
- 如果你的平台有浮點運算單元(FPU),直接用浮點。定點只在沒有 FPU 或功耗極度受限時才值得。
- 如果精度需求 > 90dB,16-bit 定點不夠,需要 24-bit 或 32-bit。
- 替代方案:FPGA 上可用浮點 IP core(Xilinx FFT IP 支援 float32),代價是更多資源。
✅ 快速檢核 (Quick Check)
Q1: 1024 點 float32 FFT 的 SQNR 大約多少 dB?
顯示答案
float32 的 ε_m ≈ 1.2×10⁻⁷,SQNR ≈ 20log₁₀(1/(ε_m√log₂1024)) ≈ 20log₁₀(1/(1.2×10⁻⁷×√10)) ≈ 131 dB。
Q2: 定點 16-bit FFT 每級右移 1 bit,10 級(1024 點)後有效位元剩幾 bit?
顯示答案
16 - 10 = 6 bit 有效,SQNR ≈ 6×6 = 36 dB。這通常不夠用——需要用 block floating point 或 32-bit 定點。
6.3 Overlap-Add / Overlap-Save (OLA/OLS)
Learning Objectives
- 推導 OLA 和 OLS 的正確性條件(FFT 長度 ≥ L+M-1)
- 計算分段卷積的延遲和計算量
- 在 OLA 和 OLS 之間根據實作需求做選擇
為什麼要學這個? 因為即時音訊處理、串流濾波、語音通話降噪全部需要「邊收邊算」——OLA/OLS 是把 FFT 用在無限長串流上的標準做法。
前情提要:6.2 解決了精度問題。但還有一個實作問題:真實訊號是串流(無限長),不可能一次全部 FFT。怎麼分段處理但結果跟一次算完全一樣?
原理
直覺:線性卷積的長度 = 兩個序列長度之和 - 1。把長序列切段後,每段的卷積結果比原段更長——尾巴會「溢出」到下一段的範圍。OLA 和 OLS 用不同方式處理這個溢出問題。
Overlap-Add (OLA)
- 把輸入 $x[n]$ 切成不重疊的段,每段長 L。
- 每段零填充到 $N = L + M - 1$(M = 濾波器長度)。
- FFT 卷積:$Y_i = \text{IFFT}\{\text{FFT}\{x_i, N\} \cdot H[k]\}$。
- 每段結果長 N > L,尾部 M-1 點與下一段的頭部重疊相加。
Overlap-Save (OLS)
- 把輸入 $x[n]$ 切成重疊的段,每段長 N,相鄰段重疊 M-1 點。
- 直接做長度 N 的 FFT 卷積(不需零填充)。
- 每段結果的前 M-1 點是圓卷積的錯誤部分,直接丟棄。
- 保留後面 L = N - M + 1 點,這些點和線性卷積完全一致。
推導:為什麼 OLS 丟棄前 M-1 點就對了?
長度 N 的 FFT 卷積計算的是圓卷積 (circular convolution),而我們需要的是線性卷積 (linear convolution)。
圓卷積和線性卷積的差異只出現在「尾巴繞回頭部」的部分。具體地說:
線性卷積 $y_{\text{lin}}[n] = \sum_{m=0}^{M-1} h[m]\,x_i[n-m]$,當 $n < M-1$ 時,$x_i[n-m]$ 可能會存取到本段之前的樣本。
在圓卷積中,$x_i[n-m]$ 會「繞回」到段尾(取模 N),導致結果錯誤。
但如果我們讓每段重疊 M-1 點,那麼本段的前 M-1 個樣本就是上一段的最後 M-1 個樣本。圓卷積在 $n \geq M-1$ 的部分不需要存取段外的資料,因此和線性卷積完全一致。
所以:丟棄前 M-1 點(圓卷積錯誤的部分),保留後 L = N - M + 1 點(正確的部分)。
怎麼用
- 確定濾波器長度 M(脈衝響應的長度)。
- 選段長 L:延遲 = L/fs 秒。L 越大 → 延遲越高但效率越好(FFT 的 overhead 被攤薄)。
- FFT 長度 N = L + M - 1,取到下一個 2 的冪次。
- 預計算 $H[k] = \text{FFT}\{h[n], N\}$(只需做一次)。
- 每段處理:
- OLA:取 L 點 → 零填充到 N → FFT → 乘 H[k] → IFFT → 重疊相加。
- OLS:取 N 點(含 M-1 重疊)→ FFT → 乘 H[k] → IFFT → 丟棄前 M-1 點。
具體範例:音訊 Reverb 效果器
// 脈衝響應:音樂廳 IR, M = 4096 點 (@ 48kHz = 85.3ms reverb tail) // 段長:L = 4096 // FFT 長度:N = L + M - 1 = 8191 → 取 8192 (2^13) // 延遲 = L / fs = 4096 / 48000 = 85.3 ms // 計算量比較: // 直接卷積:L × M = 4096 × 4096 = 16,777,216 次乘法/段 // FFT 卷積:3 × (N/2)log₂N = 3 × 4096 × 13 = 159,744 次乘法/段 // (2 次 FFT + 1 次 IFFT,每次 (N/2)log₂N 複數乘法) // 加速比:16.8M / 160K ≈ 105× // 如果要降低延遲: // L = 512 → 延遲 = 10.7ms, N = 4608 → 8192 // 每段計算量相同(同樣的 N),但每秒要處理更多段 // 每秒段數 = 48000 / 512 = 93.75 段 // 每秒 FFT 數 = 93.75 × 3 = 281 次 8192 點 FFT
應用場景
- 音訊效果器:Reverb (IR 長達數秒 = 數十萬點)、EQ (FIR 數百到數千階)。DAW 軟體如 Pro Tools 用 OLA 即時處理多軌音訊。
- 即時通訊回音消除 (Acoustic Echo Cancellation, AEC):房間脈衝響應 ~100ms = 1600 點 @16kHz。每 10ms 一段,用 OLS 做快速卷積。
- 雷達脈衝壓縮 (Pulse Compression):長脈衝與匹配濾波器做相關,用 OLA/OLS 實現即時處理。
- OLS 的第一段:需要在輸入前面補 M-1 個零(因為沒有「上一段的尾部」可用)。
- FFT 長度不夠:如果 N < L + M - 1,圓卷積會出錯——結果會有混疊。這是最常見的 bug。
- 延遲-效率取捨:L 小 → 低延遲但效率差(FFT overhead 大)。音樂演奏要求 <10ms 延遲,此時 L 只能取 256-512。
- 數值精度:很長的 IR(數秒)可能需要很大的 N,此時 float32 的精度可能不足。可用分段 IR 技術(前段小 N 低延遲,後段大 N 高效率)。
- OLS 實作更簡潔(不需要累加緩衝區),記憶體存取模式更規律。
- OLA 概念更直觀,且輸入段不需要重疊(省一點記憶體)。
- 兩者效率完全相同(同樣的 FFT 次數和大小)。
什麼時候不需要 OLA/OLS:
- 濾波器很短(M < 64)→ 直接時域卷積可能更快(沒有 FFT overhead)。
- 非即時處理且記憶體充足 → 一次性做整段 FFT 卷積。
- 替代方案:Partitioned Convolution(分段式卷積),把長 IR 切成多段不同大小的 FFT,兼顧低延遲和高效率。
互動:Overlap-Add 分段卷積
長訊號(4096點)與短濾波器(64點)的卷積。比較直接卷積和 OLA 的結果——完全一致。
✅ 快速檢核 (Quick Check)
Q1: 音訊 reverb 脈衝響應 4096 點,用 OLA 處理。FFT 長度至少要多少?
顯示答案
N ≥ L + M - 1。若段長 L=4096,則 N ≥ 4096+4096-1=8191,取 8192(2 的冪次)。
Q2: OLA 和 OLS 哪個實作更簡單?為什麼?
顯示答案
OLS 更簡單——不需要額外的重疊相加步驟,只需丟棄每段 IFFT 結果的前 M-1 點。
6.4 濾波器設計 (Filter Design)
Learning Objectives
- 用窗函數法設計 FIR 低通濾波器(從規格到 h[n])
- 用 Kaiser 公式計算所需的濾波器階數和 β 參數
- 比較 FIR vs IIR 的優劣並根據需求做選擇
為什麼要學這個? 因為幾乎每個 DSP 系統的第一步都是濾波——去雜訊、抗混疊、通道選擇。不會設計濾波器等於不會做 DSP。
前情提要:6.3 解決了長序列卷積問題。現在來設計那個卷積核——也就是濾波器。
- 窗函數法 (Window Method):最直觀的 FIR 設計方法——直接截斷理想脈衝響應再乘窗。
- Kaiser 窗:James Kaiser, 1974。提出經驗公式精確控制過渡帶寬和阻帶衰減的關係。
- Parks-McClellan 演算法 (Equiripple Design):James McClellan & Thomas Parks, 1972。基於 Chebyshev 近似的最佳化設計,在同樣階數下達到最小的最大誤差。
原理
直覺:理想低通濾波器的頻率響應是一個矩形函數(通帶=1,阻帶=0)。做逆傅立葉轉換得到 sinc 函數——但 sinc 是無限長的!我們必須把它截斷。截斷 = 乘矩形窗 = 頻域和 sinc 卷積 → Gibbs 現象 (Gibbs phenomenon)(邊緣出現波紋)。用更好的窗可以壓低波紋。
窗函數法步驟:
- 理想脈衝響應:$h_{\text{ideal}}[n] = \frac{\sin(\omega_c n)}{\pi n}$(sinc 函數)
- 截斷到 2M+1 點(M 決定了過渡帶寬)
- 乘以窗函數 $w[n]$:$h[n] = h_{\text{ideal}}[n] \cdot w[n]$
Kaiser 窗設計公式:
給定阻帶衰減 $A_s$ (dB) 和過渡帶寬 $\Delta\omega$ (rad/s):
$$M \approx \frac{A_s - 8}{2.285 \cdot \Delta\omega}$$
\beta = \begin{cases} 0.1102(A_s - 8.7) & \text{if } A_s > 50 \\ 0.5842(A_s - 21)^{0.4} + 0.07886(A_s - 21) & \text{if } 21 \leq A_s \leq 50 \\ 0 & \text{if } A_s < 21 \end{cases}
推導:Kaiser 窗設計公式的由來
Kaiser 窗是對 DPSS (Discrete Prolate Spheroidal Sequence) 的近似,使用零階修正 Bessel 函數 (modified Bessel function of the first kind, order 0):
$$w[n] = \frac{I_0\!\left(\beta\sqrt{1-(2n/M)^2}\right)}{I_0(\beta)}, \quad |n| \leq M/2$$
Kaiser 通過大量數值實驗,發現 $\beta$ 和 $M$ 與阻帶衰減 $A_s$ 和過渡帶寬 $\Delta\omega$ 之間存在上述經驗公式,精度在 10% 以內。
$\beta$ 控制窗的形狀(越大 → 主瓣越寬、旁瓣越低)。$M$ 控制窗的長度(越長 → 主瓣越窄 → 過渡帶越窄)。
怎麼用
具體範例:設計低通 FIR,$f_c = 100$Hz,$f_s = 1000$Hz,過渡帶 50Hz(即通帶到 100Hz,阻帶從 150Hz 開始),阻帶衰減 60dB。
// Step 1: 規格轉換到正規化頻率
ωp = 2π × 100 / 1000 = 0.2π (通帶邊緣)
ωs = 2π × 150 / 1000 = 0.3π (阻帶邊緣)
Δω = ωs - ωp = 0.1π ≈ 0.3142 rad
ωc = (ωp + ωs) / 2 = 0.25π (截止頻率,取通帶和阻帶中點)
As = 60 dB
// Step 2: 計算 β
As > 50, 所以 β = 0.1102 × (60 - 8.7) = 0.1102 × 51.3 = 5.653
// Step 3: 計算濾波器階數 M
M = (As - 8) / (2.285 × Δω) = 52 / (2.285 × 0.3142) = 52 / 0.718 ≈ 72.4
取 M = 73 (奇數,確保 Type I FIR)
// Step 4: 生成 h[n]
for n in range(-36, 37): // -M/2 到 M/2
h_ideal = sin(0.25π × n) / (π × n) // n=0 時取極限 = ωc/π = 0.25
w = kaiser(n, β, M)
h[n] = h_ideal × w
// Step 5: 驗證
// 通帶波紋 < 0.01dB (Kaiser 窗在 As=60dB 時通帶幾乎平坦)
// 阻帶衰減 ≈ 60dB ✓
// 過渡帶寬 ≈ 50Hz ✓
// 延遲 = M/2 = 36 樣本 = 36ms (@1kHz)
FIR vs IIR 比較
| 特性 | FIR (Finite Impulse Response) | IIR (Infinite Impulse Response) |
|---|---|---|
| 穩定性 | 永遠穩定(沒有回授) | 可能不穩定(極點必須在單位圓內) |
| 相位 | 可以完美線性相位 | 非線性相位(除非用 allpass 補償) |
| 階數 | 通常需要較高階數 | 同等規格下階數低很多(~1/10) |
| 設計 | 窗函數法/Parks-McClellan | Butterworth/Chebyshev/Elliptic |
| 適用場景 | 需要線性相位時(音訊、通訊) | 即時控制、低延遲需求 |
Python 範例:用 scipy.signal.firwin 設計 FIR 低通
應用場景
- 音訊 EQ (Equalizer):32 段 EQ 用 32 個 FIR 帶通濾波器,每個 ~128 階,用 OLA 即時處理。
- 通訊基頻濾波:5G NR 的 channel filter 用 FIR,通帶平坦度要求 <0.1dB,阻帶衰減 >50dB。
- 生醫訊號前處理:ECG 的 50/60Hz 陷波濾波器(notch filter),用 2 階 IIR 即可(FIR 需要數百階)。
- Kaiser 公式是經驗公式:結果可能差 5-10%,設計完一定要驗證頻率響應。
- 線性相位 = 群延遲 = M/2 樣本:高階 FIR 的延遲可能無法接受(如 1000 階 @1kHz = 500ms 延遲)。
- Parks-McClellan 可能不收斂:極窄過渡帶或極高阻帶衰減時,需要調整參數。
- 需要極窄過渡帶 + 低延遲 → 用 IIR(Butterworth/Chebyshev/Elliptic)。
- 需要最佳化設計(最小階數達到規格)→ 用 Parks-McClellan 而非窗函數法。
- 替代方案:多速率濾波 (Multirate Filtering)——先降採樣再濾波可大幅降低計算量。CIC + FIR 組合是 SDR 的標準架構。
📝 例題演練 (Worked Example)
設計低通 FIR:通帶截止 200Hz,阻帶起始 300Hz,阻帶衰減 50dB,fs=2000Hz。(a) 正規化頻率?(b) Kaiser β?(c) 濾波器階數?(d) h[n] 的中心值?
顯示解題過程
(a) ωp=200/1000·π=0.2π, ωs=300/1000·π=0.3π, Δω=0.1π
(b) As=50 → β = 0.5842(50−21)0.4 + 0.07886(50−21) = 3.39
(c) M ≈ (50−8)/(2.285×0.1π) = 58.5 → 取59(奇數)→ 59階 = 60點
(d) h[M/2] = ωc/π = 0.25π/π = 0.25
✅ 快速檢核 (Quick Check)
Q1: 設計一個低通 FIR,想要阻帶衰減 60dB,過渡帶 50Hz,用 Kaiser 窗需要多少階?
顯示答案
M ≈ (A_s - 8)/(2.285·Δω) = (60-8)/(2.285·2π·50/fs)。若 fs=1kHz → Δω=0.1π → M≈(52)/(2.285·0.314)≈72 階。
Q2: FIR 濾波器比 IIR 的主要優勢是什麼?
顯示答案
FIR 天然穩定(沒有極點在單位圓外的風險)且容易做到精確的線性相位(= 純延遲,不失真)。
✅ 快速檢核 (Quick Check)
Q1: 設計低通 FIR,阻帶衰減 60dB,過渡帶 0.1π。用 Kaiser 窗需要多少階?
顯示答案
M ≈ (A_s - 8)/(2.285·Δω) = (60-8)/(2.285×0.314) ≈ 72 階。
Q2: FIR 的最大優勢是什麼?IIR 的最大優勢呢?
顯示答案
FIR: 天然穩定 + 精確線性相位。IIR: 同等性能只需更低的階數(= 更少的計算量和延遲)。
線性相位 FIR 的四種對稱類型
線性相位 FIR 必須滿足對稱或反對稱條件 $h[n] = \pm h[N-1-n]$。根據對稱方式和階數奇偶,恰好分為四類,每一類有不同的限制。
| 類型 | 對稱性 | 長度 N | 特性 | 不能實現 |
|---|---|---|---|---|
| Type I | 對稱 $h[n]=h[N-1-n]$ | 奇 (N odd) | 無限制;最通用 | — |
| Type II | 對稱 | 偶 (N even) | $H(e^{j\pi})=0$ | 高通、帶阻 |
| Type III | 反對稱 $h[n]=-h[N-1-n]$ | 奇 | $H(e^{j0})=0$ 且 $H(e^{j\pi})=0$ | 低通、高通 |
| Type IV | 反對稱 | 偶 | $H(e^{j0})=0$ | 低通、帶阻 |
展開:為什麼有這些限制?
Type II 為什麼 $H(\pi)=0$?
對 Type II,$N$ 偶,$h[n]=h[N-1-n]$。代入 DTFT:
$$H(e^{j\pi}) = \sum_{n=0}^{N-1}h[n](-1)^n$$把對稱項配對:$h[k]\cdot(-1)^k + h[N-1-k]\cdot(-1)^{N-1-k} = h[k]\cdot[(-1)^k + (-1)^{N-1-k}]$
當 $N$ 偶,$N-1$ 奇,$(-1)^{N-1-k} = -(-1)^k$,所以每對配對和為 0。$\blacksquare$
Type III/IV 為什麼 $H(0)=0$?
反對稱 $h[n]=-h[N-1-n]$ 意味著係數和 $\sum h[n] = 0$(配對相消)。
而 $H(e^{j0}) = \sum h[n]$,所以必為 0。$\blacksquare$
實務選擇:
- 低通/帶通 → 用 Type I
- 需要奇對稱(如 Hilbert 變換器、微分器) → 用 Type III 或 IV
- 避免:用 Type II 設計高通會在 Nyquist 強制為 0,造成不可能達到規格
- 大多數設計工具(scipy.signal.firwin)會自動選擇正確類型
群延遲 (Group Delay) 分析
線性相位的真正意義不是「相位 = 0」,而是「不同頻率成分通過濾波器時都延遲相同的時間」——這由群延遲量化。
定義
群延遲是相位響應對 $\omega$ 的負導數,單位是樣本。它告訴你頻率 $\omega$ 附近的訊號封套被延遲了多少。
為什麼重要?
- 線性相位:$\tau_g$ 是常數 → 所有頻率延遲相同 → 訊號形狀不變
- 非線性相位:$\tau_g$ 隨頻率變化 → 不同頻率延遲不同 → 波形失真(即使振幅響應理想)
- 音訊和測量應用對相位失真特別敏感——例如 ECG 需要保持 QRS 波形
FIR vs IIR 比較
| 類型 | 群延遲 | 波形保真 |
|---|---|---|
| 線性相位 FIR | 常數 $(N-1)/2$ | 完美(純延遲) |
| Butterworth IIR | 非常數,過渡帶最大 | 失真 |
| Chebyshev I IIR | 過渡帶劇烈變化 | 嚴重失真 |
| Bessel IIR | 通帶內接近常數 | 較好(為相位優化) |
實務應用:
- 音訊處理:選 FIR 或 Bessel,避免 Chebyshev/Elliptic 的相位失真
- ECG/EEG:必須線性相位 FIR(保持 QRS/spike 波形)
- 通訊接收器:可用非線性相位 IIR(後面有等化器補償)
- 即時 forward-only:必須因果 → IIR 不能做完美線性相位
- 離線處理:可用 filtfilt(雙向濾波)達到零相位
6.5 2D FFT 與影像處理 (2D FFT & Image Processing)
Learning Objectives
- 理解 2D DFT 的可分離性(行 FFT + 列 FFT)
- 用頻域遮罩實現影像低通/高通濾波
- 解釋 MRI k-space 與 2D FFT 的關係
為什麼要學這個? 因為醫學影像 (MRI)、衛星遙感、電腦視覺都在頻域做去噪和特徵提取——2D FFT 是影像處理的基本功。
前情提要:6.4 設計了一維濾波器。影像是二維訊號——2D FFT 讓你在空間頻率域中分析和處理影像。
原理
直覺:1D 中,低頻 = 緩慢變化,高頻 = 快速變化。2D 中完全類比:低空間頻率 = 影像中緩慢變化的區域(平滑、整體亮度),高空間頻率 = 快速變化的區域(邊緣、紋理、雜訊)。
2D DFT 公式:
$$F[u,v] = \sum_{m=0}^{M-1}\sum_{n=0}^{N-1} f[m,n]\,e^{-j2\pi(um/M + vn/N)}$$
可分離性 (Separability):2D DFT 可以拆成先做行 (row) FFT,再做列 (column) FFT:
$$F[u,v] = \sum_{m=0}^{M-1}\left(\sum_{n=0}^{N-1} f[m,n]\,e^{-j2\pi vn/N}\right)e^{-j2\pi um/M}$$
計算量:M×N 影像的 2D FFT = M 次長度 N 的行 FFT + N 次長度 M 的列 FFT = O(MN log(MN))。
頻域中心的意義:
- 中心 (u=0, v=0) = DC 成分 = 影像平均亮度
- 靠近中心 = 低頻 = 整體結構和平滑區域
- 遠離中心 = 高頻 = 邊緣、細節、雜訊
- 特定方向的亮線 = 影像中該方向的週期性結構
推導:2D DFT 的可分離性
2D DFT 的核心 $e^{-j2\pi(um/M + vn/N)}$ 可以拆成兩個 1D 核心的乘積:
$$e^{-j2\pi(um/M + vn/N)} = e^{-j2\pi um/M} \cdot e^{-j2\pi vn/N}$$
因此:
$$F[u,v] = \sum_m e^{-j2\pi um/M} \underbrace{\left(\sum_n f[m,n]\,e^{-j2\pi vn/N}\right)}_{G[m,v] = \text{第 m 行的 1D DFT}}$$
先對每一行做 1D DFT 得到 $G[m,v]$,再對 $G[m,v]$ 的每一列做 1D DFT 得到 $F[u,v]$。順序可互換(先列再行)。
怎麼用
- 讀入灰階影像 $f[m,n]$(M×N 像素)。
- (可選)乘以 $(-1)^{m+n}$ 使頻譜中心化 (fftshift)。
- 計算 2D FFT → $F[u,v]$。
- 設計頻域遮罩 $H[u,v]$(低通/高通/帶通/陷波)。
- 相乘 $G[u,v] = F[u,v] \cdot H[u,v]$。
- 2D IFFT → 處理後影像 $g[m,n]$。
具體範例:衛星影像去除電力線干擾
// 衛星影像 512×512 像素,有 60Hz 電力線造成的水平條紋干擾
// Step 1: 計算 2D FFT 並觀察頻譜
F = fft2(image)
F_shifted = fftshift(F)
magnitude = log(1 + abs(F_shifted)) // 對數刻度顯示
// Step 2: 在頻譜中找到干擾對應的亮點
// 水平條紋 → 在頻域的垂直軸上出現亮點(在 (0, ±v₀) 處)
// v₀ 對應干擾的空間頻率
// Step 3: 設計陷波濾波器(Notch Filter)
// 在亮點位置放一個小圓形的零增益區域,半徑 r=5 像素
H = ones(512, 512)
for each notch_point (u0, v0):
for u, v in circle(u0, v0, r=5):
H[u, v] = 0 // 陷波
// Step 4: 頻域濾波 + IFFT
G = F_shifted * H
result = real(ifft2(ifftshift(G)))
// 結果:條紋干擾消除,影像細節保留
MRI 連結——k-space 就是 2D 頻率域
MRI 掃描器的射頻線圈直接在 k-space(= 2D 傅立葉空間)中擷取資料。每條掃描軌跡填充 k-space 的一行。重建影像 = 2D IFFT。
- 掃描全部 k-space → 完整影像,但掃描時間長(數分鐘)。
- 只掃描 k-space 中心(低頻)→ 影像模糊但速度快(用於定位掃描)。
- 只掃描 k-space 外圍(高頻)→ 只剩邊緣資訊。
- Compressed Sensing MRI:隨機採樣部分 k-space(~25%),用稀疏重建演算法還原完整影像。掃描時間縮短 4 倍。
應用場景
- MRI 影像重建:256×256 k-space 資料 → 2D IFFT → 解剖影像。Compressed sensing 可達 4-8 倍加速。
- 天文影像處理:望遠鏡影像受大氣湍流影響(PSF 模糊),在頻域做 Wiener 去卷積 (deconvolution) 恢復細節。
- 工業 X 光檢測:PCB X 光影像中的週期性結構(via 陣列)會在頻域產生亮點,陷波濾波可突顯缺陷。
- 邊界效應:2D FFT 假設影像是週期延伸的。如果影像邊界不連續,會產生十字形的頻譜洩漏 (spectral leakage)。解法:鏡像補零或邊緣漸變 (edge tapering)。
- 環形效應 (Ringing):銳利的頻域遮罩(如 ideal low-pass)會在空間域造成振鈴。用 Gaussian 或 Butterworth 型遮罩減輕。
- 相位很重要:影像的結構資訊主要在相位中(不是幅度)。處理時不要破壞相位。
- 影像中的結構是非週期性的 → 頻域方法效果差,用空間域方法(如 bilateral filter、non-local means)。
- 需要局部處理(不同區域不同濾波)→ 需要 2D STFT 或 wavelet。
- 替代方案:小波轉換 (wavelet) 在多尺度分析上比 2D FFT 更強大,是現代影像壓縮(JPEG 2000)和去噪的主流。
互動:2D FFT 影像濾波
選擇測試圖案,觀察其二維頻譜,並套用不同的頻域濾波器。
原始影像
2D FFT 頻譜
濾波後影像
6.6 OFDM 通訊系統 (Orthogonal Frequency Division Multiplexing)
Learning Objectives
- 描述 OFDM 符號的完整收發流程(IFFT → +CP → 通道 → -CP → FFT)
- 推導 CP 如何將線性卷積轉為圓卷積
- 用 LS/MMSE 做頻域通道估計
為什麼要學這個? 因為你的手機、Wi-Fi、數位電視全部都在用 OFDM——它是現代無線通訊的絕對核心。
前情提要:6.5 展示了 FFT 在影像中的應用。現在看通訊——OFDM 用 IFFT/FFT 驅動了你手機的每一次連線。
- Robert Chang, 1966:在 Bell Labs 提出 OFDM 的基本概念。
- Weinstein & Ebert, 1971:首次用 DFT/IDFT 實現 OFDM 調變/解調,讓 OFDM 變得實際可行。
- Peled & Ruiz, 1980:引入 Cyclic Prefix (CP) 解決 ISI 問題。
- 1990s 起普及:DVB-T (數位電視)、802.11a (Wi-Fi)、ADSL。
- 4G LTE (2009)、5G NR (2018)、Wi-Fi 6/7 皆以 OFDM 為基礎。
原理
直覺:與其用一個高速載波傳大量資料(每個符號很短 → 容易被 ISI 破壞),不如把資料分散到 N 個低速子載波 (subcarrier) 上並行傳輸。每個子載波的符號週期 = 原來的 N 倍 → 遠大於通道延遲擴展 (delay spread) → ISI 變得可以忽略。
發射端:
- N 個 QAM (Quadrature Amplitude Modulation) 符號 $D[0], D[1], \ldots, D[N-1]$
- N 點 IFFT:$d[n] = \text{IFFT}\{D[k]\}$ → 時域 OFDM 符號
- 加上 CP (Cyclic Prefix):把 $d[n]$ 的最後 $N_{CP}$ 點複製到前面
- 經過 DAC 和射頻前端發射
接收端:
- 去除 CP
- N 點 FFT:$Y[k] = \text{FFT}\{y[n]\}$
- 每個子載波獨立等化:$\hat{D}[k] = Y[k] / \hat{H}[k]$(只需一次複數除法!)
CP 為什麼有效?
CP 把線性卷積變成循環卷積——這正是 FFT 乘法所假設的。只要 CP 長度 ≥ 通道延遲擴展,接收端做 FFT 後每個子載波看到的就是 $Y[k] = H[k] \cdot D[k] + W[k]$,完美的頻域乘法關係。
完整推導:CP 如何消除 ISI
通道脈衝響應 $h[n]$,長度 L(delay spread = L-1 個樣本)。
發射的時域信號 $d[n]$ 長度 N,加上 CP 後長度 $N + N_{CP}$。
接收信號:$r[n] = \sum_{l=0}^{L-1} h[l]\,d_{\text{CP}}[n-l] + w[n]$
去除 CP 後(取 n = N_CP 到 N_CP+N-1),如果 $N_{CP} \geq L-1$:
- 前一個 OFDM 符號的「尾巴」完全落在 CP 區間內 → 被丟棄 → 沒有 ISI。
- 當前符號的卷積在 CP 區間內「啟動完成」,去除 CP 後相當於對 $d[n]$ 做循環卷積。
循環卷積在頻域 = 逐點相乘:
$$Y[k] = H[k] \cdot D[k] + W[k]$$
因此每個子載波可以獨立等化:$\hat{D}[k] = Y[k] / H[k]$。相比之下,單載波系統需要矩陣反轉(O(N³) 或用均衡器逼近)。
怎麼用
5G NR 具體參數:
| Numerology (μ) | 子載波間距 (SCS) | FFT Size (最大) | CP 長度 | 符號時間 | 適用場景 |
|---|---|---|---|---|---|
| 0 | 15 kHz | 4096 | 288 / 352 samples | 71.4 μs | <3GHz 大區域覆蓋 |
| 1 | 30 kHz | 4096 | 288 / 352 samples | 35.7 μs | 3.5GHz 主流部署 |
| 2 | 60 kHz | 4096 | 288 / 352 samples | 17.8 μs | 毫米波 |
| 3 | 120 kHz | 4096 | 288 / 352 samples | 8.9 μs | 毫米波高速 |
具體範例:5G NR μ=1 (30kHz SCS)
// FFT size: 4096 // 取樣率: 4096 × 30kHz = 122.88 MHz // 有效子載波數: 3276 (100MHz 頻寬) // 每個 OFDM 符號時間: 1/30kHz + CP = 33.33μs + 2.34μs = 35.67μs // 每個 slot (14 symbols): 0.5 ms // 每秒 OFDM 符號數: 14 × 2000 = 28,000 // 每秒 FFT 次數 (TX+RX): 28,000 × 2 = 56,000 次 4096 點 FFT // 每秒複數乘法: 56,000 × 4096 × log₂(4096)/2 = 56,000 × 24,576 ≈ 1.38 × 10⁹
通道估計 (Channel Estimation)
- 導頻 (Pilot/Reference Signal):在已知的子載波位置插入已知符號。
- LS 估計 (Least Squares):$\hat{H}[k_p] = Y[k_p] / D_{\text{pilot}}[k_p]$(只在導頻位置)
- 內插:用 LS 估計的導頻點內插得到所有子載波的 $\hat{H}[k]$。
- MMSE 估計:利用通道的延遲剖面 (delay profile) 統計特性做最佳內插,比 LS 好 3-5dB。
- 頻域等化:Zero-Forcing: $\hat{D}[k] = Y[k]/\hat{H}[k]$。MMSE: $\hat{D}[k] = \frac{\hat{H}^*[k]}{|\hat{H}[k]|^2 + \sigma_w^2/\sigma_D^2} Y[k]$
應用場景
- 5G NR:下行和上行都用 CP-OFDM(上行也可選 DFT-s-OFDM 降低 PAPR)。全球部署超過 200 萬基站 (2025)。
- Wi-Fi 6/7 (802.11ax/be):OFDMA(多用戶 OFDM),2048 點 FFT,支援 160/320MHz 頻寬。
- DVB-T2 數位電視:32K FFT(32768 點),處理長延遲擴展(山區反射)。
- 頻率偏移 (Carrier Frequency Offset, CFO):發射和接收的振盪器頻率不完全一致 → 子載波不再正交 → 載波間干擾 (Inter-Carrier Interference, ICI)。例如 5G @28GHz,0.1ppm 的振盪器精度 = 2.8kHz 偏移,佔 30kHz SCS 的 9.3%——必須做頻率同步。
- PAPR (Peak-to-Average Power Ratio):N 個子載波相位對齊時,峰值功率可達平均功率的 N 倍。PAPR ~10-12dB → 功率放大器需要很大的線性範圍(貴且耗電)。降低 PAPR 的方法:clipping、DFT-s-OFDM、tone reservation。
- CP 是 overhead:CP 不攜帶新資訊,佔 ~7% 的時間和頻譜資源。
- 通道幾乎沒有多路徑(如衛星通訊)→ 單載波就夠了,而且沒有 PAPR 問題。
- 極低延遲需求(CP 增加延遲)→ FBMC (Filter Bank Multi-Carrier) 不需要 CP。
- 替代方案:SC-FDMA (Single-Carrier FDMA) 用於 LTE 上行,PAPR 比 OFDM 低 2-3dB。FBMC、UFMC 是 beyond-5G 的候選技術。
✅ 快速檢核 (Quick Check)
Q1: OFDM 的循環前綴 (CP) 太短會發生什麼?
顯示答案
通道延遲超過 CP → 相鄰 OFDM 符號重疊 → ISI。同時,FFT 區間內的等效卷積不是圓卷積 → 子載波正交性被破壞 → ICI。
Q2: 5G NR 子載波間距 30kHz,4096 FFT,頻寬約多少?
顯示答案
30kHz × 4096 ≈ 122.88 MHz。
互動:OFDM 符號產生(IFFT)
64 個子載波,每個攜帶 QPSK 符號。IFFT 將頻域資料轉為時域 OFDM 符號。
互動:OFDM 完整收發模擬
完整模擬 OFDM 收發鏈:IFFT 產生符號 → 加 CP → 多路徑通道 → 加雜訊 → 移除 CP → FFT → LS 通道估計 → 等化 → 解調。
6.7 雷達訊號處理 (Radar Signal Processing)
Learning Objectives
- 用匹配濾波實現脈衝壓縮
- 解釋 Range-Doppler 處理的雙 FFT 架構
- 從模糊函數判斷波形的距離-速度分辨能力
為什麼要學這個? 因為自動駕駛、氣象預報、軍事偵測全靠雷達,而雷達的訊號處理本質就是 FFT。
前情提要:6.6 是通訊的 FFT。雷達也是 FFT 的重度使用者——距離用快時間 FFT、速度用慢時間 FFT。
- 脈衝壓縮 (Pulse Compression):P.M. Woodward, 1953。用匹配濾波 (matched filter) 在不增加峰值功率的情況下提升距離解析度。
- 脈衝都卜勒處理 (Pulse-Doppler Processing):1960s,美國空軍主導開發,用 FFT 從多個脈衝回波中提取都卜勒頻率。
- 合成孔徑雷達 (Synthetic Aperture Radar, SAR):1950s 起發展,用飛行路徑合成大天線,實現高解析度影像。
原理
直覺:發射一個已知波形 $s(t)$,目標反射回來的信號 = 延遲 + 頻移的版本。要找出延遲(= 距離)和頻移(= 速度),最好的方法是「匹配濾波」——用已知波形去和回波做相關。FFT 讓這個相關運算可以高效完成。
匹配濾波 (Matched Filter)
最大化 SNR 的最佳濾波器 = 發射訊號的時間反轉共軛:
$$h_{\text{MF}}(t) = s^*(-t)$$
頻域實現:$Y(\omega) = S^*(\omega) \cdot X(\omega)$ → IFFT → 壓縮脈衝
Range-Doppler 處理
接收資料排成二維矩陣:[快時間 (fast-time) × 慢時間 (slow-time)]
- 快時間 FFT(每行):距離壓縮 (range compression),把 chirp 脈衝壓縮成窄峰。
- 慢時間 FFT(每列):都卜勒處理,從多次脈衝的相位變化中提取速度。
- 得到 Range-Doppler Map:每個亮點 = 一個目標,水平位置 = 距離,垂直位置 = 速度。
解析度:
$$\Delta R = \frac{c}{2B} \quad (\text{距離解析度,B = 頻寬})$$
$$\Delta v = \frac{\lambda}{2T_{\text{CPI}}} \quad (\text{速度解析度,}T_{\text{CPI}} = \text{相干處理時間})$$
模糊函數 (Ambiguity Function)
定義:
$$\chi(\tau, f_d) = \int_{-\infty}^{\infty} s(t)\,s^*(t-\tau)\,e^{j2\pi f_d t}\,dt$$
直覺解釋:模糊函數描述波形在「距離 ($\tau$) — 都卜勒 ($f_d$)」平面上的分辨能力。$|\chi(0,0)|$ = 峰值(完美匹配),$|\chi(\tau, f_d)|$ 在其他位置 = 旁瓣(混淆程度)。
Woodward 定理:模糊函數的總體積是守恆的——你壓低一個地方的旁瓣,其他地方就會升高。波形設計就是在距離-都卜勒平面上「雕塑」旁瓣的形狀。
- LFM Chirp:斜條形模糊函數(距離和都卜勒耦合,但主瓣窄)。
- 相位編碼脈衝 (Phase-Coded Pulse):thumbtack 形(低旁瓣但對 Doppler 敏感)。
推導:LFM Chirp 的距離解析度
LFM (Linear Frequency Modulated) chirp: $s(t) = \text{rect}(t/T)\,e^{j\pi \mu t^2}$,其中 $\mu = B/T$ (chirp rate)。
匹配濾波輸出(在零都卜勒處):
$$\chi(\tau, 0) = \int s(t)\,s^*(t-\tau)\,dt$$
經過推導(展開並化簡二次相位項),結果近似為:
$$|\chi(\tau, 0)| \approx T\,\text{sinc}(B\tau)$$
sinc 函數的第一零點在 $\tau = 1/B$,對應距離:
$$\Delta R = \frac{c\tau}{2} = \frac{c}{2B}$$
關鍵觀察:距離解析度只取決於頻寬 B,與脈衝時間 T 無關。這就是脈衝壓縮的威力——長脈衝(高能量)+ 大頻寬(高解析度)兩者可以同時達成。
怎麼用
具體範例:車用 77GHz FMCW 雷達
// 系統參數 f_c = 77 GHz // 載波頻率 B = 1 GHz // Chirp 頻寬 T_chirp = 50 μs // 單個 Chirp 時間 N_chirps = 128 // 每個 CPI 的 Chirp 數 λ = c / f_c = 3.896 mm // 波長 // 距離解析度 ΔR = c / (2B) = 3×10⁸ / (2×10⁹) = 0.15 m = 15 cm // 最大不模糊距離 R_max = c × T_chirp / 2 = 3×10⁸ × 50×10⁻⁶ / 2 = 7500 m // (實際受 ADC 取樣率和 SNR 限制,通常 ~200m) // 速度解析度 Δv = λ / (2 × N_chirps × T_chirp) = 3.896×10⁻³ / (2 × 128 × 50×10⁻⁶) = 0.304 m/s ≈ 1.1 km/h // 最大不模糊速度 v_max = λ / (4 × T_chirp) = 3.896×10⁻³ / (4 × 50×10⁻⁶) = 19.5 m/s ≈ 70 km/h // FFT 處理 // 快時間:256 點 FFT → 256 個距離 bins, 每 bin = R_max/256 ≈ 29 m // (實際取 ADC 取樣點數,如 256 @10MHz → 覆蓋 3840m) // 慢時間:128 點 FFT → 128 個速度 bins // Range-Doppler Map: 256 × 128 矩陣,每個亮點 = 一個目標
應用場景
- 車用 FMCW 雷達:77GHz,B=1-4GHz,距離解析度 3.75-15cm。每輛車 3-5 顆雷達,全球年產量超過 5 億顆 (2025)。
- 氣象雷達:S-band (2.7-3.0GHz),用都卜勒 FFT 量測降雨粒子的徑向速度(風場)。WSR-88D Doppler 雷達 1024 點 FFT,速度解析度 ~0.5 m/s。
- SAR 衛星影像:方位向 (azimuth) 用 FFT 做聚焦 (focusing),實現 ~1m 空間解析度。Sentinel-1 衛星每軌處理 TB 級資料。
- LFM 距離-都卜勒耦合:移動目標的都卜勒頻移會被誤判為距離偏移。需要做 Doppler 補償或使用多斜率 (dual-slope) chirp。
- 旁瓣遮蔽:強目標的旁瓣可能蓋住弱目標。需要加窗降低旁瓣 + CFAR (Constant False Alarm Rate) 自適應閾值偵測。
- 盲速 (Blind Speed):當目標速度恰好等於 $v_{\text{max}}$ 的整數倍時,都卜勒頻移繞回零 → 無法偵測。用交錯 PRF (Pulse Repetition Frequency) 解決。
- 目標數很少且已知 → 參數估計法(如 MUSIC、ESPRIT)比 FFT 解析度更高。
- 非線性調頻 (NLFM) 波形 → 匹配濾波仍然適用,但標準 FFT-based 處理需要修改。
- 替代方案:Compressed Sensing 雷達可用更少的樣本重建 Range-Doppler map(適合稀疏場景)。MIMO 雷達用多發多收天線增加虛擬孔徑。
📝 例題演練 (Worked Example)
77GHz FMCW 車用雷達:頻寬 B=1GHz,chirp 時間 50μs,128 個 chirp。(a) 距離解析度?(b) 最大不模糊距離(256 點 FFT)?(c) 速度解析度?
顯示解題過程
(a) ΔR = c/(2B) = 3×10⁸/(2×10⁹) = 0.15m = 15cm
(b) Rmax = N·ΔR = 256×0.15 = 38.4m
(c) λ = c/f = 3.9mm, Δv = λ/(2·128·50μs) = 3.9×10⁻³/(2×128×50×10⁻⁶) = 0.30 m/s
✅ 快速檢核 (Quick Check)
Q1: 雷達距離解析度 15cm,需要多大頻寬?
顯示答案
ΔR = c/(2B) → B = c/(2·0.15) = 3×10⁸/(0.3) = 1 GHz。
Q2: 為什麼 LFM chirp 的模糊函數是斜條形?
顯示答案
因為 LFM 的頻率隨時間線性增加,距離和都卜勒之間產生耦合——靜止目標的距離估計會因都卜勒偏移而偏移。
互動:模糊函數 (Ambiguity Function)
模糊函數描述雷達波形在距離(延遲 τ)和速度(都卜勒 fd)兩個維度上的分辨能力。它的形狀決定了波形的性能。
互動:匹配濾波與脈衝壓縮 (Matched Filter & Pulse Compression)
雷達發射一個長 chirp 脈衝,透過匹配濾波器在接收端壓縮成尖銳的峰值。長脈衝 = 高能量(遠距離偵測),壓縮後 = 高距離解析度(分辨近距離目標)。
互動:雷達目標放置與 Range-Doppler
設定 3 個目標的距離、速度和振幅,觀察 Range-Doppler Map 上的反應。
6.8 陣列訊號處理 (Array Signal Processing)
Learning Objectives
- 寫出 ULA 的方向向量並解釋空間 Nyquist 條件
- 比較 Delay-and-Sum、Capon、MUSIC 三種波束成形方法
- 從波束寬度公式計算陣列的角度解析度
為什麼要學這個? 因為 5G massive MIMO、相位陣列雷達、聲納定位全靠天線陣列——空間濾波就是空間維度的 FFT。
前情提要:6.7 的雷達用 FFT 做距離-速度估計。陣列天線把同樣的概念推廣到空間——用『空間 FFT』估計訊號來向。
- 相位陣列 (Phased Array):1940s 二戰雷達即開始使用。
- Capon (MVDR) 波束成形:Jack Capon, 1969。最小方差無失真響應 (Minimum Variance Distortionless Response)。
- MUSIC 演算法:Ralph Schmidt, 1986。利用訊號子空間 (signal subspace) 和雜訊子空間 (noise subspace) 的正交性做高解析度 DOA (Direction of Arrival) 估計。
- Massive MIMO:Thomas Marzetta, 2010。提出用大量天線(64-256)同時服務多個用戶。成為 5G 核心技術。
原理
直覺:一組等距排列的天線 (Uniform Linear Array, ULA) 接收到同一個平面波,但每根天線的接收時間有微小差異(取決於波的入射角度)。這個時間差 = 相位差。分析這些相位差就能推算出訊號的來向。這和時域取樣完全類比:天線間距 = 空間取樣間隔,入射角 = 空間頻率。
ULA 模型
M 個天線等距 d 排列。平面波從角度 $\theta$ 入射,相鄰天線的相位差:
$$\Delta\phi = \frac{2\pi d \sin\theta}{\lambda}$$
方向向量 (Steering Vector):
$$\mathbf{a}(\theta) = \begin{bmatrix} 1 \\ e^{j\frac{2\pi d\sin\theta}{\lambda}} \\ e^{j\frac{2\pi \cdot 2d\sin\theta}{\lambda}} \\ \vdots \\ e^{j\frac{2\pi(M-1)d\sin\theta}{\lambda}} \end{bmatrix}$$
波束成形 (Beamforming) = 空間濾波
$$y = \mathbf{w}^H \mathbf{x}$$
其中 $\mathbf{x}$ 是 M 個天線的接收向量,$\mathbf{w}$ 是權重向量。
傳統波束成形 (Delay-and-Sum, DAS):$\mathbf{w} = \mathbf{a}(\theta_0)/M$。本質上就是空間 DFT——掃描所有 $\theta$ 等於對空間樣本做 DFT。
空間 Nyquist 定理
d ≤ λ/2,否則出現 grating lobes(空間混疊!完全類比時域 Nyquist 定理中的混疊)。
d > λ/2 時,不同方向的訊號在天線陣列上產生相同的相位差 → 無法區分 → 空間混疊。
推導:空間 DFT 與角度解析度
DAS 波束成形器的空間功率譜:
$$P_{\text{DAS}}(\theta) = \frac{1}{M^2}\left|\sum_{m=0}^{M-1} e^{j\frac{2\pi md}{\lambda}(\sin\theta - \sin\theta_0)}\right|^2$$
令空間頻率 $u = d\sin\theta/\lambda$,這就是一個離散傅立葉和!
主波束寬度(3dB beamwidth):
$$\Delta\theta_{3\text{dB}} \approx \frac{0.886\lambda}{Md\cos\theta_0}$$
在 broadside ($\theta_0 = 0$) 時簡化為 $\Delta\theta \approx 0.886\lambda/(Md)$。
天線越多(M 越大)、間距越大(d 越大)→ 波束越窄 → 角度解析度越高。但 d > λ/2 會出現 grating lobes。
怎麼用
具體範例:5G Massive MIMO 基站
// 參數 M = 64 天線 (8×8 平面陣列) f_c = 28 GHz (毫米波) λ = c / f_c = 3×10⁸ / 28×10⁹ = 10.71 mm d = λ/2 = 5.36 mm (天線間距) // 波束寬度 Δθ ≈ 0.886 × λ / (M_row × d) = 0.886 × 10.71 / (8 × 5.36) = 0.221 rad ≈ 12.7° // (8×8 陣列在水平和垂直各有 8 個天線) // 若用全部 64 天線做 2D 波束成形: // 有效孔徑 = 8 × 5.36mm = 42.9mm // 波束寬度 ≈ 12.7° × 12.7° (兩個維度) // 空間多工能力 // 64 天線可同時形成多個獨立波束 // 最多服務 ~M/2 = 32 個用戶(理論上限) // 實際上 8-16 個並行用戶(受通道相關性限制) // 頻譜效率提升 // 單用戶:~5 bps/Hz // 16 用戶 MU-MIMO:~80 bps/Hz (理想情況)
進階方法
Capon (MVDR) 波束成形器:
$$\mathbf{w}_{\text{Capon}} = \frac{\mathbf{R}^{-1}\mathbf{a}(\theta_0)}{\mathbf{a}^H(\theta_0)\mathbf{R}^{-1}\mathbf{a}(\theta_0)}$$
最小化輸出功率 subject to 目標方向增益 = 1。結果:比 DAS 窄很多的波束,可以有效抑制干擾。
MUSIC DOA 估計:
完全類比頻率版 MUSIC(見 3.4 節),只是把「頻率」替換成「角度」:
$$P_{\text{MUSIC}}(\theta) = \frac{1}{\mathbf{a}^H(\theta)\,\mathbf{E}_n\mathbf{E}_n^H\,\mathbf{a}(\theta)}$$
其中 $\mathbf{E}_n$ 是雜訊子空間。尖峰位置 = 訊號來向。可以分辨間隔遠小於波束寬度的訊號源。
應用場景
- 5G Massive MIMO:64-256 天線,毫米波波束追蹤 (beam tracking),每毫秒更新波束方向。
- 雷達電子掃描 (AESA):戰鬥機雷達用上千個天線元素做電子掃描,毫秒級切換波束方向(機械轉動需要秒級)。
- 助聽器波束成形:2-4 個麥克風陣列做語音增強。在嘈雜環境中把波束對準說話者(SNR 提升 5-10dB)。
- 校準誤差:天線的位置、增益、相位不一致會嚴重降低性能。Massive MIMO 需要定期做空中校準 (Over-the-Air Calibration)。
- Capon/MUSIC 需要足夠的 snapshots:相關矩陣 $\mathbf{R}$ 的估計需要 ≥2M 個 snapshot 才穩定。快速變化的環境可能來不及累積。
- 寬頻訊號:方向向量 $\mathbf{a}(\theta)$ 與頻率有關。寬頻訊號需要空間-時間處理 (wideband beamforming),例如 DFT beamforming + sub-band processing。
- 近場效應:當目標距離 < $2D^2/\lambda$(D = 陣列孔徑)時,平面波假設不成立,需要近場波束成形。
- 只有一個訊號源且不需要知道方向 → 單天線即可。
- 訊號源的角度分布範圍很窄(如衛星通訊)→ 固定指向天線比陣列便宜。
- 替代方案:如果需要分辨同頻訊號但不關心方向,可用 CDMA(碼分多址)或 NOMA(非正交多址接入)。
✅ 快速檢核 (Quick Check)
Q1: ULA 天線間距 d > λ/2 會發生什麼?
顯示答案
Grating lobes(柵瓣)——就是空間域的混疊。類似時域取樣率不夠產生 aliasing。
Q2: 5G massive MIMO 用 64 天線 @28GHz(λ≈10.7mm),波束寬度約多少?
顯示答案
≈ λ/(M·d) ≈ 10.7/(64×5.35) ≈ 0.03 rad ≈ 1.8°(假設 d=λ/2=5.35mm)。
6.9 生醫訊號分析 (Biomedical Signal Analysis)
Learning Objectives
- 列出 EEG 五大頻帶並說明各自的生理意義
- 用 Welch 法估計 EEG 的頻帶功率比值
- 描述 HRV 頻域分析的標準流程(R-R 間隔 → 重取樣 → PSD → LF/HF)
為什麼要學這個? 因為 EEG/ECG 的臨床判讀越來越依賴頻域量化指標,這是跨入生醫工程的必備技能。
前情提要:6.8 處理的是人造訊號。生醫訊號(腦波、心電圖)也是頻域分析的重要應用場景。
- Hans Berger, 1929:首次記錄人類 EEG (Electroencephalography, 腦電圖),發現閉眼時出現 8-13Hz 的 α 波 (Alpha rhythm)。
- HRV 頻域分析標準化:European Society of Cardiology (ESC) 和 North American Society of Pacing and Electrophysiology (NASPE) 在 1996 年發布 Task Force 報告,定義了 HRV 的 LF/HF 頻帶和分析方法。
原理
EEG 五大頻帶
| 頻帶 | 頻率範圍 | 生理意義 | 臨床應用 |
|---|---|---|---|
| δ (Delta) | 0.5 – 4 Hz | 深層睡眠(N3 期) | 睡眠深度評估、腦損傷偵測 |
| θ (Theta) | 4 – 8 Hz | 淺睡、冥想、記憶編碼 | 睡眠分期(N1/N2)、注意力指標 |
| α (Alpha) | 8 – 13 Hz | 放鬆清醒、閉眼 | 清醒度評估、BCI 控制 |
| β (Beta) | 13 – 30 Hz | 專注、警覺、主動思考 | 注意力監測、焦慮評估 |
| γ (Gamma) | 30 – 100 Hz | 高階認知、跨區域整合 | 癲癇高頻振盪偵測 |
分析方法:
- Welch PSD(見 3.2 節)→ 各頻帶功率積分 → 功率比值
- 例如 α/θ 比值 = 注意力指標(越高 = 越專注)
- 相對功率:$P_\alpha^{\text{rel}} = P_\alpha / P_{\text{total}}$
HRV 頻域分析
心率變異度 (Heart Rate Variability, HRV) 反映自律神經系統 (Autonomic Nervous System) 的活性。
| 頻帶 | 頻率範圍 | 主要調控 |
|---|---|---|
| VLF (Very Low Frequency) | 0.003 – 0.04 Hz | 體溫調節、腎素-血管緊張素系統 |
| LF (Low Frequency) | 0.04 – 0.15 Hz | 交感 + 副交感(非單純交感!) |
| HF (High Frequency) | 0.15 – 0.4 Hz | 副交感(呼吸性竇性心律不整) |
分析流程:R-R 間隔序列 (Tachogram) → 重新取樣(不等距 → 等距,通常用 cubic spline @4Hz)→ PSD → 頻帶功率積分。
推導:為什麼 HRV 需要重新取樣?
R-R 間隔序列天然是不等距取樣(因為心跳間隔不固定)。傅立葉分析要求等距取樣。
解決方法:
- 把每個 R-R 間隔值放在對應的時間點上(不等距序列)。
- 用 cubic spline 內插生成等距序列(通常 4Hz = 每 0.25 秒一個點)。
- 4Hz 取樣率的 Nyquist 頻率 = 2Hz,足以涵蓋 HF 頻帶(0.4Hz)。
替代方案:Lomb-Scargle periodogram 可直接處理不等距資料,但 Welch PSD 在臨床上更普及。
怎麼用
EEG 分析步驟
// Step 1: 訊號擷取 // 取樣率: 250-1000 Hz (臨床常用 256 或 512 Hz) // 電極: 國際 10-20 系統 (19-64 channel) // ADC 解析度: 24-bit (EEG 振幅只有 ~10-100 μV) // Step 2: 前處理 band_pass_filter(0.5, 100) // 去除 DC 漂移和高頻雜訊 notch_filter(60) // 去除電力線干擾 (台灣 60Hz) ICA_artifact_removal() // 獨立成分分析去除眼動/肌電 // Step 3: 頻譜分析 (Welch 法) segment_length = 2 * fs // 2 秒段 (512 點 @256Hz) overlap = 0.5 // 50% 重疊 window = 'hann' PSD = welch(eeg_channel, segment_length, overlap, window) // Step 4: 頻帶功率計算 P_delta = integrate(PSD, 0.5, 4) // δ 功率 P_theta = integrate(PSD, 4, 8) // θ 功率 P_alpha = integrate(PSD, 8, 13) // α 功率 P_beta = integrate(PSD, 13, 30) // β 功率 P_gamma = integrate(PSD, 30, 100) // γ 功率 P_total = P_delta + P_theta + P_alpha + P_beta + P_gamma // Step 5: 計算指標 attention_index = P_alpha / P_theta // α/θ 比 relative_alpha = P_alpha / P_total // 相對 α 功率 // 睡眠分期範例: // 清醒 (眼閉): α 主導 (relative_alpha > 0.4) // N1 淺睡: θ 增加, α 減少 // N2: Sleep spindles (12-14Hz 短暫爆發) + K-complex // N3 深睡: δ 主導 (relative_delta > 0.5, 振幅 > 75μV) // REM: 低幅快波 (類似清醒,但有快速眼動)
HRV 分析步驟
// Step 1: R 波偵測 (Pan-Tompkins Algorithm)
ecg_filtered = bandpass(ecg, 5, 15) // 聚焦 QRS 複合波
ecg_diff = differentiate(ecg_filtered)
ecg_squared = ecg_diff ** 2
ecg_integrated = moving_average(ecg_squared, 150ms)
R_peaks = adaptive_threshold(ecg_integrated)
// Step 2: 計算 R-R 間隔 (Tachogram)
RR_intervals = diff(R_peaks) / fs // 單位: 秒
RR_times = cumsum(RR_intervals) // 對應時間點
// Step 3: 去除 ectopic beats (異位搏動)
for i in range(len(RR)):
if abs(RR[i] - RR[i-1]) / RR[i-1] > 0.20:
RR[i] = interpolate(neighbors) // 內插取代
// Step 4: 重新取樣到等距
fs_resample = 4 // 4 Hz
RR_resampled = cubic_spline_interpolate(RR_times, RR_intervals, fs_resample)
RR_resampled -= mean(RR_resampled) // 去除 DC
// Step 5: Welch PSD
segment_length = 256 // 256 點 @4Hz = 64 秒
overlap = 0.5
PSD_hrv = welch(RR_resampled, segment_length, overlap, 'hann')
// Step 6: 頻帶功率
LF_power = integrate(PSD_hrv, 0.04, 0.15) // ms²
HF_power = integrate(PSD_hrv, 0.15, 0.40) // ms²
LF_HF_ratio = LF_power / HF_power
// 正常值參考:
// 健康年輕人: LF/HF ≈ 1.0-2.0
// 壓力/焦慮: LF/HF ↑ (交感活化)
// 運動員休息: HF ↑, LF/HF ↓ (副交感主導)
// 心衰竭: 總功率 ↓↓, LF/HF 可能異常高或低
應用場景
- 腦機介面 (Brain-Computer Interface, BCI):偵測使用者想像運動 (motor imagery) 造成的 μ (8-12Hz) / β (18-26Hz) 節律變化,控制輪椅或機械手臂。分類準確率 70-90%。
- 睡眠監測穿戴裝置:用單通道前額 EEG(如 Muse 頭帶),計算 δ/θ/α 功率做自動睡眠分期。取樣率 256Hz,每 30 秒一個 epoch 做 Welch PSD。
- 心臟自律神經評估:5 分鐘短時 HRV 分析用於壓力評估、運動訓練監控、糖尿病自律神經病變篩檢。Apple Watch/Garmin 手錶內建此功能。
- EEG artifact 主導頻譜:眼動 (EOG) 產生 0-4Hz 的大振幅干擾 → 被誤判為 δ 活動。肌電 (EMG) 汙染 >20Hz。50/60Hz 電力線干擾。必須先去除 artifact。
- LF ≠ 交感活性:這是最常見的誤解!LF 頻帶同時受交感和副交感神經調節(壓力反射機制)。只有 HF 較純粹反映副交感活性。LF/HF 比值只能當作「交感-副交感平衡」的粗略指標。
- 短段 HRV 不可靠:VLF 需要至少 5 分鐘資料(否則頻率解析度不足)。LF 需要至少 2 分鐘。24 小時長段分析更穩定。
- 呼吸頻率影響 HF:如果受試者呼吸很慢(<0.15Hz,如冥想),呼吸成分會落在 LF 頻帶而非 HF → LF/HF 比值失真。需要同時記錄呼吸頻率。
- EEG 中的短暫事件(如 epileptic spike,持續 <200ms)→ 頻域方法無法定位時間。用時頻分析(STFT、wavelet)。
- HRV 在心律不整(如心房顫動)時 → RR 間隔完全不規則,頻域分析沒有意義。改用非線性方法(approximate entropy、Poincare plot)。
- 替代方案:多尺度熵 (Multiscale Entropy) 分析、遞迴圖 (Recurrence Plot)、深度學習特徵自動擷取。
✅ 快速檢核 (Quick Check)
Q1: EEG 閉眼時哪個頻帶會增強?
顯示答案
α 波(8-13 Hz)——這就是 Berger 效應。
Q2: HRV 頻域分析的 LF/HF ratio 代表什麼?
顯示答案
常被解釋為交感/副交感平衡指標,但這其實是過度簡化——LF 同時受交感和副交感調節。
互動:EEG 睡眠分期練習
系統產生模擬 EEG 功率譜,請根據各頻帶的功率分佈判斷睡眠階段。
6.10 振動分析完整流程 (Complete Vibration Analysis Workflow)
Learning Objectives
- 描述振動分析從感測器到故障診斷的完整 6 步流程
- 計算給定軸承參數的 BPFO/BPFI 特徵頻率
- 區分不平衡(1X)、不對準(2X)、鬆動(多倍頻)、軸承(BPFO)的頻譜特徵
為什麼要學這個? 因為預測性維護(Predictive Maintenance)每年為工業界節省數十億美元,而它的核心就是振動頻譜分析。
前情提要:6.9 分析的是人體訊號。最後一章把所有工具串起來,展示振動分析從感測器到故障診斷的完整端對端流程。
- ISO 10816 / ISO 20816:定義了振動嚴重程度等級(A: 良好 → D: 危險),是工業振動監測的國際標準。
- Robert Randall 和 Jérôme Antoni:系統化了包絡譜分析 (Envelope Spectrum Analysis) 方法,特別是軸承故障診斷中的頻帶選擇策略(Spectral Kurtosis)。
完整振動分析流程
Step 1:訊號擷取 (Signal Acquisition)
- 感測器:加速度計 (Accelerometer),通常 IEPE/ICP 型(內建放大器,單一同軸電纜輸出)。
- 取樣率:至少 2.56× 最高關注頻率(ISO 建議包含 anti-aliasing filter 的 roll-off)。
- 一般旋轉機械:fs = 25.6 kHz(涵蓋到 10 kHz)
- 軸承診斷:fs = 51.2 kHz(需要高頻共振帶)
- 齒輪箱分析:fs > 50 kHz(嚙合頻率可能很高)
- 抗混疊濾波器 (Anti-Aliasing Filter):類比低通濾波器在 ADC 前面,截止頻率設在 0.4×fs。
- 安裝:螺栓固定 > 磁鐵 > 膠黏 > 手持探針。安裝品質直接影響高頻響應。
Step 2:前處理 (Preprocessing)
// DC offset 去除 signal -= mean(signal) // 高通濾波:去除 < 5Hz 的低頻干擾 // (慣性基座振動、感測器安裝鬆動、溫度漂移) signal = highpass(signal, fc=5, order=4) // 必要時帶通濾波 // (聚焦關注頻段,如齒輪嚙合頻率附近) signal_bp = bandpass(signal, f_low, f_high, order=6)
Step 3:基本頻譜分析 (Basic Spectrum Analysis)
// 加窗 FFT + Welch 平均 nfft = 8192 // 頻率解析度 = fs/nfft = 25600/8192 = 3.125 Hz window = 'hann' n_averages = 16 // 16 段平均,降低隨機變異 overlap = 0.5 // 50% 重疊 PSD = welch(signal, nfft, overlap, window, n_averages)
識別特徵頻率 (Characteristic Frequencies):
| 故障類型 | 特徵頻率 | 頻譜特徵 |
|---|---|---|
| 不平衡 (Imbalance) | 1X = 轉速 | 1X 幅值高,主要在徑向 |
| 不對準 (Misalignment) | 2X = 2×轉速 | 2X 幅值高,可能有軸向振動 |
| 機械鬆動 (Looseness) | 多倍頻 (1X, 2X, 3X...) | 多個轉速倍頻,可能有 0.5X 分諧波 |
| 齒輪故障 (Gear Fault) | 嚙合頻率 = 齒數×轉速 | 嚙合頻率出現邊帶 (sideband) ±1X |
| 葉片問題 (Blade/Vane) | 葉片通過頻率 = 葉片數×轉速 | 泵浦/風扇的流體脈動 |
| 軸承故障 (Bearing Fault) | BPFO/BPFI/BSF/FTF | 需要包絡譜分析(見 Step 4) |
Step 4:包絡譜分析(軸承故障診斷)(Envelope Spectrum Analysis)
直覺:軸承缺陷每次經過負載區時會產生一個短暫衝擊,激發軸承座的高頻結構共振(2-10 kHz)。這些衝擊以軸承故障頻率重複。直接看頻譜只看到高頻共振,看不到故障頻率的週期性。包絡分析 = 帶通提取共振帶 → Hilbert 包絡 → 包絡的 FFT → 在包絡譜中尋找故障頻率。
// Step 4a: 帶通濾波 (聚焦高頻共振帶) // 選擇頻帶:可用 Spectral Kurtosis (SK) 自動找最佳頻帶 // 或根據經驗選 2-10 kHz signal_bp = bandpass(signal, 2000, 10000, order=6) // Step 4b: Hilbert 包絡 analytic = hilbert(signal_bp) envelope = abs(analytic) // Step 4c: 包絡 FFT envelope -= mean(envelope) // 去 DC envelope_spectrum = fft(envelope * hann_window) // Step 4d: 在包絡譜中尋找軸承特徵頻率 // 如果在 BPFO 及其倍頻 (2×BPFO, 3×BPFO...) 處有峰值 → 外環故障 // 如果在 BPFI 及其倍頻處有峰值,且被 1X 調變 → 內環故障 // 如果在 BSF 及其倍頻處有峰值 → 滾動體故障 // 如果在 FTF 及其倍頻處有峰值 → 保持架故障
Step 5:時頻分析(變轉速情況)
如果轉速不固定(升速、降速、負載變化),特徵頻率會隨時間變化。需要 STFT 或階次追蹤 (Order Tracking)。
- STFT:觀察頻率隨時間的變化(彩色瀑布圖 waterfall plot)。
- 階次追蹤:用轉速計 (tachometer) 同步取樣,把時間軸換成「角度」→ 特徵頻率變成固定的「階次」(order)。
Step 6:趨勢監測 (Trend Monitoring)
// 每天(或每週)擷取一次振動資料 // 追蹤關鍵指標隨時間的趨勢: // - Overall RMS 振動值 (mm/s) // - 特定頻帶的 RMS(如 1X, BPFO 頻帶) // - 峰值 (Peak) 和波峰因子 (Crest Factor) // 警報閾值設定: // 方法 1: ISO 20816 絕對閾值 // Zone A (< 2.8 mm/s): 良好 // Zone B (2.8-7.1 mm/s): 可接受 // Zone C (7.1-18 mm/s): 需關注 // Zone D (> 18 mm/s): 危險,立即停機 // 方法 2: 基線 (Baseline) 相對閾值 // 警告: Baseline + 6 dB (2倍) // 警報: Baseline + 12 dB (4倍) // 趨勢突然上升 → 排程維護 (planned shutdown) // 比非計畫停機便宜 10-100 倍
軸承特徵頻率 (Bearing Characteristic Frequencies)
$$\text{BPFO} = \frac{n}{2} f_r \left(1 - \frac{d}{D}\cos\alpha\right) \quad \text{(外環故障頻率)}$$
$$\text{BPFI} = \frac{n}{2} f_r \left(1 + \frac{d}{D}\cos\alpha\right) \quad \text{(內環故障頻率)}$$
$$\text{BSF} = \frac{D}{2d} f_r \left[1 - \left(\frac{d}{D}\cos\alpha\right)^2\right] \quad \text{(滾動體故障頻率)}$$
$$\text{FTF} = \frac{1}{2} f_r \left(1 - \frac{d}{D}\cos\alpha\right) \quad \text{(保持架故障頻率)}$$
其中:n = 滾動體數,fr = 轉速 (Hz),d = 滾動體直徑,D = 節徑 (pitch diameter),α = 接觸角。
具體範例:SKF 6205 軸承
// SKF 6205 深溝球軸承參數
n = 9 // 滾珠數
d = 7.94 mm // 滾珠直徑
D = 38.5 mm // 節徑
α = 0° // 接觸角 (深溝球軸承)
cos(α) = 1
// 轉速: 1800 RPM = 30 Hz
f_r = 30 Hz
// BPFO (外環故障頻率)
BPFO = (9/2) × 30 × (1 - 7.94/38.5) = 4.5 × 30 × 0.7938
= 4.5 × 30 × 0.7938 = 107.2 Hz
// BPFI (內環故障頻率)
BPFI = (9/2) × 30 × (1 + 7.94/38.5) = 4.5 × 30 × 1.2062
= 4.5 × 30 × 1.2062 = 162.8 Hz
// BSF (滾動體故障頻率)
BSF = (38.5 / (2×7.94)) × 30 × [1 - (7.94/38.5)²]
= 2.424 × 30 × [1 - 0.04253]
= 2.424 × 30 × 0.9575 = 69.6 Hz
// FTF (保持架故障頻率)
FTF = (1/2) × 30 × (1 - 7.94/38.5) = 15 × 0.7938
= 11.9 Hz
// 診斷邏輯:
// 包絡譜在 107.2, 214.4, 321.6 Hz 有峰值 → 外環故障
// 包絡譜在 162.8, 325.6 Hz 有峰值,且有 ±30Hz 邊帶 → 內環故障
// 包絡譜在 69.6, 139.2 Hz 有峰值 → 滾珠故障
// 包絡譜在 11.9, 23.8 Hz 有峰值 → 保持架故障
應用場景
- 石化廠泵浦監測:離心泵是石化廠最多的旋轉機械。振動監測預警不平衡、不對準、軸承磨損。每台泵浦安裝 2-3 個加速度計(水平、垂直、軸向),在線監測系統每秒擷取資料。
- 風力發電機主軸承:單顆主軸承造價可達數百萬元,更換需要大型吊車(成本更高)。用振動 + AE (Acoustic Emission) 監測早期損傷,提前 3-6 個月預警。
- CNC 主軸:高速主軸(30,000-60,000 RPM)的軸承故障會直接影響加工精度。振動監測用於切削力監測、刀具磨損偵測、主軸健康管理。
- 感測器安裝不良:手持探針的高頻響應只到 1-2 kHz,磁鐵到 3-5 kHz,螺栓固定到 10-20 kHz。包絡分析需要高頻 → 安裝品質至關重要。
- 轉速不穩定:轉速變化會使頻譜峰值展寬 (smear),降低頻率解析度。變頻器驅動的馬達尤其嚴重。解法:轉速同步取樣 (order tracking)。
- 只看 overall RMS 不看頻譜:overall RMS 可以判斷「嚴重程度」但無法區分故障類型。1X 高可能是不平衡,2X 高可能是不對準——治療方法完全不同。
- 假陽性:看到 BPFO 不一定是軸承壞了:要確認是否有調變(包絡譜有 BPFO 倍頻 + 被轉速調變)。某些結構共振頻率碰巧接近 BPFO 也可能造成誤判。
- 極低速機械(<10 RPM)→ 加速度訊號太弱。改用位移感測器 (proximity probe) 或 AE。
- 非旋轉機械(如壓力容器、管路)→ 沒有明確的旋轉頻率。用 AE 或 guided wave。
- 瞬態事件(如齒輪斷齒)→ 穩態 FFT 無法捕捉。用時頻分析或統計指標(kurtosis, crest factor)。
- 替代方案:機器學習 (ML) 自動特徵擷取正在取代部分傳統規則式診斷。但 ML 模型的訓練仍需要 FFT 特徵作為輸入,兩者是互補而非取代。
📝 例題演練 (Worked Example)
泵浦轉速 1500RPM,齒輪齒數 Z=23。(a) 1X 頻率?(b) 嚙合頻率?(c) 量測 2 秒、fs=25.6kHz,FFT 用 4096 點 Hann 窗,Δf?(d) 能分辨 1X 的旁邊 ±fr 的調變邊帶嗎?
顯示解題過程
(a) fr = 1500/60 = 25Hz
(b) GMF = 23×25 = 575Hz
(c) Δf = 25600/4096 = 6.25Hz
(d) 邊帶在 575±25Hz = 550Hz 和 600Hz,間距 25Hz > Δf=6.25Hz → 可以分辨
✅ 快速檢核 (Quick Check)
Q1: SKF 6205 軸承(9 顆滾珠,d=7.94mm,D=38.5mm)在 1800 RPM 時的 BPFO 是多少?
顯示答案
fr=30Hz, BPFO = (9/2)×30×(1-7.94/38.5) ≈ 107.1 Hz。
Q2: 振動分析為什麼不能只看 overall RMS?
顯示答案
因為 RMS 只反映總能量,無法區分故障類型。例如不平衡(1X)和軸承缺陷(BPFO)的 RMS 可能相近,但頻譜完全不同。
互動:振動故障診斷練習
系統隨機產生一組振動頻譜,請根據頻譜特徵判斷故障類型。
2b.1 離散時間訊號 (Discrete-Time Signals)
從連續世界踏入離散世界 — 數位訊號處理的起點
一句話總結:離散時間訊號是只在整數時刻 $n$ 有定義的序列 $x[n]$,它們是 DSP 一切運算的基礎「原子」。
Learning Objectives
- 認識五大基本序列:單位脈衝 $\delta[n]$、單位步階 $u[n]$、指數序列、正弦序列、複指數序列
- 判別能量訊號 (Energy Signal) 與功率訊號 (Power Signal)
- 執行序列運算:時移、翻轉 (Folding)、振幅縮放
- 理解離散正弦波的週期性條件:$f_0/f_s$ 必須是有理數
- 對任意序列做偶/奇分解 (Even/Odd Decomposition)
為什麼要學:所有 DSP 演算法——濾波器、FFT、調變解調——最終操作的對象都是離散時間序列。如果你不清楚 $\delta[n]$ 的篩選性質 (sifting property)、不知道離散正弦波「不一定有週期」,後面學 DFT 和 Z 轉換時會處處卡關。這一章是你的「字母表」。
前情提要:上一節 (2a.2 CTFT) 我們處理的是連續時間訊號 $x(t)$ 和它的頻譜 $X(f)$。現在我們「取樣」——只保留整數時刻的值——進入離散時間的世界。連續時間的 Dirac delta $\delta(t)$ 會變成 Kronecker delta $\delta[n]$,積分會變成求和。
痛點:連續 vs 離散,到底差在哪?
從連續時間跳到離散時間,許多「直覺」會崩壞:
- $\cos(\omega_0 n)$ 不一定有週期! 連續版 $\cos(\omega_0 t)$ 永遠有週期 $2\pi/\omega_0$,但離散版只有在 $\omega_0/(2\pi)$ 是有理數時才有週期。
- 頻率有上限:離散訊號的頻率只在 $[0, \pi]$(或 $[0, f_s/2]$)有意義,$\omega = \pi$ 就是 Nyquist。
- 指數序列可以爆炸: $\alpha^n u[n]$ 當 $|\alpha|>1$ 時發散,能量無窮大——這在連續世界也有對應,但離散版更容易出現數值問題。
歷史脈絡:離散時間訊號的形式化始於 1940–50 年代。Claude Shannon (1916–2001) 的取樣定理 (1949) 建立了連續與離散之間的橋樑,而 Ragazzini 和 Zadeh (1952) 提出的 Z 轉換將離散系統分析推向成熟。真正讓 DSP 普及的是 1965 年 Cooley–Tukey FFT 演算法,使得離散序列的頻域分析從理論走向實務。
原理:五大基本序列
直覺先行:就像化學有元素週期表,DSP 的「元素」就是這五個基本序列。任何離散訊號都可以用 $\delta[n]$ 的線性組合表示(這就是卷積的根基)。
| 序列 | 定義 | 特性 |
|---|---|---|
| 單位脈衝 $\delta[n]$ | $\delta[n] = \begin{cases}1, & n=0\\0, & n\neq 0\end{cases}$ | 篩選性質:$x[n]\cdot\delta[n-k] = x[k]\cdot\delta[n-k]$ |
| 單位步階 $u[n]$ | $u[n] = \begin{cases}1, & n\geq 0\\0, & n < 0\end{cases}$ | $u[n] = \sum_{k=0}^{\infty}\delta[n-k]$ |
| 指數序列 | $x[n] = \alpha^n u[n]$ | $|\alpha|<1$: 衰減;$|\alpha|>1$: 成長 |
| 正弦序列 | $x[n] = A\cos(\omega_0 n + \phi)$ | 週期 $N$ 存在 $\iff \omega_0/(2\pi) \in \mathbb{Q}$ |
| 複指數序列 | $x[n] = e^{j\omega_0 n}$ | $e^{j(\omega_0+2\pi)n} = e^{j\omega_0 n}$($2\pi$ 週期性) |
重要關係
任意序列的 $\delta[n]$ 分解:
$$x[n] = \sum_{k=-\infty}^{\infty} x[k]\,\delta[n-k]$$這就是卷積 $x[n] * \delta[n] = x[n]$ 的原型,也是下一章 LTI 系統理論的起點。
能量訊號 (Energy Signal) vs 功率訊號 (Power Signal)
能量 (Energy):
$$E = \sum_{n=-\infty}^{\infty} |x[n]|^2$$平均功率 (Average Power):
$$P = \lim_{N\to\infty} \frac{1}{2N+1}\sum_{n=-N}^{N} |x[n]|^2$$| 類型 | 條件 | 範例 |
|---|---|---|
| 能量訊號 | $0 < E < \infty$,$P = 0$ | $\alpha^n u[n]$($|\alpha|<1$),$\delta[n]$ |
| 功率訊號 | $E = \infty$,$0 < P < \infty$ | $\cos(\omega_0 n)$,$u[n]$ |
| 兩者皆非 | $E = \infty$,$P = \infty$ | $2^n u[n]$(指數成長) |
展開:$\alpha^n u[n]$ 的能量計算
設 $x[n] = \alpha^n u[n]$,$|\alpha| < 1$:
$$E = \sum_{n=0}^{\infty} |\alpha^n|^2 = \sum_{n=0}^{\infty} |\alpha|^{2n} = \frac{1}{1-|\alpha|^2}$$因為 $|\alpha|^2 < 1$,幾何級數收斂。例如 $\alpha = 0.8$:$E = 1/(1-0.64) = 2.778$。$\;\blacksquare$
序列運算:時移、翻轉、縮放
時移 (Time Shift):$y[n] = x[n-n_0]$
- $n_0 > 0$:向右延遲 $n_0$ 個樣本
- $n_0 < 0$:向左提前 $|n_0|$ 個樣本
翻轉 (Folding/Time Reversal):$y[n] = x[-n]$,以 $n=0$ 為鏡像翻轉
振幅縮放 (Amplitude Scaling):$y[n] = c \cdot x[n]$
注意:離散時間沒有「時間壓縮 $x[2n]$」的簡單對應!$x[2n]$ 意味著降取樣 (Downsampling),會造成資訊遺失(aliasing 問題)。這與連續時間的 $x(2t)$ 截然不同。
離散正弦波的週期性
$x[n] = \cos(\omega_0 n)$ 有週期 $N$($x[n+N]=x[n]$)若且唯若:
即正規化頻率 $\omega_0/(2\pi)$ 必須是有理數。最小週期 $N = m/\gcd(m,N_0)$ 其中 $\omega_0 = 2\pi N_0/m$。
例:
- $\cos(0.3\pi n)$:$0.3\pi/(2\pi) = 0.15 = 3/20$ 是有理數 → 週期 $N=20$
- $\cos(n)$:$1/(2\pi) \approx 0.1592...$ 是無理數 → 非週期
- $\cos(\pi n) = (-1)^n$:$\pi/(2\pi) = 1/2$ → 週期 $N=2$
偶/奇分解 (Even/Odd Decomposition)
任何實數序列 $x[n]$ 都可唯一分解為:
性質:$x_e[-n] = x_e[n]$(偶對稱),$x_o[-n] = -x_o[n]$(奇對稱),且 $x_o[0] = 0$。
怎麼用:數值範例
步驟範例:判別 $x[n] = (0.9)^n u[n]$ 是能量訊號還是功率訊號
- 計算能量:$E = \sum_{n=0}^{\infty} (0.9)^{2n} = \sum_{n=0}^{\infty} (0.81)^n = \frac{1}{1-0.81} = 5.263$
- $E < \infty$,因此是能量訊號
- 平均功率 $P = 0$(能量訊號的功率必為零)
步驟範例:確認 $\cos(0.4\pi n)$ 的週期
- 正規化頻率 $f_0 = 0.4\pi/(2\pi) = 0.2 = 1/5$
- $1/5$ 是有理數,所以有週期
- 最小週期 $N = 5$($\cos(0.4\pi(n+5)) = \cos(0.4\pi n + 2\pi) = \cos(0.4\pi n)$)
應用場景
- 音訊編碼 (Audio Coding):CD 取樣率 $f_s=44.1$ kHz,每秒產生 44100 個離散樣本。了解序列的能量特性決定了量化位元配置策略。
- 雷達脈衝壓縮 (Pulse Compression):發射端產生複指數 chirp 序列,接收端做匹配濾波(本質是卷積)來偵測目標。
- 通訊同步 (Synchronization):利用 $\delta[n]$ 的篩選性質設計導引序列 (Pilot Sequence),用互相關來估計時序偏移。
陷阱與限制
- 離散時間 $\neq$ 數位:$x[n]$ 的振幅仍是連續值(實數)。真正的數位訊號還需要量化 (Quantization),引入量化雜訊。
- $x[2n]$ 不是「加速播放」:在離散時間裡,$x[2n]$ 是降取樣,會破壞頻譜(alias)。不要類比連續時間的 $x(2t)$。
- $\cos(n)$ 沒有週期:很多初學者以為所有正弦波都有週期。只有 $\omega_0/(2\pi)$ 為有理數時才是週期序列。
Quick Check
Q1: $x[n] = 5\cos(0.6\pi n)$ 是否為週期序列?若是,最小週期為何?
Show answer
$\omega_0/(2\pi) = 0.6\pi/(2\pi) = 0.3 = 3/10$,是有理數,故為週期序列。需要 $0.6\pi \cdot N = 2\pi m$,即 $N = 10m/3$。最小正整數 $N$:取 $m=3$,$N=10$。最小週期為 $\mathbf{10}$。
Q2: 判別 $x[n] = (-1)^n$ 是能量訊號還是功率訊號?
Show answer
$|x[n]|^2 = 1$ for all $n$,所以 $E = \sum_{-\infty}^{\infty} 1 = \infty$。$P = \lim_{N\to\infty}\frac{1}{2N+1}\sum_{-N}^{N} 1 = 1$。因為 $0 < P < \infty$,是功率訊號。(注意 $(-1)^n = \cos(\pi n)$,是正弦序列。)
互動:離散時間基本序列
選擇訊號類型,調整參數,觀察離散時間序列的 stem plot。
References: [1] Oppenheim & Schafer, Discrete-Time Signal Processing, 3rd ed., Ch.2. [2] Proakis & Manolakis, Digital Signal Processing, 4th ed., Ch.2. [3] Haykin & Van Veen, Signals and Systems, Ch.6.
互動:離散時間訊號 stem 圖
選擇一種基本離散序列。stem 圖(垂直線+圓點)是離散訊號的標準視覺化方式。
2b.2 LTI 系統與卷積 (LTI Systems & Convolution)
一個脈衝響應就能完全描述一個系統 — DSP 最優美的結果
一句話總結:如果系統是線性且時不變 (LTI) 的,只要知道它對 $\delta[n]$ 的響應 $h[n]$(脈衝響應, Impulse Response),就能用卷積 $y[n] = x[n] * h[n]$ 算出對任意輸入的輸出。
Learning Objectives
- 定義線性 (Linearity) 與時不變 (Time-Invariance) 並能判別系統是否滿足
- 推導卷積和 (Convolution Sum) $y[n] = \sum_k x[k]\,h[n-k]$
- 理解脈衝響應 $h[n]$ 如何完全刻畫 LTI 系統
- 應用卷積的交換律、結合律、分配律
- 建立因果性 (Causality) 與 BIBO 穩定性 (Stability) 的判據
為什麼要學:卷積是 DSP 最核心的運算。每次你用 FIR 濾波器、做迴響效果 (reverb)、算互相關偵測雷達目標時,背後都是卷積。理解 LTI 理論讓你知道:為什麼只測一次脈衝響應就夠了?為什麼頻率響應就是 $h[n]$ 的 DTFT?為什麼串接兩個濾波器等於脈衝響應的卷積?
前情提要:上一節我們學會了把任意訊號表示為 $x[n] = \sum_k x[k]\,\delta[n-k]$——這是用「延遲脈衝」的加權和來表達訊號。現在的關鍵問題是:如果我知道系統對 $\delta[n]$ 的響應,能不能算出系統對 $x[n]$ 的響應?答案是:可以,只要系統是 LTI 的。
痛點:為什麼不能每個輸入都個別測試?
想像你設計了一個濾波器,想知道它對所有可能輸入的行為:
- 輸入空間是無限維的——你不可能窮舉所有 $x[n]$
- 如果系統是非線性的(例如 $y[n] = x[n]^2$),知道對 $\delta[n]$ 的響應完全不夠
- LTI 假設就是那把「萬能鑰匙」:一次測試 $\to$ 完全描述
歷史脈絡:卷積的概念可追溯到 Euler 和 Laplace 在 18 世紀的積分運算。1930 年代,Norbert Wiener 在隨機過程理論中大量使用卷積。離散卷積在 1960 年代隨著數位電腦的興起成為信號處理的標準工具。1965 年 FFT 的發明使得「快速卷積」(Fast Convolution) 成為可能——用 FFT 做 $O(N\log N)$ 的卷積取代了 $O(N^2)$ 的直接計算。
原理:什麼是 LTI 系統?
直覺先行:想像一個黑盒子 $\mathcal{T}\{\cdot\}$,吃進序列、吐出序列。
線性 (Linearity) = 齊次性 + 可加性 (Superposition):
$$\mathcal{T}\{a\,x_1[n] + b\,x_2[n]\} = a\,\mathcal{T}\{x_1[n]\} + b\,\mathcal{T}\{x_2[n]\}$$時不變 (Time-Invariance):
$$\text{若 } \mathcal{T}\{x[n]\} = y[n],\text{則 } \mathcal{T}\{x[n-n_0]\} = y[n-n_0]$$系統對延遲輸入的響應 = 將輸出延遲相同量。
如何判別:常見例題
| 系統 | 線性? | 時不變? | LTI? |
|---|---|---|---|
| $y[n] = 3x[n] + 2x[n-1]$ | 是 | 是 | 是 |
| $y[n] = x[n]^2$ | 否 | 是 | 否 |
| $y[n] = n \cdot x[n]$ | 是 | 否 | 否 |
| $y[n] = x[n] + 1$ | 否 | 是 | 否 |
| $y[n] = x[-n]$ | 是 | 否 | 否 |
卷積和 (Convolution Sum) 的推導
直覺:輸入 $x[n]$ 是延遲脈衝的加權和。LTI 系統的線性 + 時不變 = 每個脈衝的響應也加權延遲疊加。
展開卷積和的完整推導
Step 1:任意訊號 $x[n]$ 分解為延遲脈衝的加權和:
$$x[n] = \sum_{k=-\infty}^{\infty} x[k]\,\delta[n-k]$$Step 2:定義脈衝響應 $h[n] = \mathcal{T}\{\delta[n]\}$。由時不變性:
$$\mathcal{T}\{\delta[n-k]\} = h[n-k]$$Step 3:由線性(疊加原理):
$$y[n] = \mathcal{T}\{x[n]\} = \mathcal{T}\left\{\sum_{k} x[k]\,\delta[n-k]\right\} = \sum_{k} x[k]\,\mathcal{T}\{\delta[n-k]\} = \sum_{k} x[k]\,h[n-k]$$結論:
$$\boxed{y[n] = \sum_{k=-\infty}^{\infty} x[k]\,h[n-k] \;\equiv\; x[n] * h[n]}$$$\;\blacksquare$
卷積和 (Convolution Sum)
$$y[n] = x[n] * h[n] = \sum_{k=-\infty}^{\infty} x[k]\,h[n-k]$$「翻轉、滑動、相乘、求和」— 這四步驟是手算卷積的口訣。
卷積的性質
| 性質 | 公式 | 工程意義 |
|---|---|---|
| 交換律 (Commutative) | $x * h = h * x$ | 輸入和脈衝響應角色可互換 |
| 結合律 (Associative) | $(x * h_1) * h_2 = x * (h_1 * h_2)$ | 串接濾波器 = 脈衝響應的卷積 |
| 分配律 (Distributive) | $x * (h_1 + h_2) = x*h_1 + x*h_2$ | 並聯濾波器 = 脈衝響應相加 |
| 恆等元素 | $x * \delta = x$ | $\delta[n]$ 是卷積的「1」 |
因果性 (Causality) 與 BIBO 穩定性 (Stability)
因果系統 (Causal System):輸出只取決於現在和過去的輸入。
$$\text{LTI 因果} \iff h[n] = 0 \text{ for } n < 0$$BIBO 穩定 (Bounded-Input Bounded-Output):有界輸入 → 有界輸出。
$$\text{LTI BIBO 穩定} \iff \sum_{n=-\infty}^{\infty} |h[n]| < \infty$$脈衝響應「絕對可求和」(Absolutely Summable)。
展開 BIBO 穩定性的證明
充分性 ($\Leftarrow$):若 $\sum|h[n]| < \infty$ 且 $|x[n]| \leq B_x$,則:
$$|y[n]| = \left|\sum_k x[k]\,h[n-k]\right| \leq \sum_k |x[k]|\,|h[n-k]| \leq B_x \sum_k |h[k]| < \infty$$必要性 ($\Rightarrow$):若 $\sum|h[n]| = \infty$,構造有界輸入 $x[n] = \text{sgn}(h[-n])$,則 $|x[n]| \leq 1$ 但 $y[0] = \sum_k |h[k]| = \infty$,輸出無界。$\;\blacksquare$
怎麼用:手算卷積範例
計算 $x[n] = \{1, 2, 3\}$($n=0,1,2$)和 $h[n] = \{1, 1, 1\}/3$(3 點移動平均)的卷積
- 翻轉 $h[k]$:$h[-k] = \{1, 1, 1\}/3$(本身對稱,翻轉不變)
- 滑動 $h[n-k]$ 並計算各 $n$ 的乘積和:
結果:$y[n] = \{1/3, 1, 2, 5/3, 1\}$,長度 = $3 + 3 - 1 = 5$。
應用場景
- FIR 數位濾波器:每一個 FIR 濾波器本質上就是「將輸入與濾波器係數做卷積」。濾波器係數 = 脈衝響應 $h[n]$。
- 音訊迴響 (Reverb):錄製一個房間對手掌拍擊(近似 $\delta[n]$)的響應 $h[n]$,然後與任意乾聲 (dry signal) 卷積,就能模擬在那個房間演奏的效果。
- 通訊通道模擬 (Channel Model):無線通道可以用多路徑脈衝響應 $h[n]$ 建模,接收訊號 = 發射訊號 $*$ 通道脈衝響應 + 雜訊。
陷阱與限制
- 卷積只適用於 LTI 系統:如果系統是非線性的(例如壓縮器 compressor)或時變的(例如 LFO 調變),卷積不適用。
- 直接卷積的計算量是 $O(NM)$:當序列很長時,務必用 FFT 快速卷積($O(N\log N)$)。
- 線性卷積 vs 循環卷積 (Circular Convolution):DFT 做的是循環卷積!要用 DFT 做線性卷積必須 zero-pad。這是初學者最常犯的錯。
Quick Check
Q1: 系統 $y[n] = x[n] \cdot x[n-1]$ 是否為 LTI?為什麼?
Show answer
不是。它是時不變的(延遲輸入 → 延遲輸出),但非線性。驗證:令 $x_1[n]=1, x_2[n]=1$,$\mathcal{T}\{x_1+x_2\} = 2\cdot 2 = 4$,但 $\mathcal{T}\{x_1\}+\mathcal{T}\{x_2\} = 1+1 = 2 \neq 4$,違反疊加原理。
Q2: 若 $h[n] = (0.5)^n u[n]$,此系統是否 BIBO 穩定?
Show answer
$\sum_{n=0}^{\infty}|h[n]| = \sum_{n=0}^{\infty}(0.5)^n = \frac{1}{1-0.5} = 2 < \infty$。絕對可求和,因此BIBO 穩定。
互動:卷積滑動動畫
選擇輸入 $x[n]$ 和脈衝響應 $h[n]$,拖動滑桿觀察 $h[n-k]$ 滑過 $x[k]$ 的過程。乘積面積(綠色)就是 $y[n]$ 在目前 $n$ 的值。
References: [1] Oppenheim & Schafer, Discrete-Time Signal Processing, 3rd ed., Ch.2. [2] Proakis & Manolakis, Digital Signal Processing, 4th ed., Ch.2. [3] Haykin & Van Veen, Signals and Systems, Ch.2.
2b.3 差分方程與系統函數 (Difference Equations & System Function $H(z)$)
從時域遞迴到 Z 域代數 — FIR 與 IIR 的統一視角
一句話總結:線性常係數差分方程 (LCCDE) 是描述 LTI 系統的時域語言;做 Z 轉換後變成代數式 $H(z) = B(z)/A(z)$,系統的穩定性、頻率響應全寫在極零點 (Poles & Zeros) 裡。
Learning Objectives
- 寫出一般 LCCDE 並理解 $a_k$(回饋係數)與 $b_k$(前饋係數)的角色
- 對 LCCDE 做 Z 轉換(M2B.4 Z 轉換),推導系統函數 $H(z) = B(z)/A(z)$
- 區分 FIR(所有 $a_k=0$、只有零點)與 IIR(有極點、需要穩定性分析)
- 在極零點圖上判讀穩定性(因果系統:所有極點在單位圓內)
- 從 $H(z)$ 計算頻率響應 $H(e^{j\omega})$
為什麼要學:差分方程是 DSP 硬體和軟體實現的「設計圖」——每個 $b_k$ 是一次乘加運算,每個 $a_k$ 是一次回饋迴路。系統函數 $H(z)$ 讓你一眼看出系統是穩定的(極點在單位圓內)還是即將爆炸(極點跑到圓外)。濾波器設計軟體(MATLAB fdatool、Python scipy.signal)全都在操作 $b_k, a_k$ 係數。
前情提要:上一節建立了 LTI 系統的卷積關係 $y[n] = x[n] * h[n]$。但卷積是無窮求和——實際系統怎麼用有限記憶體實現它?答案是:把 $h[n]$ 的行為用差分方程描述,用「回饋」取代無窮長的脈衝響應。Z 轉換則是把這個遞迴關係變成可以用代數操作的多項式比。
痛點:卷積太慢、脈衝響應太長
- 一階 IIR 低通 $h[n] = a^n u[n]$ 的脈衝響應是無窮長的,直接卷積需要無限計算
- 但差分方程 $y[n] = x[n] + a\,y[n-1]$ 只需要1 次乘法 + 1 次加法就能遞迴計算
- 問題是:回饋引入了穩定性風險——如果 $|a| \geq 1$,輸出會爆炸
- 我們需要一個工具來快速判斷穩定性 → $H(z)$ 的極零點分析
歷史脈絡:差分方程的歷史可追溯到 de Moivre (1718) 解線性遞迴數列。Z 轉換由 Witold Hurewicz 在 1947 年引入控制理論,Ragazzini 和 Zadeh (1952) 則將其系統化應用於取樣資料系統。1960 年代數位濾波器理論成熟後,$H(z)$ 的極零點分析成為 DSP 工程師的日常工具。E. Christian 和 E. Eisenmann 首先將電路中的類比濾波器轉換為數位差分方程實現。
原理:一般線性常係數差分方程 (LCCDE)
一般形式
$$y[n] + \sum_{k=1}^{N} a_k\,y[n-k] = \sum_{k=0}^{M} b_k\,x[n-k]$$$b_k$: 前饋係數 (Feedforward) | $a_k$: 回饋係數 (Feedback) | 階數 $= \max(N, M)$
直覺:左邊有 $y[n-k]$(過去的輸出)→ 這是「回饋」→ 產生遞迴結構。右邊只有 $x[n-k]$(過去的輸入)→ 這是「前饋」→ 非遞迴結構。
Z 轉換推導 $H(z)$
利用 Z 轉換的時移性質:$\mathcal{Z}\{x[n-k]\} = z^{-k}X(z)$。
展開 $H(z)$ 推導
對 LCCDE 兩邊取 Z 轉換:
$$Y(z) + \sum_{k=1}^{N} a_k\,z^{-k}\,Y(z) = \sum_{k=0}^{M} b_k\,z^{-k}\,X(z)$$提出 $Y(z)$ 和 $X(z)$:
$$Y(z)\left(1 + \sum_{k=1}^{N} a_k\,z^{-k}\right) = X(z)\left(\sum_{k=0}^{M} b_k\,z^{-k}\right)$$定義系統函數:
$$H(z) = \frac{Y(z)}{X(z)} = \frac{\sum_{k=0}^{M} b_k\,z^{-k}}{1 + \sum_{k=1}^{N} a_k\,z^{-k}} = \frac{B(z)}{A(z)}$$$\;\blacksquare$
系統函數 (System Function / Transfer Function)
$$H(z) = \frac{B(z)}{A(z)} = \frac{b_0 + b_1 z^{-1} + b_2 z^{-2} + \cdots + b_M z^{-M}}{1 + a_1 z^{-1} + a_2 z^{-2} + \cdots + a_N z^{-N}}$$將分子/分母因式分解:
$$H(z) = b_0 \cdot \frac{\prod_{i=1}^{M}(1 - q_i z^{-1})}{\prod_{i=1}^{N}(1 - p_i z^{-1})}$$$q_i$:零點 (Zeros),$H(q_i)=0$ | $p_i$:極點 (Poles),$H(p_i) \to \infty$
FIR vs IIR:一張表看懂
| 特性 | FIR (Finite Impulse Response) | IIR (Infinite Impulse Response) |
|---|---|---|
| 差分方程 | $y[n] = \sum_{k=0}^{M} b_k\,x[n-k]$ | $y[n] + \sum a_k\,y[n-k] = \sum b_k\,x[n-k]$ |
| $H(z)$ | 多項式(只有 $B(z)$) | 有理函數 $B(z)/A(z)$ |
| 極點 | 只有 $z=0$(永遠穩定) | 在 $z=p_i$ 處,需 $|p_i|<1$ |
| 穩定性 | 無條件穩定 | 取決於極點位置 |
| 脈衝響應長度 | 有限($M+1$ 點) | 理論上無窮長 |
| 計算量 | 需較多係數達到陡峭斜率 | 較少係數即可實現窄帶濾波 |
穩定性判據:極點與單位圓
因果 LTI 系統 BIBO 穩定 $\iff$ $H(z)$ 的所有極點滿足 $|p_i| < 1$
即所有極點嚴格位於 Z 平面的單位圓內部。
直覺:極點 $p_i$ 對應的自然模態 (Natural Mode) 是 $p_i^n$。若 $|p_i|<1$,則 $p_i^n \to 0$(衰減);若 $|p_i|>1$,則 $p_i^n \to \infty$(爆炸);若 $|p_i|=1$,振盪不衰減(臨界穩定)。
頻率響應:$H(z)$ 在單位圓上的值
$|H(e^{j\omega})|$: 幅度響應 (Magnitude Response) | $\angle H(e^{j\omega})$: 相位響應 (Phase Response)
極零點與頻率響應的幾何關係:在頻率 $\omega$ 處,幅度 $|H(e^{j\omega})|$ 正比於「$e^{j\omega}$ 到各零點距離的乘積 / 到各極點距離的乘積」。零點附近幅度小(凹谷),極點附近幅度大(峰值)。
怎麼用:一階 IIR 完整範例
問題:分析系統 $y[n] = x[n] + 0.8\,y[n-1]$。
- 識別係數:$b_0 = 1$,$a_1 = -0.8$(注意差分方程中 $y[n] + a_1 y[n-1]$ 的符號慣例)
- 系統函數:$$H(z) = \frac{1}{1 - 0.8\,z^{-1}} = \frac{z}{z - 0.8}$$
- 極零點:零點在 $z=0$,極點在 $z=0.8$(在單位圓內 → 穩定)
- 脈衝響應:$$h[n] = (0.8)^n\,u[n]$$(指數衰減,無窮長 → IIR)
- 頻率響應:$$|H(e^{j\omega})| = \frac{1}{|1 - 0.8e^{-j\omega}|}$$ 在 $\omega=0$ 時 $|H|=1/0.2=5$(低頻增益大),在 $\omega=\pi$ 時 $|H|=1/1.8\approx 0.56$(高頻衰減)→ 低通濾波器
應用場景
- 音訊等化器 (Equalizer):由數個二階 IIR 濾波器(biquad)串接而成,每個 biquad 有 2 個極點 + 2 個零點,對應差分方程中的 $b_0, b_1, b_2, a_1, a_2$。
- 控制系統 PID:數位 PID 控制器可以表示為差分方程。Z 轉換分析讓你在極零點圖上直接判斷閉迴路穩定性。
- 通訊等化器 (Channel Equalizer):接收端設計一個 IIR 等化器 $H_{eq}(z) \approx 1/H_{ch}(z)$,消除通道的頻率失真。必須確保 $H_{ch}(z)$ 的零點不在單位圓外(否則等化器的極點跑到圓外 → 不穩定)。
陷阱與限制
- 量化效應 (Quantization Effects):有限精度 (Fixed-Point) 實現 IIR 時,係數量化可能使極點移動到單位圓外,導致原本穩定的濾波器變成不穩定。低階 IIR 比高階安全。
- 極點在單位圓上 $\neq$ 穩定:$|p_i|=1$ 是邊界不穩定(oscillator)。BIBO 穩定要求嚴格小於 1。
- 非最小相位零點 (Non-Minimum Phase Zeros):若零點在單位圓外,其反因果等化器不穩定。需要特殊處理(例如分相分解)。
Quick Check
Q1: FIR 濾波器為什麼「無條件穩定」?從 $H(z)$ 的觀點解釋。
Show answer
FIR 的 $H(z)$ 分母為 1(沒有回饋 $a_k$),所以 $H(z)=B(z)$ 是多項式。唯一的極點在 $z=0$($N$ 重極點),$|0|<1$ 永遠在單位圓內。因此無論 $b_k$ 取什麼值,系統都 BIBO 穩定。
Q2: 若 $H(z) = \frac{1-z^{-1}}{1-0.95z^{-1}}$,零點和極點分別在哪?系統是低通還是高通?
Show answer
零點:$1-z^{-1}=0 \Rightarrow z=1$(在單位圓上,$\omega=0$ 處)。極點:$1-0.95z^{-1}=0 \Rightarrow z=0.95$(在單位圓內 → 穩定)。在 $\omega=0$:$|H(e^{j0})|=|1-1|/|1-0.95|=0$(零增益)。在 $\omega=\pi$:$|H(e^{j\pi})|=|1+1|/|1+0.95|=2/1.95\approx 1.03$。DC 處增益為零 → 這是高通濾波器。
互動:極零點圖、頻率響應與脈衝響應
調整 $b_k$ 和 $a_k$ 係數,即時觀察極零點在 Z 平面上的位置、頻率響應 $|H(e^{j\omega})|$ 以及脈衝響應 $h[n]$。
極零點圖
頻率響應
脈衝響應
References: [1] Oppenheim & Schafer, Discrete-Time Signal Processing, 3rd ed., Ch.3, 5, 6. [2] Mitra, Digital Signal Processing: A Computer-Based Approach, 4th ed., Ch.4. [3] Proakis & Manolakis, Digital Signal Processing, 4th ed., Ch.3.
4B.1 IIR 濾波器設計 (IIR Filter Design)
從類比原型到數位實現——四大經典 IIR 設計的完整比較
Learning Objectives
- 理解 IIR 濾波器相對於 FIR(M4A FIR 設計)的優勢與代價
- 比較 Butterworth / Chebyshev I / Chebyshev II / Elliptic 四種設計的頻率響應特性
- 掌握雙線性轉換 (Bilinear Transform) 的推導與頻率預扭曲 (Pre-warping)
- 完成從規格到 $H(z)$ 的完整設計流程
一句話總結
IIR 濾波器用遞迴結構(feedback)以極低的階數逼近理想頻率響應,四種經典設計就是在「平坦度」與「滾降速度」之間的不同取捨。
為什麼要學?
在類比電路時代,所有濾波器天生都是 IIR——電容、電感、電阻構成的 RLC 網路就是一個遞迴系統。Stephen Butterworth (1930) 在英國的一篇不起眼的無線電工程論文中提出了「最大平坦」準則,奠定了 Butterworth 濾波器的基礎。
Pafnuty Chebyshev(19 世紀俄國數學家)的等波紋逼近理論在半個世紀後被應用於濾波器設計,產生了 Chebyshev Type I 和 Type II 濾波器。Wilhelm Cauer (1931) 則用橢圓函數理論推導出最高效率的橢圓濾波器 (Elliptic Filter)。
數位時代來臨後,這些類比原型透過雙線性轉換 (Bilinear Transform) 被「搬」到 $z$ 域——讓我們能繼承數十年的類比設計智慧,同時享受數位實現的精確與靈活。
前情提要
在 FIR 設計(Module 4A)中,我們學到 FIR 的優點:線性相位、絕對穩定、設計直覺。但 FIR 有一個根本限制——
- 要達到陡峭的過渡帶,FIR 需要非常高的階數(數百甚至數千階)
- 高階數 = 高計算量 = 高延遲(群延遲 $\approx (N-1)/2$ 個樣本)
- 在即時系統(音訊、控制)中,延遲不可接受
IIR 濾波器透過 feedback(遞迴)來「記住」過去的輸出,用極少的係數達到相同甚至更好的頻率選擇性。代價是:非線性相位、可能不穩定、設計需要更多數學。
痛點:FIR 太「貴」了
假設你需要一個低通濾波器:通帶到 1 kHz,阻帶從 1.2 kHz 開始,阻帶衰減 60 dB,取樣率 8 kHz。
- FIR 方案:用 Kaiser 窗法估計,需要 $N \approx \frac{A_s - 7.95}{2.285 \cdot \Delta\omega} \approx \frac{60 - 7.95}{2.285 \times 0.05\pi} \approx 145$ 階。每個輸出樣本需要 145 次乘加。
- IIR 方案:一個 4 階 Elliptic 濾波器就能達到相同規格。每個輸出樣本只需要 8 次乘加——計算量降低 18 倍。
在嵌入式系統、即時音訊處理、高速通訊中,這個差距是決定性的。
由來:從 $s$ 域到 $z$ 域
IIR 數位濾波器的設計思路不是直接設計 $H(z)$,而是:
- 先利用成熟的類比濾波器設計理論,得到類比原型 $H_a(s)$
- 再用某種 $s \to z$ 的映射,把類比濾波器「翻譯」成數位濾波器 $H(z)$
為什麼不直接設計 $H(z)$?因為類比濾波器有一百年的設計積累——公式表、圖表、閉合解——直接搬過來比從頭推導划算得多。
原理:四大經典 IIR 濾波器
直覺:四種設計的差別在於如何分配「逼近誤差」——你可以讓通帶盡量平坦(Butterworth)、讓通帶的誤差均勻分布來換取更陡的過渡帶(Chebyshev I)、把誤差放到阻帶(Chebyshev II)、或者兩邊都允許等波紋來獲得最陡的過渡帶(Elliptic)。
1. Butterworth(最大平坦)
通帶內盡可能平坦(在 $\Omega=0$ 處前 $2N-1$ 階導數為零),但過渡帶滾降最慢。
2. Chebyshev Type I(通帶等波紋)
$T_N$ 為 $N$ 階 Chebyshev 多項式,$\varepsilon$ 控制通帶波紋大小。通帶有波紋但滾降比 Butterworth 陡。
3. Chebyshev Type II(阻帶等波紋)
通帶平坦,波紋出現在阻帶。阻帶有零點,提供更好的阻帶衰減。
4. Elliptic / Cauer(雙邊等波紋)
$R_N$ 為有理 Chebyshev 函數(Jacobi 橢圓函數的比值)。通帶和阻帶都有等波紋,但在相同階數下過渡帶最陡——這是理論上的最優解。
四種設計的比較
| 特性 | Butterworth | Chebyshev I | Chebyshev II | Elliptic |
|---|---|---|---|---|
| 通帶 | 最大平坦 | 等波紋 | 平坦 | 等波紋 |
| 阻帶 | 單調衰減 | 單調衰減 | 等波紋 | 等波紋 |
| 過渡帶陡度 | 最緩(需高階) | 中等 | 中等 | 最陡(最少階數) |
| 相位線性度 | 最好 | 較差 | 較差 | 最差 |
| 設計參數 | $N, \Omega_c$ | $N, \Omega_c, \varepsilon$ | $N, \Omega_s, \varepsilon$ | $N, \Omega_c, \varepsilon_p, \varepsilon_s$ |
| 典型用途 | 抗混疊、通用 | 頻率選擇 | 需平坦通帶 | 嚴格規格 |
展開:Butterworth 極點位置推導
Butterworth 濾波器的極點位於 $s$ 平面的左半圓上。從 $|H_a(j\Omega)|^2 = 1/(1+(\Omega/\Omega_c)^{2N})$ 出發:
令 $s = j\Omega$,則 $H_a(s)H_a(-s) = 1/(1+(-s^2/\Omega_c^2)^N)$。
極點出現在 $(-s^2/\Omega_c^2)^N = -1 = e^{j(2k+1)\pi}$ 的位置,即:
$$s_k = \Omega_c \, e^{j\pi(2k+N+1)/(2N)}, \quad k = 0, 1, \ldots, 2N-1$$共 $2N$ 個極點均勻分布在半徑為 $\Omega_c$ 的圓上。取左半平面的 $N$ 個極點構成穩定的 $H_a(s)$:
$$H_a(s) = \frac{\Omega_c^N}{\prod_{k=0}^{N-1}(s - s_k)}, \quad \text{Re}(s_k) < 0$$例如 $N=2$,極點在 $\pm 135°$ 和 $\pm 225°$(取左半平面的 $135°$ 和 $225°$):
$$s_{0,1} = \Omega_c\,e^{j3\pi/4},\; \Omega_c\,e^{j5\pi/4} = \Omega_c\left(-\frac{1}{\sqrt{2}} \pm j\frac{1}{\sqrt{2}}\right)$$ $$H_a(s) = \frac{\Omega_c^2}{s^2 + \sqrt{2}\,\Omega_c\,s + \Omega_c^2} \quad\blacksquare$$雙線性轉換 (Bilinear Transform)
直覺:我們需要把 $s$ 平面映射到 $z$ 平面,而且要確保類比的穩定性(左半平面)映射到數位的穩定性(單位圓內)。雙線性轉換就是這樣一個完美映射。
雙線性轉換公式
$$s = \frac{2}{T}\,\frac{z-1}{z+1} \quad \Longleftrightarrow \quad z = \frac{1 + (T/2)s}{1 - (T/2)s}$$頻率對應關係(Frequency Warping):
令 $s = j\Omega$,$z = e^{j\omega}$,代入得:
類比頻率 $\Omega \in [0, \infty)$ 被壓縮到數位頻率 $\omega \in [0, \pi)$。低頻近似線性($\Omega \approx \omega/T$),高頻嚴重扭曲。
頻率預扭曲 (Pre-warping):設計時先把期望的數位截止頻率 $\omega_c$ 反算為類比頻率 $\Omega_c = (2/T)\tan(\omega_c/2)$,用 $\Omega_c$ 設計類比原型,轉換後數位濾波器的截止點才會精確落在 $\omega_c$。
展開:雙線性轉換的推導(梯形積分法)
類比系統 $H_a(s) = Y(s)/X(s)$ 的時域是微分方程。最簡單的數位化方法是用數值積分近似微分。
梯形法 (Trapezoidal Rule) 近似積分:
$$y[n] = y[n-1] + \frac{T}{2}\big(x[n] + x[n-1]\big)$$取 $z$ 轉換:$Y(z) = z^{-1}Y(z) + \frac{T}{2}(1+z^{-1})X(z)$
$$\frac{Y(z)}{X(z)} = \frac{T/2 \cdot (1+z^{-1})}{1 - z^{-1}} = \frac{T}{2}\,\frac{z+1}{z-1}$$這就是 $1/s$ 的數位近似,因此 $s$ 對應 $\frac{2}{T}\frac{z-1}{z+1}$。
穩定性保持證明:令 $z = re^{j\theta}$,代入 $s = \frac{2}{T}\frac{re^{j\theta}-1}{re^{j\theta}+1}$,可以驗證:
- $|z| < 1$(單位圓內)$\Rightarrow$ $\text{Re}(s) < 0$(左半平面)
- $|z| = 1$(單位圓上)$\Rightarrow$ $\text{Re}(s) = 0$(虛軸)
- $|z| > 1$(單位圓外)$\Rightarrow$ $\text{Re}(s) > 0$(右半平面)
因此穩定的類比系統經雙線性轉換後保證穩定。$\;\blacksquare$
怎麼用:完整設計範例
目標:設計 4 階 Butterworth 低通濾波器,$f_c = 1\,\text{kHz}$,$f_s = 8\,\text{kHz}$。
Step 1:計算數位截止頻率
$\omega_c = 2\pi f_c / f_s = 2\pi \times 1000 / 8000 = \pi/4 \;\text{rad}$
Step 2:預扭曲到類比頻率
取 $T = 1$(簡化),$\Omega_c = \frac{2}{T}\tan\!\left(\frac{\omega_c}{2}\right) = 2\tan\!\left(\frac{\pi}{8}\right) \approx 2 \times 0.4142 = 0.8284$
Step 3:設計類比 Butterworth 原型
4 階 Butterworth 極點在 $|\Omega_c|$ 圓上,角度 $\theta_k = \pi(2k+5)/8$,$k=0,1,2,3$:
$s_{0,3} = 0.8284\,e^{j5\pi/8},\; 0.8284\,e^{j7\pi/8}$ 及其共軛
分成兩個二階段:
$H_a(s) = \frac{\Omega_c^2}{s^2 + 2\cos(\pi/8)\,\Omega_c\,s + \Omega_c^2} \cdot \frac{\Omega_c^2}{s^2 + 2\cos(3\pi/8)\,\Omega_c\,s + \Omega_c^2}$
Step 4:雙線性轉換每一段
代入 $s = 2(z-1)/(z+1)$,化簡後得到兩個數位二階段(biquad)$H_1(z)$ 和 $H_2(z)$。
Step 5:級聯得到最終濾波器
$H(z) = H_1(z) \cdot H_2(z)$,以 SOS(Second-Order Sections)形式實現。
應用場景
| 應用 | 推薦類型 | 理由 |
|---|---|---|
| 抗混疊濾波器 (Anti-aliasing) | Butterworth | 平坦通帶避免訊號失真 |
| 音訊等化器 (Audio EQ) | Butterworth / Chebyshev II | 通帶平坦度很重要 |
| 通訊頻道選擇 | Elliptic | 過渡帶越陡越好,相位失真可用等化器補償 |
| 生醫訊號(ECG 濾波) | Butterworth | 不能有通帶波紋,且需要較好的相位特性 |
| 雷達/聲納接收機 | Chebyshev I / Elliptic | 嚴格的頻率選擇性需求 |
陷阱與限制
1. 非線性相位:IIR 濾波器的相位響應不是線性的,這意味著不同頻率成分經過濾波器後會有不同的延遲。在需要波形保真的應用(如 ECG、地震波分析)中,這可能導致波形失真。解法:使用零相位濾波(forward-backward filtering,即 MATLAB 的 filtfilt),但這只能離線使用。
2. 穩定性風險:IIR 的極點必須在單位圓內。高階直接實現 (Direct Form) 中,係數量化可能把極點推到圓外,導致不穩定。解法:用級聯二階段 (SOS/Cascade) 實現。
3. 高頻扭曲:雙線性轉換在高頻有嚴重的頻率壓縮效應。接近 Nyquist 頻率的規格(如阻帶邊緣在 $0.45\pi$ 以上)會因扭曲而失準。務必使用預扭曲。
經驗法則:如果你的應用不需要線性相位,而且過渡帶很窄,先試 IIR(通常 Butterworth 就夠)。如果需要線性相位,只能用 FIR。
Quick Check
Q1:在相同的濾波器階數 $N$ 下,哪種設計的過渡帶最陡?為什麼?
Answer
Elliptic(橢圓)濾波器。因為它允許通帶和阻帶都有等波紋,把逼近誤差「均勻分配」到兩個頻帶,根據 Chebyshev 逼近理論,這是在給定階數下使最大偏差最小化的最優策略。Butterworth 把所有逼近精度集中在 $\Omega=0$ 附近(最大平坦),所以遠離 $\Omega_c$ 處逼近效果差,需要更高階數才能達到同樣的阻帶衰減。
Q2:雙線性轉換中,如果忘記做頻率預扭曲,會發生什麼?
Answer
由於雙線性轉換的頻率映射 $\Omega = (2/T)\tan(\omega/2)$ 是非線性的,不做預扭曲會導致數位濾波器的實際截止頻率偏低(因為 $\tan(\omega/2) < \omega/2$ 對 $\omega > 0$,即類比頻率被壓縮)。頻率越高偏差越大,接近 Nyquist 時幾乎完全扭曲。預扭曲就是先把期望的數位截止頻率反算成對應的類比頻率,使轉換後截止點精確落在正確位置。
互動:四大 IIR 濾波器比較
選擇濾波器類型與參數,即時比較四種經典設計的幅頻響應。
觀察:Butterworth 平滑但滾降慢,Elliptic 最陡但有波紋。調整階數觀察收斂速度差異。
全通濾波器與最小相位分解
任何穩定因果系統都可分解為「最小相位 × 全通」——這是 IIR 設計與相位等化的關鍵理論。
全通濾波器 (All-Pass Filter)
定義:$|H_{ap}(e^{j\omega})| = 1$ for all $\omega$(所有頻率振幅相同)
典型形式:
每對極點 $a$ 對應一個鏡像零點 $1/a^*$(單位圓外)。極點 + 鏡像零點的組合恰好讓振幅響應永遠等於 1,但相位響應不為零——這就是全通濾波器只調整相位不改變振幅的原因。
最小相位系統 (Minimum-Phase System)
定義:所有零點和極點都在單位圓內 ($|z|<1$)
關鍵性質:
- 給定振幅響應 $|H(e^{j\omega})|$,最小相位是群延遲最小的因果實現
- 有因果可逆($1/H_{min}(z)$ 也是穩定因果)
- 能量集中在訊號開頭(峰值時間最早)
最小相位 + 全通分解定理
任何穩定因果系統 $H(z)$ 都可分解為:
$$H(z) = H_{min}(z) \cdot H_{ap}(z)$$其中 $H_{min}$ 為最小相位、$H_{ap}$ 為全通。
展開:為什麼可以這樣分解?
對 $H(z)$ 中每一個位於單位圓外的零點 $z_0$($|z_0|>1$),把它「鏡像」到單位圓內的 $1/z_0^*$,並補一個全通因子來抵消差異:
$$\frac{1 - z_0 z^{-1}}{1} = \underbrace{\frac{1 - z_0^{-1*}z^{-1}}{1}}_{\text{minimum phase}} \cdot \underbrace{\frac{z^{-1} - z_0^{*}}{1 - z_0^{-1*}z^{-1}}}_{\text{all-pass}}$$展開驗證:右邊兩項相乘等於左邊。所以原本「外面的零點」變成「裡面的零點 + 全通旋轉」。$\blacksquare$
應用:
- 濾波器逆運算:要做 $H^{-1}(z)$ 必須先把非最小相位部分分離
- 相位等化:在原濾波器後串接全通濾波器,可改變相位響應而不影響振幅
- 頻譜整形:所有等振幅但不同相位的系統都共用同一個 $|H|$,差別在 all-pass 部分
- 系統識別:給定 $|H|$,最小相位是「最簡」的因果實現
References
- [1] A. V. Oppenheim & R. W. Schafer, Discrete-Time Signal Processing, 3rd ed., Ch. 7.
- [2] S. K. Mitra, Digital Signal Processing: A Computer-Based Approach, Ch. 8.
- [3] L. B. Jackson, Digital Filters and Signal Processing, Ch. 6.
- [4] S. Butterworth, "On the Theory of Filter Amplifiers," Wireless Engineer, 1930.
4C.1 濾波器實現結構 (Filter Realization Structures)
同一個轉移函數,不同結構 = 不同數值命運
Learning Objectives
- 理解同一 $H(z)$ 可以有多種等效結構
- 比較 Direct Form I / II、Cascade (SOS)、Parallel、Lattice 結構
- 理解為何有限精度運算下 Cascade/SOS 是工業標準
- 透過 float32 vs float64 實驗直觀感受結構對數值穩定性的影響
一句話總結
同一個 $H(z)$ 用不同結構實現,在無限精度下完全相同——但在有限精度(定點/浮點)下,結構的選擇決定了濾波器是精確工作還是完全崩壞。
為什麼要學?
1960 年代末,數位濾波器開始在軍事雷達和太空任務中使用。工程師們用理論上正確的直接形式 (Direct Form) 實現高階 IIR 濾波器,卻發現濾波器在硬體上完全不工作——輸出爆炸、自激振盪、頻率響應面目全非。
James Kaiser 和 Clifford Weinstein (MIT Lincoln Lab, ~1969) 等人的研究揭示了原因:有限字長效應 (Finite Word-Length Effects)。當 IIR 濾波器的極點非常接近單位圓時(窄帶濾波器常見),Direct Form 的係數對量化極其敏感——微小的捨入誤差就能把極點推到圓外。
解決方案是將高階濾波器分解為二階段 (Second-Order Sections, SOS) 的級聯——每一段只有兩個極點,係數敏感度大幅降低。這個教訓至今仍是 DSP 工程的核心準則。
前情提要
在 Module 4B 中,我們學會了設計 IIR 濾波器的轉移函數 $H(z) = B(z)/A(z)$。但轉移函數只描述了輸入-輸出關係——它沒有告訴你內部如何連線。同一個 $H(z)$ 可以用完全不同的延遲、加法器、乘法器接法來實現,每種接法就是一種「結構 (Structure)」。
痛點:「理論正確」不等於「實作能用」
考慮一個 8 階窄帶帶通 IIR 濾波器(中心頻率 $\omega_0 = 0.1\pi$,帶寬 $0.01\pi$):
- 用 Direct Form II 實現:分母多項式 $A(z) = 1 + a_1 z^{-1} + \cdots + a_8 z^{-8}$,其中某些 $a_k$ 的絕對值可達數百
- 在 32-bit 浮點數下,$a_k$ 的捨入改變了極點位置——某個極點的半徑從 0.998 變成 1.003
- 結果:系統不穩定。輸出指數增長直到溢位
- 改用 Cascade/SOS(4 個二階段串聯):每段的係數絕對值 $\leq 2$,即使 16-bit 定點也能穩定工作
由來:為什麼有這麼多結構?
數學上,一個 $N$ 階 IIR 轉移函數:
可以用任何等效的差分方程組來計算。不同的組織方式對應不同的訊號流程圖 (Signal Flow Graph),每種都是一種「結構」。它們在無限精度下完全等價,但在有限精度下的行為天差地別——這就是研究結構的意義。
原理:五種主要結構
1. Direct Form I
最直觀:先算分子(FIR 部分),再算分母(feedback)。
需要 $M+N$ 個延遲元件,$M+N+1$ 次乘法。兩條獨立的延遲線。
2. Direct Form II(正則形式 Canonical Form)
交換分子和分母的順序(線性時不變系統允許),合併延遲線。
只需 $\max(M,N)$ 個延遲元件(最少延遲 = 「正則」),但內部節點 $w[n]$ 的動態範圍可能很大。
3. Cascade / SOS(級聯二階段)
把 $H(z)$ 分解為 $L = \lceil N/2 \rceil$ 個二階段(biquad)的乘積。每段只管自己的一對共軛極點和一對零點,係數範圍小、對量化不敏感。
工業標準:幾乎所有 DSP 晶片的濾波器函式庫都用 SOS 形式。MATLAB 的 sosfilt、Python scipy 的 sosfilt 都是 SOS 實現。
4. Parallel Form(並聯形式)
部分分式展開後的二階段並聯。各段獨立運算,可平行化處理。
5. Lattice Structure(格狀結構)
用反射係數 (Reflection Coefficients) $\kappa_i$ 參數化。對全極點 (All-pole) 濾波器,$|\kappa_i| < 1$ 保證穩定——這是結構性保證,不依賴精度。
常用於語音編碼(LPC)和自適應濾波器。
結構比較表
| 結構 | 延遲數 | 乘法數 | 量化敏感度 | 溢位風險 | 備註 |
|---|---|---|---|---|---|
| Direct Form I | $M+N$ | $M+N+1$ | 高 | 中 | 最直觀 |
| Direct Form II | $\max(M,N)$ | $M+N+1$ | 高 | 高(內部節點) | 最少延遲 |
| Cascade/SOS | $2L$ | $5L+1$ | 低 | 低 | 工業首選 |
| Parallel | $2L$ | $5L+1$ | 低 | 低 | 可平行化 |
| Lattice | $N$ | $2N$ | 最低 | 最低 | 保證穩定(全極點) |
展開:為什麼 SOS 的係數敏感度低?
考慮 $N$ 階濾波器的分母多項式 $A(z) = \prod_{k=1}^{N}(1-p_k z^{-1})$。在直接形式中,係數 $a_k$ 是極點的初等對稱函數。
極點對係數的敏感度:
$$\frac{\partial p_i}{\partial a_k} = \frac{-p_i^{N-k}}{\prod_{j \neq i}(p_i - p_j)}$$當極點聚集在一起(窄帶濾波器),分母 $\prod_{j \neq i}(p_i - p_j)$ 趨近零,敏感度趨向無窮大。
在 SOS 中,每段只有 2 個極點 $p_i, p_i^*$,敏感度為:
$$\frac{\partial p_i}{\partial a_{1i}} = \frac{-p_i}{p_i - p_i^*} = \frac{-p_i}{2j\,\text{Im}(p_i)}$$這個值是有界的(只要極點不在實軸上),不會隨濾波器階數增加而惡化。$\;\blacksquare$
怎麼用:結構選擇指南
- FIR 濾波器:Direct Form(或 Transposed)通常足夠,因為沒有 feedback,沒有穩定性問題。
- 低階 IIR($\leq 2$ 階):Direct Form II 就好。一個 biquad 就是一個 SOS 段。
- 高階 IIR($\geq 4$ 階):務必用 Cascade/SOS。不要用 Direct Form。
- 需要平行運算(FPGA/GPU):考慮 Parallel Form。
- 語音/自適應(全極點):Lattice 結構,利用反射係數的穩定性保證。
黃金法則:永遠不要用高階 Direct Form 實現 IIR 濾波器。即使是 MATLAB 也在 filter 的文件中警告:「高階濾波器請使用 sosfilt」。
應用場景
- 嵌入式 DSP (16/32-bit 定點):SOS 是唯一可靠的 IIR 實現方式。TI C5000/C6000 系列的濾波器函式庫全部基於 SOS。
- 音訊處理(參數等化器):每個頻帶一個 biquad,級聯在一起。ProTools、Logic Pro 等 DAW 的 EQ 都是 biquad cascade。
- 控制系統:PID 控制器可以實現為一個 biquad。高階控制器用 SOS。
- 語音編碼(LPC):10 階全極點模型用 Lattice 結構,反射係數可以直接壓縮和傳輸。
陷阱與限制
1. SOS 的段排列順序:級聯順序影響中間節點的動態範圍。一般原則:把最接近單位圓的極點放在最後(讓增益最大的段最後處理),或使用 zp2sos 函數自動配對極零點。
2. 增益分配:總增益 $K$ 要分散到各段,不要全放在一段——否則那一段可能溢位。
3. Transposed Form 的陷阱:Direct Form II Transposed 對 FIR 很好(累積誤差小),但對 IIR 內部動態範圍問題仍然存在。
Quick Check
Q1:一個 6 階 IIR 濾波器用 Direct Form II 需要幾個延遲元件?用 Cascade/SOS 呢?
Answer
Direct Form II:$\max(M,N) = 6$ 個延遲元件(正則形式)。Cascade/SOS:分成 $L = 3$ 個二階段,每段 2 個延遲,共 $2 \times 3 = 6$ 個。延遲數相同,但 SOS 的係數敏感度遠低於 Direct Form。
Q2:為什麼定點 DSP 晶片幾乎只用 SOS 實現 IIR?
Answer
定點運算的精度很低(通常 16-bit,即小數部分只有 15 bit),係數量化誤差相對較大。在 Direct Form 中,高階多項式的係數是所有極點的對稱函數,微小的量化可能劇烈改變極點位置,甚至導致不穩定。SOS 中每段只管兩個極點,係數範圍小($|a_{1i}| \leq 2$, $|a_{2i}| \leq 1$),量化誤差對極點的影響被限制在可控範圍內。
互動:Direct Form vs Cascade/SOS 精度比較
同一個 4 階 IIR 濾波器,分別用 Direct Form II 和 Cascade/SOS 實現,比較 float32 vs float64 下的頻率響應差異。
紅色虛線 = float32 Direct Form(注意高頻偏差),藍色實線 = float64 參考,綠色 = float32 SOS(幾乎與參考重合)。
References
- [1] A. V. Oppenheim & R. W. Schafer, Discrete-Time Signal Processing, 3rd ed., Ch. 6.
- [2] P. S. R. Diniz, E. A. B. da Silva, S. L. Netto, Digital Signal Processing: System Analysis and Design, Ch. 9.
- [3] L. B. Jackson, "Roundoff-Noise Analysis for Fixed-Point Digital Filters Realized in Cascade or Parallel Form," IEEE Trans. Audio Electroacoustics, 1970.
4E.1 自適應濾波器 (Adaptive Filters)
當最佳濾波器會隨時間改變——讓濾波器自己學習
Learning Objectives
- 理解自適應濾波器的動機與 Wiener 最佳解(M8B Wiener 濾波)
- 推導 LMS (Least Mean Squares) 演算法及其收斂條件
- 比較 LMS / NLMS / RLS 的性能與計算複雜度
- 透過噪音消除 (Noise Cancellation) 互動實驗建立直覺
一句話總結
自適應濾波器是一個「邊做邊學」的系統——它不需要事先知道訊號的統計特性,而是在運行中根據誤差訊號不斷調整自己的係數,逼近最佳解。
為什麼要學?
Bernard Widrow 和他的博士生 Marcian E. (Ted) Hoff(是的,就是後來發明 Intel 4004 微處理器的那位 Hoff)在 1960 年的 Stanford 大學提出了 LMS 演算法。這是一個驚人的巧合——一個改變了自適應訊號處理的演算法,由一個即將改變電腦產業的人共同發明。
LMS 的突破在於它的極端簡單:只需要三行運算(計算誤差、更新權重、移動窗口),卻能在未知和時變環境中工作。它的簡單性使得它可以用最原始的硬體實現——Widrow 在 1960 年代就用類比電路做出了 ADALINE(自適應線性元件)。
今天,自適應濾波器無處不在:你的手機在通話時消除回音 (AEC)、降噪耳機消除環境噪音 (ANC)、WiFi 數據機等化通道失真——背後都是 LMS 或其變體。
前情提要
到目前為止,我們設計的濾波器(FIR、IIR)都是固定的——一旦設計好係數就不再改變。這對靜態場景(固定的低通/高通需求)足夠,但很多真實場景是動態的:
- 聲學回音消除 (AEC):說話者在房間裡移動,回音路徑持續改變
- 通道等化:無線通道的衰落 (fading) 隨時間隨機變化
- 主動噪音控制 (ANC):噪音源的統計特性會改變(引擎轉速變化、風速改變)
我們需要一種濾波器,能夠自動追蹤環境的變化。
痛點:你不知道「最佳」是什麼
在 Wiener 濾波理論中,最佳 FIR 濾波器的解是:
其中 $\mathbf{R}_{xx}$ 是輸入訊號的自相關矩陣 (Autocorrelation Matrix),$\mathbf{r}_{xd}$ 是輸入與期望輸出的互相關向量 (Cross-correlation Vector)。
問題是:
- 你通常不知道 $\mathbf{R}_{xx}$ 和 $\mathbf{r}_{xd}$(它們是統計量,需要大量數據估計)
- 即使估計了,求解 $\mathbf{R}_{xx}^{-1}$ 是 $O(M^3)$ 運算($M$ = 濾波器長度)
- 環境在變,上一秒的統計量下一秒就過時了
自適應濾波器的策略是:不求解方程,而是一步一步逼近解——每來一個新樣本就朝「更好」的方向走一小步。
由來:從 Wiener 到 LMS
思路演進:
- Wiener (1949):最佳解 $\mathbf{w}_{\text{opt}} = \mathbf{R}_{xx}^{-1}\mathbf{r}_{xd}$——完美但不實用(需要知道統計量)
- Steepest Descent(最陡下降法):$\mathbf{w}[n+1] = \mathbf{w}[n] - \mu\,\nabla J[n]$,其中 $J = E[|e[n]|^2]$ 是均方誤差 (MSE)。迭代逼近 $\mathbf{w}_{\text{opt}}$,但仍需要計算梯度的期望值。
- LMS (Widrow & Hoff, 1960):用瞬時梯度估計替代真實梯度:$\hat{\nabla}J[n] = -2\,e[n]\,\mathbf{x}[n]$。這個估計有噪聲,但期望值指向正確方向——隨機梯度下降 (SGD) 的鼻祖。
原理:LMS 演算法
直覺:想像你蒙著眼睛站在一個碗形的山谷裡(MSE 曲面),你想走到谷底(最佳解)。你無法看到全域地形,但可以感受到腳下的坡度(瞬時梯度)。LMS 就是每一步都順著當前坡度往下走一小步——雖然每一步的方向不完全正確(因為是估計值),但平均而言你會逼近谷底。
LMS 演算法(三行核心)
1. 計算輸出和誤差:
$$\hat{d}[n] = \mathbf{w}^T[n]\,\mathbf{x}[n] = \sum_{k=0}^{M-1}w_k[n]\,x[n-k]$$ $$e[n] = d[n] - \hat{d}[n]$$2. 更新權重:
$$\mathbf{w}[n+1] = \mathbf{w}[n] + \mu\,e[n]\,\mathbf{x}[n]$$$d[n]$:期望訊號,$\mathbf{x}[n] = [x[n], x[n-1], \ldots, x[n-M+1]]^T$:輸入向量,$\mu$:步長 (Step Size)
步長 $\mu$ 的選擇
$\mu$ 是 LMS 最關鍵的超參數:
- 太小:收斂極慢,追蹤不上環境變化
- 太大:發散(權重爆炸)
- 穩定條件:
其中 $M$ = 濾波器長度,$\sigma_x^2$ = 輸入功率,$\lambda_{\max}$ = $\mathbf{R}_{xx}$ 的最大特徵值。
實用規則:取 $\mu \approx \frac{1}{10 \cdot M \cdot \hat{\sigma}_x^2}$(穩定上界的 1/10),在穩定性和收斂速度之間取得平衡。
NLMS:正規化 LMS (Normalized LMS)
LMS 的步長對輸入功率敏感。NLMS 在每一步用輸入向量的能量正規化:
$\delta > 0$ 是小常數防止除以零。$\tilde{\mu} \in (0, 2)$ 不再依賴輸入功率。
RLS:遞迴最小平方 (Recursive Least Squares)
不用梯度下降,而是直接遞迴求解加權最小平方問題。
$\lambda \in (0.95, 1)$ 是遺忘因子 (Forgetting Factor)。RLS 收斂快得多(不受特徵值展開比影響),但每步需要 $O(M^2)$ 運算(維護逆相關矩陣的遞迴更新)。
三種演算法比較
| 特性 | LMS | NLMS | RLS |
|---|---|---|---|
| 每步計算量 | $O(M)$ | $O(M)$ | $O(M^2)$ |
| 收斂速度 | 慢(取決於 $\lambda_{\max}/\lambda_{\min}$) | 中等 | 快 |
| 追蹤能力 | 中等 | 中等 | 好 |
| 穩定性 | 需仔細選 $\mu$ | 較魯棒 | 可能數值不穩定 |
| 典型應用 | AEC、通道等化 | 通用首選 | 快速收斂需求 |
展開:LMS 收斂性分析
定義權重誤差向量 $\tilde{\mathbf{w}}[n] = \mathbf{w}[n] - \mathbf{w}_{\text{opt}}$,代入 LMS 更新式:
$$\tilde{\mathbf{w}}[n+1] = (\mathbf{I} - \mu\,\mathbf{x}[n]\mathbf{x}^T[n])\,\tilde{\mathbf{w}}[n] + \mu\,e_o[n]\,\mathbf{x}[n]$$其中 $e_o[n] = d[n] - \mathbf{w}_{\text{opt}}^T\mathbf{x}[n]$ 是最佳誤差(不可消除的噪聲)。
取期望值(使用獨立性假設 $\mathbf{x}[n]$ 與 $\tilde{\mathbf{w}}[n]$ 獨立):
$$E[\tilde{\mathbf{w}}[n+1]] = (\mathbf{I} - \mu\,\mathbf{R}_{xx})\,E[\tilde{\mathbf{w}}[n]]$$令 $\mathbf{R}_{xx} = \mathbf{Q}\boldsymbol{\Lambda}\mathbf{Q}^T$(特徵分解),定義旋轉誤差 $\mathbf{v}[n] = \mathbf{Q}^T\tilde{\mathbf{w}}[n]$:
$$E[v_i[n+1]] = (1 - \mu\lambda_i)\,E[v_i[n]]$$收斂條件:$|1 - \mu\lambda_i| < 1$ 對所有 $i$,即 $0 < \mu < 2/\lambda_{\max}$。
收斂速度由最慢的模態決定:$\tau_i = -1/\ln(1-\mu\lambda_i) \approx 1/(\mu\lambda_i)$。最慢模態對應 $\lambda_{\min}$,因此特徵值展開比 $\chi = \lambda_{\max}/\lambda_{\min}$ 越大,收斂越慢。
穩態超額 MSE (Excess MSE):
$$J_{\text{excess}} \approx \mu \cdot M \cdot \sigma_{e_o}^2 / 2 = \text{misadjustment} \times J_{\min}$$misadjustment $\mathcal{M} \approx \mu\,M\,\sigma_x^2 / 2 = \mu\,\text{tr}(\mathbf{R}_{xx})/2$。$\;\blacksquare$
怎麼用:噪音消除系統設計
場景:麥克風收到的訊號 $d[n] = s[n] + v[n]$(語音 + 噪音),另有一個參考麥克風收到噪音的相關副本 $x[n]$。
Step 1:初始化
$\mathbf{w}[0] = \mathbf{0}$,選 $M = 32$(根據噪音路徑的脈衝響應長度),$\mu = 0.01$
Step 2:對每個時步 $n$
(a) 組裝輸入向量 $\mathbf{x}[n] = [x[n], x[n-1], \ldots, x[n-31]]^T$
(b) 計算噪音估計 $\hat{v}[n] = \mathbf{w}^T[n]\,\mathbf{x}[n]$
(c) 計算誤差(=清理後的輸出)$e[n] = d[n] - \hat{v}[n] \approx s[n]$
(d) 更新 $\mathbf{w}[n+1] = \mathbf{w}[n] + \mu\,e[n]\,\mathbf{x}[n]$
Step 3:監控收斂
觀察 $|e[n]|^2$ 的滑動平均(學習曲線),確認 MSE 下降到穩態。如果不下降或振盪,減小 $\mu$。
應用場景
| 應用 | $d[n]$ | $x[n]$ | 演算法 |
|---|---|---|---|
| 聲學回音消除 (AEC) | 近端麥克風(語音+回音) | 遠端語音 | NLMS / PBFDAF |
| 主動噪音控制 (ANC) | 誤差麥克風 | 參考麥克風 | FxLMS |
| 通道等化 | 接收訊號 | 訓練序列 | LMS / RLS |
| 系統辨識 | 系統輸出 | 系統輸入 | LMS / NLMS |
| 波束成形 (Beamforming) | 陣列麥克風訊號 | 期望方向參考 | LMS / MVDR |
陷阱與限制
1. 參考訊號必須與噪音相關:如果 $x[n]$ 與 $d[n]$ 中的噪音成分不相關,LMS 無法學到任何有用的映射。在 ANC 中,參考麥克風必須物理上靠近噪音源。
2. 非平穩訊號的追蹤延遲:LMS 追蹤環境變化需要時間(約 $10/(\mu\lambda_{\min})$ 個樣本)。環境變化太快時,濾波器可能永遠追不上。
3. 特徵值展開比問題:當 $\mathbf{R}_{xx}$ 的條件數 $\chi = \lambda_{\max}/\lambda_{\min}$ 很大時(如語音訊號,$\chi$ 可達 100+),LMS 的不同模態收斂速度差異巨大。NLMS 部分解決此問題,RLS 完全解決但計算量大。
實務建議:先試 NLMS($\tilde{\mu} = 0.5$, $\delta = 10^{-6}$)。如果收斂太慢,改用頻域自適應 (FBLMS) 或 RLS。
Quick Check
Q1:LMS 的步長 $\mu$ 增大 10 倍會怎樣?
Answer
收斂速度加快約 10 倍(在穩定範圍內),但穩態超額 MSE 也增大 10 倍($\mathcal{M} \propto \mu$)。如果 $\mu$ 超過穩定上界 $2/(M\sigma_x^2)$,演算法會發散——權重指數增長,輸出爆炸。因此 $\mu$ 的選擇是收斂速度 vs 穩態精度的取捨。
Q2:NLMS 相比 LMS 的核心改進是什麼?代價是什麼?
Answer
NLMS 在每一步用輸入向量的能量 $\|\mathbf{x}[n]\|^2$ 正規化步長,使得等效步長自動適應輸入功率——功率大時步長自動縮小(防止發散),功率小時步長自動放大(加速收斂)。代價很小:每步多一次內積運算($O(M)$,與 LMS 同階),以及需要一個小正則化常數 $\delta$ 防止除零。NLMS 的實用性遠超 LMS,是工業應用的首選。
互動:LMS 噪音消除實驗
語音訊號被噪音汙染,LMS 濾波器嘗試消除噪音。調整步長 $\mu$ 和濾波器長度 $M$,觀察收斂速度與降噪效果。
上圖:灰色 = 含噪訊號 $d[n]$,藍色 = LMS 輸出 $e[n]$(降噪後)。下圖:學習曲線(MSE vs 迭代次數)。嘗試 $\mu$ 過大時的發散現象!
References
- [1] S. Haykin, Adaptive Filter Theory, 5th ed., Prentice Hall, 2014.
- [2] B. Widrow & M. E. Hoff, "Adaptive switching circuits," IRE WESCON Conv. Rec., 1960.
- [3] B. Widrow & S. D. Stearns, Adaptive Signal Processing, Prentice Hall, 1985.
- [4] A. H. Sayed, Adaptive Filters, Wiley, 2008.
5.1 升取樣與降取樣 (Decimation & Interpolation)
改變取樣率的兩把基本工具 — 但不小心就會產生鬼影
Learning Objectives
- 理解降取樣 (Decimation) 在頻域造成頻譜壓縮與混疊 (Aliasing) 的機制
- 理解升取樣 (Interpolation) 在頻域產生頻譜映像 (Imaging) 的原因
- 掌握抗混疊 (Anti-Aliasing) 與抗映像 (Anti-Imaging) 低通濾波器的設計原則
- 會用有理數比 $L/M$ 實現任意取樣率轉換
一句話總結
降取樣 (Decimation) 每 $M$ 個樣本只留一個,頻譜會被壓縮 $M$ 倍並產生 $M$ 份重疊;升取樣 (Interpolation) 在每對樣本間插入 $L-1$ 個零,頻譜被縮窄到 $\pi/L$ 但出現 $L-1$ 個映像。兩者都需要低通濾波器來清理。
為什麼要學?
Ronald Crochiere & Lawrence Rabiner (1981) 在經典著作 Multirate Digital Signal Processing 中系統化了多速率處理的理論框架。他們的動機很實際:數位電話系統中,不同標準使用不同取樣率(8 kHz、16 kHz、44.1 kHz、48 kHz),設備之間需要無縫轉換。在此之前,轉換取樣率幾乎都靠先 D/A 再 A/D——品質差、成本高。多速率理論證明了純粹在數位域就能精確轉換取樣率,徹底改變了通訊和音訊產業。
前情提要
在進入多速率處理之前,你需要回顧以下關鍵概念:
- 取樣定理 (Sampling Theorem):取樣率 $f_s$ 必須大於訊號最高頻率 $f_{\max}$ 的兩倍,否則發生混疊 (Aliasing)。頻譜以 $f_s$ 為週期重複
- 離散時間傅立葉轉換 (DTFT):離散訊號的頻譜是 $2\pi$ 週期函數,$\omega = \pi$ 對應 $f_s/2$ (Nyquist 頻率)
- 低通濾波器 (LPF):只讓低於截止頻率 $\omega_c$ 的成分通過,壓制高頻成分
痛點:為什麼不能直接丟掉或插入樣本?
你可能覺得降低取樣率很簡單——每隔幾個樣本取一個不就好了嗎?升高取樣率——在中間補零不就行了嗎?
- 直接丟樣本 → 混疊:把 CD 品質 (44.1 kHz) 的音樂直接每 5 個取 1 個降到 8.82 kHz,高於 4.41 kHz 的所有高頻成分會折疊回低頻,產生刺耳的失真
- 直接插零 → 映像:在樣本間插入零後,頻譜中會出現原始頻譜的多個「鏡像」複本,聽起來像金屬般的高頻雜音
- 非整數倍率 → 更複雜:CD (44.1 kHz) 轉 DAT (48 kHz) 的比率是 $160/147$——既非整數升取樣也非整數降取樣
核心教訓:改變取樣率 = 改變頻譜的「縮放」與「週期性」。如果不用濾波器管理這些變化,必然產生假頻 (Artifacts)。
由來
多速率處理的需求源自 1970 年代數位電話交換系統的發展。ITU-T 標準規定電話語音用 8 kHz 取樣,但寬帶語音用 16 kHz,音樂用 44.1 或 48 kHz。最初的解決方案是:數位 → 類比 → 重新取樣 → 數位,不僅昂貴還會累積噪聲。
Crochiere 和 Rabiner 在 Bell Labs 的研究證明,透過整數倍升取樣 + 低通濾波 + 整數倍降取樣的組合,可以在數位域實現任何有理數比 $L/M$ 的取樣率轉換,且理論上可以做到無損。
原理
降取樣 (Decimation by $M$):直覺
想像你拍了一段 120fps 的慢動作影片,現在要轉成 30fps。你每 4 幀取 1 幀。如果原始影片中有快速揮手的動作(高頻),30fps 可能無法正確呈現——手的位置會出現跳躍或重疊(混疊)。所以在丟幀之前,你需要先做「動態模糊」(低通濾波)。
時域操作:
降取樣
$$x_d[n] = x[nM]$$每 $M$ 個樣本保留一個,取樣率從 $f_s$ 降到 $f_s/M$
頻域效應:
頻譜被壓縮 $M$ 倍,且出現 $M$ 個位移複本的疊加 → 若頻譜超出 $[-\pi/M, \pi/M]$ 則混疊
抗混疊策略:在降取樣之前,用截止頻率 $\omega_c = \pi/M$ 的低通濾波器去除高於 $f_s/(2M)$ 的成分。這樣壓縮後的頻譜不會重疊。
升取樣 (Interpolation by $L$):直覺
想像你有一張 100×100 的低解析度照片,要放大到 400×400。最粗糙的方法是在像素間插入零(黑點),然後用模糊濾波器平滑——這正是升取樣的原理。
時域操作:
升取樣(零填充)
$$x_u[n] = \begin{cases} x[n/L], & n = 0, \pm L, \pm 2L, \ldots \\ 0, & \text{otherwise} \end{cases}$$在每對原始樣本之間插入 $L-1$ 個零,取樣率從 $f_s$ 升到 $Lf_s$
頻域效應:
頻譜被「壓縮」到 $[0, \pi/L]$,但在 $[0, 2\pi]$ 上出現 $L$ 個重複映像
抗映像策略:在升取樣之後,用截止頻率 $\omega_c = \pi/L$、增益 $L$ 的低通濾波器消除映像,同時將插值後的振幅恢復到正確水準。
有理數比取樣率轉換 $L/M$
取樣率轉換流程
$$x[n] \xrightarrow{\uparrow L} \xrightarrow{H(\omega_c = \pi/\max(L,M))} \xrightarrow{\downarrow M} y[n]$$先升取樣 $L$ 倍 → 低通濾波(截止取 $\pi/L$ 和 $\pi/M$ 的較小者)→ 降取樣 $M$ 倍
展開:降取樣頻域公式推導
設 $x_d[n] = x[nM]$,其 DTFT 為:
$$X_d(e^{j\omega}) = \sum_{n=-\infty}^{\infty} x[nM] e^{-j\omega n}$$利用恆等式:對任意序列 $x[n]$,可寫成
$$\sum_{n} x[nM] e^{-j\omega n} = \frac{1}{M}\sum_{k=0}^{M-1}\sum_{m} x[m] e^{-j(\omega - 2\pi k)m/M}$$這是因為「每 $M$ 個取 1 個」等價於先乘以週期為 $M$ 的梳狀函數 (comb function):
$$c[n] = \frac{1}{M}\sum_{k=0}^{M-1} e^{j2\pi kn/M} = \begin{cases}1, & n \equiv 0 \pmod{M}\\0, & \text{otherwise}\end{cases}$$因此 $x[n] \cdot c[n]$ 保留了 $n = 0, M, 2M, \ldots$ 的樣本,其 DTFT 為:
$$\frac{1}{M}\sum_{k=0}^{M-1} X\!\left(e^{j(\omega - 2\pi k)/M}\right)$$這清楚地顯示:降取樣後的頻譜是原始頻譜縮放 $M$ 倍後的 $M$ 個位移複本之和。當這些複本重疊時,就是混疊。
怎麼用:取樣率轉換實戰
範例:CD 44.1 kHz → 電話 8 kHz
- 計算比率:$8000/44100 = 80/441$。因此 $L = 80$、$M = 441$(已是最簡分數)
- 升取樣 80 倍:在每對樣本間插入 79 個零 → 中間取樣率 = $44100 \times 80 = 3{,}528{,}000$ Hz
- 低通濾波:截止頻率 $\omega_c = \pi/\max(80, 441) = \pi/441$,對應 $f_c = 3{,}528{,}000/(2 \times 441) = 4{,}000$ Hz
- 降取樣 441 倍:每 441 個樣本取 1 個 → 最終取樣率 = $3{,}528{,}000/441 = 8{,}000$ Hz
實務注意:中間速率 3.528 MHz 過高,實作時會用 Polyphase 結構(下一節)或多級級聯來避免這個問題。
互動:升取樣與降取樣的頻域效應
選擇降取樣或升取樣模式,調整倍率,切換是否使用抗混疊/抗映像濾波器,觀察時域波形和頻譜的變化。
應用場景
- 音訊取樣率轉換:CD (44.1 kHz) ↔ DVD/Blu-ray (48 kHz) ↔ 高解析音樂 (96/192 kHz)。所有 DAW 軟體 (Pro Tools, Ableton) 內建多速率轉換器
- 數位通訊:基帶訊號在不同處理階段使用不同速率——調變器 (高速)、等化器 (中速)、語音編碼器 (低速)。軟體定義無線電 (SDR) 大量使用多級降取樣
- 影像縮放:影像放大/縮小本質上是 2D 升取樣/降取樣。Photoshop 的「雙三次插值 (Bicubic)」就是一種 2D 低通內插濾波器
- 生醫訊號:EEG 常以 512 Hz 或 1024 Hz 取樣,但許多分析只關注 0-40 Hz 的腦波 → 降取樣到 128 Hz 可大幅減少計算量
陷阱與限制
- 忘記先濾波再降取樣:這是最常見的錯誤。混疊一旦發生就無法復原——被折疊的高頻與低頻永久混在一起
- 升取樣不等於「增加資訊」:把 8 kHz 語音升取樣到 44.1 kHz 不會讓它聽起來更清晰。你無法恢復 4 kHz 以上的頻率成分——那些資訊在最初取樣時就已經丟失了
- 非整數比的精度問題:44100 → 48000 的比率 $160/147$ 需要先升 160 倍再降 147 倍,中間速率高達 7.056 MHz。實作時必須用多級或 Polyphase 結構
- 群延遲 (Group Delay):FIR 抗混疊濾波器(M4B 濾波器設計)會引入延遲 $(N-1)/2$ 個樣本。在即時應用中,這個延遲可能不可接受
Quick Check
Q1:對取樣率 16 kHz 的語音訊號進行 4 倍降取樣。如果不加抗混疊濾波器,原始訊號中 3 kHz 的成分在降取樣後會出現在什麼頻率?
查看解答
降取樣後的取樣率為 $16/4 = 4$ kHz,Nyquist 頻率為 2 kHz。原始 3 kHz 成分超過 Nyquist,會被折疊:$3 \text{ kHz}$ 對映到 $4 - 3 = 1$ kHz。因此在降取樣後的訊號中,1 kHz 處會出現一個假頻成分,這就是混疊。
Q2:為什麼取樣率轉換系統要「先升後降」($\uparrow L \to \text{LPF} \to \downarrow M$) 而不是「先降後升」?
查看解答
如果先降取樣,高頻成分會因混疊而不可逆地損失。先升取樣則只是插零(產生可移除的映像),不會丟失任何資訊。升取樣後再用低通濾波器同時清除映像和即將被降取樣折疊的成分,最後再降取樣。這樣可以保證在數學上是無損的(假設理想低通濾波器)。
References: [1] Crochiere, R.E. & Rabiner, L.R., Multirate Digital Signal Processing, Prentice-Hall, 1983. [2] Oppenheim & Schafer, Discrete-Time Signal Processing, 3rd ed., Ch.4. [3] Vaidyanathan, P.P., Multirate Systems and Filter Banks, Prentice-Hall, 1993. [4] Lyons, R., Understanding Digital Signal Processing, 3rd ed., Ch.10.
5.2 Polyphase 結構 (Polyphase Decomposition)
不要先算再丟 — 只算你需要的
Learning Objectives
- 理解直接實現降取樣濾波的計算浪費
- 掌握 Polyphase 分解的數學推導與 Noble Identity
- 能計算 Polyphase 結構帶來的計算量節省
- 理解 Polyphase 在升取樣中的對偶應用
一句話總結
Polyphase 結構將一個長濾波器拆成 $M$ 個短子濾波器,每個子濾波器在低速率下運作,避免「先算再丟」的浪費,計算量直接省 $M$ 倍。
為什麼要學?
Bellanger, Bonnerot & Coudreuse (1976) 在 IEEE 論文中首次系統地提出了 Polyphase 濾波器結構用於多速率處理。這個想法的核心洞見改變了整個通訊產業:在數位接收機中,如果需要先低通濾波再降取樣,傳統做法要在高速率下執行所有乘加運算,然後丟掉大部分結果。Polyphase 把這個過程重新排列,只計算你最終需要的輸出樣本。在 DSP 晶片計算資源有限的年代(至今亦然),這個 $M$ 倍的加速是決定性的。
前情提要
- 降取樣流程(上一節):先用截止 $\pi/M$ 的 LPF 濾波,再每 $M$ 個取一個
- FIR 卷積:$y[n] = \sum_{k=0}^{N-1} h[k]\, x[n-k]$,每個輸出需要 $N$ 次乘加
- Z 轉換:$H(z) = \sum_{k} h[k] z^{-k}$,用來分析濾波器的代數結構
痛點:計算量的巨大浪費
考慮 $M = 4$ 的降取樣系統:
- 先對每一個輸入樣本做 FIR 濾波($N$ 次乘加 / 樣本)
- 然後每 4 個輸出只留 1 個,丟掉其餘 3 個
- 也就是說,75% 的計算結果被直接扔掉了!
如果濾波器有 $N = 128$ 個抽頭 (taps),輸入速率 1 MHz:
- 直接法:$128 \times 10^6 = 1.28 \times 10^8$ 次乘法/秒
- 其中 $3/4$ 是白做的 → 有效計算只需 $3.2 \times 10^7$ 次乘法/秒
問題:能不能重新安排計算順序,讓濾波器只在低速率 ($f_s/M$) 下運作,從根本上消除浪費?
由來
Polyphase 的名稱來自「多相」——把濾波器係數按相位(延遲偏移量)分組。概念上類似於多相電力系統中,三相電各相差 120 度,合在一起提供穩定的功率。
數學上的關鍵突破是 Noble Identity(以 B. Noble 命名):它證明了降取樣器可以「穿過」濾波器,只要對濾波器的 Z 轉換做適當的變數替換。這使得我們可以先降取樣,再在低速率下濾波。
原理
直覺:想像你是工廠裝配線上的品管員,每 4 件產品只檢查 1 件。傳統做法是「每件都做完整檢測,然後丟掉 3 件的報告」。Polyphase 的做法是「只對第 4 件做檢測,但把前 3 件的關鍵資料也考慮進去」——檢測次數少 4 倍,結果一模一樣。
Polyphase 分解
將 $N$ 抽頭濾波器的係數按餘數分成 $M$ 組:
Type-I Polyphase 分解
$$H(z) = \sum_{k=0}^{M-1} z^{-k}\, E_k(z^M)$$其中 $E_k(z) = \sum_{n} h[nM+k]\, z^{-n}$,$k = 0, 1, \ldots, M-1$
每個 $E_k$ 只包含原始濾波器中每隔 $M$ 個的係數:
- $E_0$:$h[0], h[M], h[2M], \ldots$(第 0 相)
- $E_1$:$h[1], h[M+1], h[2M+1], \ldots$(第 1 相)
- $E_{M-1}$:$h[M-1], h[2M-1], h[3M-1], \ldots$(第 $M-1$ 相)
Noble Identity
降取樣器可以「穿過」濾波器,前提是將 $z$ 替換為 $z^M$
應用 Noble Identity 到降取樣系統:
- 原始:$x[n] \to H(z) \to \downarrow M \to y[n]$(高速率下濾波)
- 分解:$H(z) = \sum z^{-k} E_k(z^M)$
- 對每條支路套用 Noble Identity:先 $\downarrow M$,再用 $E_k(z)$ 濾波
- 結果:$M$ 個子濾波器全都在低速率下運作!
計算量分析
| 直接法 | Polyphase | |
|---|---|---|
| 每個輸出的乘法次數 | $N$ | $N$ |
| 輸出速率 | $f_s$(高速率產生,再丟棄) | $f_s/M$(只產生需要的) |
| 每秒乘法次數 | $N \cdot f_s$ | $N \cdot f_s / M$ |
| 加速比 | $M$ 倍 | |
展開:Polyphase 分解完整推導
從 Z 轉換出發:
$$H(z) = \sum_{n=0}^{N-1} h[n] z^{-n}$$將索引 $n$ 寫成 $n = qM + k$,其中 $q = \lfloor n/M \rfloor$,$k = n \bmod M$:
$$H(z) = \sum_{k=0}^{M-1} \sum_{q=0}^{\lceil N/M\rceil - 1} h[qM+k]\, z^{-(qM+k)}$$ $$= \sum_{k=0}^{M-1} z^{-k} \underbrace{\sum_{q} h[qM+k]\,(z^M)^{-q}}_{E_k(z^M)}$$因此 $H(z) = \sum_{k=0}^{M-1} z^{-k} E_k(z^M)$,其中每個 Polyphase 子濾波器為:
$$E_k(z) = \sum_{q} h[qM+k]\, z^{-q}, \quad k = 0, 1, \ldots, M-1$$Noble Identity 證明:
設 $v[n] = \sum_m g[m] w[n-m]$,其中 $g$ 的 Z 轉換為 $G(z^M)$(即 $g[n] \neq 0$ 只在 $n$ 為 $M$ 的倍數時)。降取樣後:
$$v_d[n] = v[nM] = \sum_m g[m] w[nM - m]$$因為 $g[m] = 0$ when $m \not\equiv 0 \pmod{M}$,令 $m = lM$:
$$v_d[n] = \sum_l g[lM] w[nM - lM] = \sum_l g[lM] w_d[n-l] \cdot (\text{若 }w_d[n]=w[nM])$$這就是 $w$ 先降取樣再用 $G(z)$ 濾波,證畢。
怎麼用:Polyphase 降取樣計算實例
範例:24 抽頭 FIR,降取樣 $M = 4$
- 分組:將 $h[0] \ldots h[23]$ 分成 4 組:
- $E_0$:$h[0], h[4], h[8], h[12], h[16], h[20]$(6 個係數)
- $E_1$:$h[1], h[5], h[9], h[13], h[17], h[21]$(6 個係數)
- $E_2$:$h[2], h[6], h[10], h[14], h[18], h[22]$(6 個係數)
- $E_3$:$h[3], h[7], h[11], h[15], h[19], h[23]$(6 個係數)
- 降取樣輸入:對原始輸入的每個相位分別降取樣 → 每個 $E_k$ 的輸入速率 = $f_s/4$
- 子濾波:每個 $E_k$ 用 6 個係數濾波 → 6 次乘法
- 合併:4 路相加 → 每個輸出共 $4 \times 6 = 24$ 次乘法,但在 $f_s/4$ 速率
- 結果:
直接法:24 乘法 × 1000 樣本/秒 = 24,000 次乘法/秒 Polyphase:24 乘法 × 250 樣本/秒 = 6,000 次乘法/秒 加速:4 倍!
互動:直接法 vs Polyphase 計算量比較
調整濾波器長度和降取樣因子,觀察計算量的差異。
應用場景
- 軟體定義無線電 (SDR):接收機前端 ADC 以數 GHz 取樣,需要多級降取樣到基帶。每一級都用 Polyphase 結構,否則 FPGA 根本跑不動
- 數位電視 (DVB):Channelizer(頻道化器)同時從寬帶訊號中提取多個窄帶頻道,本質上就是 Polyphase 濾波器組
- 音訊重取樣:libsamplerate、Sox 等開源庫內部都使用 Polyphase 實現高品質取樣率轉換
- 雷達脈衝壓縮:匹配濾波器 + 降取樣的組合,用 Polyphase 可以在 FPGA 上即時處理高速 ADC 資料
陷阱與限制
- 只適用於整數倍率:Polyphase 結構要求降取樣因子 $M$ 為整數。對於有理數比 $L/M$,需要組合升取樣和降取樣的 Polyphase
- IIR 濾波器不適用:Noble Identity 嚴格來說只對因果 FIR 濾波器成立。IIR 的遞迴結構使得 Polyphase 分解更為複雜
- 濾波器長度需被 $M$ 整除:若不整除,需要零填充到 $M$ 的倍數(不影響頻率響應,只是多了幾個零係數)
- 記憶體存取模式:在硬體實現中,Polyphase 的非連續記憶體存取模式可能降低快取效率,需要謹慎排列資料佈局
Quick Check
Q1:一個 64 抽頭 FIR 濾波器用於 8 倍降取樣系統。直接法和 Polyphase 法每秒各需要多少次乘法?(假設輸入速率 10 kHz)
查看解答
直接法:在 10 kHz 下濾波 → $64 \times 10{,}000 = 640{,}000$ 次乘法/秒,然後每 8 個輸出丟 7 個。
Polyphase:8 個子濾波器各 $64/8 = 8$ 個係數,在 $10{,}000/8 = 1{,}250$ Hz 下運作。每個輸出需 $8 \times 8 = 64$ 次乘法,但速率只有 1,250 Hz → $64 \times 1{,}250 = 80{,}000$ 次乘法/秒。加速 $640{,}000/80{,}000 = 8$ 倍,恰好等於 $M$。
Q2:Noble Identity 說「降取樣可以穿過濾波器」,但為什麼不是任意濾波器都行?關鍵條件是什麼?
查看解答
Noble Identity 的精確形式是:$H(z^M)$ 後接 $\downarrow M$ = $\downarrow M$ 後接 $H(z)$。注意左邊的濾波器是 $H(z^M)$(不是 $H(z)$)。所以不是任意 $H(z)$ 都能直接穿過降取樣器——你必須先把 $H(z)$ 分解成 Polyphase 形式 $\sum z^{-k} E_k(z^M)$,然後對每個 $E_k(z^M)$ 項分別套用 Noble Identity。
References: [1] Bellanger, M., Bonnerot, G. & Coudreuse, M., Digital Filtering by Polyphase Network: Application to Sample-Rate Alteration and Filter Banks, IEEE Trans. ASSP, 1976. [2] Vaidyanathan, P.P., Multirate Systems and Filter Banks, Ch.4-5, 1993. [3] harris, f.j., Multirate Signal Processing for Communication Systems, Prentice-Hall, 2004. [4] Crochiere & Rabiner, Multirate Digital Signal Processing, Ch.3, 1983.
5.3 濾波器組 (Filter Banks)
把訊號拆成子頻帶,處理完再組回來 — 從 MP3 到小波的統一框架
Learning Objectives
- 理解雙通道 QMF (Quadrature Mirror Filter) 的分析-合成架構
- 掌握完美重建 (Perfect Reconstruction, PR) 條件的數學推導
- 理解混疊消除 (Alias Cancellation) 條件
- 建立濾波器組與離散小波轉換 (DWT) 的連結:Mallat 演算法
一句話總結
濾波器組 (Filter Bank) 把一個訊號分成多個子頻帶 (Subband),各自降取樣後獨立處理,再升取樣合成回原始訊號。如果設計得當,可以做到完美重建 (Perfect Reconstruction)——輸出完全等於輸入的延遲版本,沒有任何失真。
為什麼要學?
Esteban & Galand (1977) 在 ICASSP 會議上提出了 Quadrature Mirror Filter (QMF) 用於語音子頻帶編碼 (Sub-Band Coding),開啟了子頻帶處理的時代。他們的動機是:語音的不同頻帶具有不同的感知重要性,如果分開處理,可以對重要頻帶分配更多位元、不重要的用更少位元——這就是感知編碼 (Perceptual Coding) 的萌芽。後來 MP3 使用的 MDCT (Modified Discrete Cosine Transform) 本質上就是一種完美重建濾波器組,JPEG 2000 使用的離散小波轉換 (DWT) 也是。可以說,現代壓縮技術的半壁江山都建立在濾波器組理論之上。
前情提要
- 降取樣與升取樣(5.1 節):降取樣因子 2 的頻域效應——頻譜壓縮 + 混疊
- Polyphase 結構(5.2 節):如何高效實現「濾波 + 降取樣」的組合
- 低通/高通濾波器:$H_0(z)$ 低通保留 $[0, \pi/2]$,$H_1(z)$ 高通保留 $[\pi/2, \pi]$
痛點:分頻處理的兩難
很多應用需要分頻帶處理:
- 音訊壓縮:人耳對 1-4 kHz 最敏感,對 16+ kHz 不敏感 → 想分開編碼
- 噪聲消除:噪聲可能只在某些頻帶 → 想只處理那些帶
- 等化器:想獨立調整低音、中音、高音
但如果分頻處理後要合成回去,問題就來了:
核心難題:降取樣會產生混疊,升取樣會產生映像。分析-合成的往返過程中,這些 artifact 會不會累積?有沒有辦法讓它們完全抵消?
由來
QMF 的故事:Esteban 和 Galand 最初的 QMF 設計只能做到「近似」完美重建——混疊可以完全消除,但會殘留一些振幅失真 (Amplitude Distortion)。
Smith & Barnwell (1984) 和 Mintzer (1985) 獨立發現了真正的完美重建雙通道濾波器組 (PR-QMF),又稱 Conjugate Quadrature Filter (CQF)。
Stphane Mallat (1989) 揭示了一個深刻的連結:反覆對低通輸出執行雙通道分析 = 離散小波轉換 (DWT)。這就是 Mallat 演算法,它將抽象的小波理論轉化為可高效計算的濾波器組操作,直接促成了小波在影像壓縮、去噪等領域的爆發。
原理
直覺:想像一條高速公路上的車流(訊號),到了收費站被分成兩條車道(低頻/高頻)。每條車道獨立收費(處理),然後匯回同一條路。如果分流和匯流的機制設計得好,出來的車流跟進去的完全一樣(完美重建)。如果設計不好,有些車會被弄丟或重複(失真)。
雙通道分析-合成系統
結構如下:
分析合成方程式:
輸出的 Z 轉換
$$Y(z) = \underbrace{\tfrac{1}{2}\bigl[F_0(z)H_0(z) + F_1(z)H_1(z)\bigr]}_{\text{Transfer function } T(z)} X(z) + \underbrace{\tfrac{1}{2}\bigl[F_0(z)H_0(-z) + F_1(z)H_1(-z)\bigr]}_{\text{Alias term } A(z)} X(-z)$$兩個設計目標:
- 混疊消除 (Alias Cancellation):令 $A(z) = 0$,即 $F_0(z)H_0(-z) + F_1(z)H_1(-z) = 0$。
一個簡單的解:$F_0(z) = H_1(-z)$,$F_1(z) = -H_0(-z)$ - 完美重建 (Perfect Reconstruction):令 $T(z) = cz^{-d}$(純延遲),即 $$F_0(z)H_0(z) + F_1(z)H_1(z) = 2cz^{-d}$$
QMF 設計
經典 QMF 選擇:$H_1(z) = H_0(-z)$(鏡像關係),即 $h_1[n] = (-1)^n h_0[n]$。
含義:如果 $H_0$ 是低通,那 $H_0(-z)$ 就是把頻率軸翻轉,自動成為高通。這就是「Quadrature Mirror」名稱的由來——高通是低通的鏡像。
與 DWT 的連結:Mallat 演算法
把雙通道分析的低頻輸出 $v_0[n]$ 再送入另一組 $(H_0, H_1)$ + $\downarrow 2$:
這正是離散小波轉換 (DWT)!每一層提取不同尺度的細節。$H_0/H_1$ 就是小波的縮放函數/母小波 (Scaling Function / Mother Wavelet) 對應的濾波器。
展開:完美重建條件推導
在雙通道系統中,降取樣 $\downarrow 2$ 再升取樣 $\uparrow 2$ 的組合效應為:
$$(\uparrow 2 \circ \downarrow 2)\{v\}(z) = \frac{1}{2}\bigl[V(z^{1/2}) + V(-z^{1/2})\bigr] \bigg|_{z \to z^2}$$更明確地,設 $v_0[n]$ 是 $x[n]$ 經 $H_0$ 濾波再 $\downarrow 2$ 的結果:
$$V_0(z) = \frac{1}{2}\bigl[H_0(z^{1/2})X(z^{1/2}) + H_0(-z^{1/2})X(-z^{1/2})\bigr]$$(這裡用了 $\downarrow 2$ 的頻域公式)。升取樣回去再通過 $F_0$:
$$U_0(z) = F_0(z) \cdot \frac{1}{2}\bigl[H_0(z)X(z) + H_0(-z)X(-z)\bigr]$$同理 $U_1(z) = F_1(z) \cdot \frac{1}{2}[H_1(z)X(z) + H_1(-z)X(-z)]$。
合成輸出:
$$Y(z) = U_0(z) + U_1(z) = T(z)X(z) + A(z)X(-z)$$其中:
$$T(z) = \frac{1}{2}[F_0(z)H_0(z) + F_1(z)H_1(z)]$$ $$A(z) = \frac{1}{2}[F_0(z)H_0(-z) + F_1(z)H_1(-z)]$$完美重建要求:$A(z) = 0$(無混疊)且 $T(z) = cz^{-d}$(純延遲)。
若取 $H_1(z) = H_0(-z)$、$F_0(z) = H_0(z)$、$F_1(z) = -H_0(-z)$,則:
$$A(z) = \frac{1}{2}[H_0(z)H_0(-z) - H_0(-z)H_0(z)] = 0 \checkmark$$ $$T(z) = \frac{1}{2}[H_0^2(z) - H_0^2(-z)]$$PR 要求 $T(z) = cz^{-d}$,這對 $H_0$ 的係數施加了非平凡的約束(Power Complementarity)。Daubechies 小波就是滿足此條件的著名解。
怎麼用:雙通道濾波器組設計步驟
- 選擇原型低通濾波器 $H_0(z)$:設計截止在 $\pi/2$ 的半帶 (Half-Band) FIR 低通,如使用 Daubechies 係數或 CQF 設計法
- 由鏡像關係得到高通:$H_1(z) = H_0(-z)$,即 $h_1[n] = (-1)^n h_0[n]$(將低通的偶數係數不變、奇數係數反號)
- 設定合成濾波器:$F_0(z) = H_0(z)$,$F_1(z) = -H_1(z)$(或依 PR 條件調整)
- 驗證 PR:計算 $T(z)$ 確認為純延遲,計算 $A(z)$ 確認為零
- (若要 DWT)迭代:將 $v_0[n]$ 再送入同一組分析濾波器,重複所需層數
數值例:Daubechies db2 (4-tap):$h_0 = [0.4830, 0.8365, 0.2241, -0.1294]$。可以驗證 $T(z) = z^{-3}$(延遲 3 個樣本),完美重建。
互動:雙通道濾波器組分析與重建
觀察輸入訊號如何被分成低頻和高頻子帶,以及完美重建 vs 非完美重建的差異。
應用場景
- 語音編碼 (G.722):ITU-T G.722 標準使用雙通道 QMF 將 7 kHz 語音分成高低頻帶,分別用 ADPCM 編碼。低頻帶用較多位元(語音主要能量所在),高頻帶用較少位元
- MP3 音訊壓縮:使用 32 通道 MDCT (Modified Discrete Cosine Transform) 濾波器組,本質上是餘弦調變濾波器組 (Cosine-Modulated Filter Bank) 的一種。每個子帶根據心理聲學模型 (Psychoacoustic Model) 分配不同的量化位元
- JPEG 2000 影像壓縮:使用 CDF 9/7 或 Le Gall 5/3 雙正交小波濾波器組,對影像做多級 2D 子帶分解。比 JPEG 的 DCT 更適合處理不同解析度的影像細節
- 回聲消除 (AEC):子帶自適應濾波器在每個頻帶獨立收斂,比全頻帶演算法收斂更快,計算量更低
陷阱與限制
- 經典 QMF 無法真正 PR:Esteban-Galand 的原始 QMF 只能消除混疊,但殘留振幅失真。要真正 PR 必須使用 CQF/PR-QMF 設計
- 線性相位 vs PR 的矛盾:正交 (Orthogonal) 濾波器組(如 Daubechies)可以 PR 但不是線性相位。雙正交 (Biorthogonal) 濾波器組可以兩者兼得,但分析和合成濾波器不同
- 頻帶間的洩漏:理想的 brick-wall 分頻不可能用有限長度濾波器實現。過渡帶必然有洩漏,影響子帶獨立處理的效果
- 延遲:PR 濾波器組引入的延遲 $d$ 等於分析+合成濾波器的總長度減一。在即時通訊中,這個延遲可能超過可接受的範圍
Quick Check
Q1:為什麼 $H_1(z) = H_0(-z)$ 可以把低通變成高通?從頻域解釋。
查看解答
$H_0(-z)$ 等價於在 $H_0(e^{j\omega})$ 中將 $\omega$ 替換為 $\omega + \pi$: $$H_1(e^{j\omega}) = H_0(e^{j(\omega+\pi)})$$ 這把頻率軸平移了 $\pi$:原本在 $\omega = 0$ 的通帶(低頻)移到了 $\omega = \pi$(高頻),原本在 $\omega = \pi$ 的止帶移到了 $\omega = 0$。所以低通變成了高通,且頻率響應互為鏡像,這就是「Quadrature Mirror」的含義。
Q2:Mallat 演算法每多一層分解,低頻子帶的取樣率和頻寬各變為多少?
查看解答
每一層分解都是 $\downarrow 2$,所以每多一層:取樣率減半,頻寬也減半。
第 $j$ 層的低頻子帶:取樣率 = $f_s/2^j$,頻寬 = $[0, f_s/2^{j+1}]$。
例如 $f_s = 8$ kHz 做 3 層分解:
Level 1 低頻帶:$f_s/2 = 4$ kHz,頻寬 $[0, 2\text{ kHz}]$
Level 2 低頻帶:$f_s/4 = 2$ kHz,頻寬 $[0, 1\text{ kHz}]$
Level 3 低頻帶:$f_s/8 = 1$ kHz,頻寬 $[0, 0.5\text{ kHz}]$
References: [1] Esteban, D. & Galand, C., Application of Quadrature Mirror Filters to Split Band Voice Coding Schemes, ICASSP, 1977. [2] Smith, M.J.T. & Barnwell, T.P., Exact Reconstruction Techniques for Tree-Structured Subband Coders, IEEE Trans. ASSP, 1986. [3] Mallat, S., A Theory for Multiresolution Signal Decomposition, IEEE Trans. PAMI, 1989. [4] Vaidyanathan, P.P., Multirate Systems and Filter Banks, Ch.5-6, 1993. [5] Strang, G. & Nguyen, T., Wavelets and Filter Banks, Wellesley-Cambridge, 1996.
5.4 Sigma-Delta ADC (Oversampling & Noise Shaping)
用 1-bit 量化器 + 超取樣 + 噪聲整形 = 24-bit 解析度的魔法
Learning Objectives
- 理解超取樣 (Oversampling) 如何將量化噪聲攤薄,提升信號帶內 SNR
- 掌握噪聲整形 (Noise Shaping) 的回授原理與噪聲轉移函數 (NTF)
- 計算不同階數調變器的 SNR 提升量
- 理解 Sigma-Delta ADC 的完整系統:調變器 → 數位低通 → 降取樣
一句話總結
Sigma-Delta ($\Sigma\Delta$) ADC 用世界上最粗糙的量化器(1-bit 比較器)以極高的速度取樣,再用回授迴路把量化噪聲「推」到訊號頻帶之外,最後用數位濾波器 + 降取樣得到高解析度(16-24 bit)的輸出。它把「精度」的問題轉化為「速度」的問題。
為什麼要學?
Inose, Yasuda & Murakami (1962) 在日本東京大學首次提出了 Delta-Sigma 調變(最初稱為 Delta Modulation 的改進版)。James Candy (1974) 在 Bell Labs 進一步發展了超取樣 ADC 的理論基礎。然而,Sigma-Delta ADC 真正爆發要等到 1990 年代 VLSI 製程成熟之後——因為它只需要一個比較器(1-bit 量化器)和一些數位邏輯,幾乎完全用數位電路實現,完美契合 CMOS 製程的縮放趨勢。
今天,幾乎所有消費電子的音訊 ADC/DAC 都是 Sigma-Delta 架構——你的手機、耳機、音效卡裡都有。理解它如何用 1-bit + 超取樣 + 噪聲整形達到 24-bit 解析度,是數位訊號處理中最優雅的「以速度換精度」的範例。
前情提要
- 量化噪聲 (Quantization Noise):$B$-bit 均勻量化器的信噪比 (SQNR) = $6.02B + 1.76$ dB。1-bit 量化器 → SQNR $\approx 7.78$ dB(極差)
- 功率譜密度 (PSD):量化噪聲在加性白噪聲模型下均勻分佈在 $[0, f_s/2]$,PSD = $\Delta^2/(12 f_s)$
- 降取樣 + 低通濾波(M5A 升降取樣):先濾波把帶外噪聲去掉,再降取樣到目標速率
痛點:高解析度 ADC 的代價
傳統的 Nyquist-rate ADC(如 SAR、Pipeline)要達到高解析度面臨嚴峻挑戰:
- 16-bit ADC:需要比較器能分辨 $V_{\text{ref}}/65536$ 的電壓差。對於 3.3V 參考,這是 $50\,\mu\text{V}$——比晶片上的熱噪聲還小!
- 電阻/電容匹配:Pipeline ADC 需要 0.001% 的元件匹配精度,良率低、成本高
- 功耗:高速高精度 ADC 的功耗可達數瓦,不適合行動裝置
根本矛盾:CMOS 製程擅長做「快但粗」的數位電路,不擅長做「慢但精」的類比電路。有沒有辦法用「快但粗」的 1-bit 量化器達到「慢但精」的效果?
由來
Sigma-Delta 的演化路線:
- Delta Modulation (1946, Deloraine):用 1-bit 量化器編碼訊號的「差分」。問題:斜率過載 (Slope Overload) 和粒狀噪聲 (Granular Noise)
- Delta-Sigma Modulation (1962, Inose et al.):在 Delta Modulation 前加一個積分器。積分器使得量化噪聲被微分(高通化),大幅降低帶內噪聲
- 高階調變器 (1980s-90s):用多個積分器級聯,每增加一階,噪聲被推得更遠。但穩定性成為關鍵挑戰
命名爭議:原始論文叫「Delta-Sigma」($\Delta\Sigma$),因為先做差分(Delta)再積分(Sigma)。但業界普遍稱為「Sigma-Delta」($\Sigma\Delta$),因為在方塊圖中積分器在前。兩個名稱指的是同一個東西。
原理
第一步:超取樣 (Oversampling)
直覺:想像你在一面牆上均勻灑一把沙子(量化噪聲)。沙子總量固定,但如果你把牆變大 $R$ 倍(頻寬擴展),每平方公分的沙子就少了 $R$ 倍。你只要看牆的中間一小部分(訊號頻帶),沙子(噪聲)就少了很多。
超取樣的 SNR 提升
$$\text{SNR}_{\text{oversampled}} = \text{SQNR} + 10\log_{10}(R) \quad \text{dB}$$$R = f_s / (2f_b)$ 為超取樣比 (Oversampling Ratio, OSR),$f_b$ 為訊號頻寬
每增加 $2\times$ 超取樣,帶內噪聲降低 3 dB → 等效增加 0.5 bit 解析度。效率很低!256 倍超取樣只多了 4 bit。
第二步:噪聲整形 (Noise Shaping)
直覺:如果不只是把沙子撒得更均勻,而是用掃把把中間的沙子掃到邊緣呢?中間(訊號頻帶)幾乎乾淨,邊緣(高頻帶外)堆滿了沙子——反正你等一下要用低通濾波器把邊緣切掉。
1 階 Sigma-Delta 調變器的結構:
線性化模型(將量化器視為 $+$ 量化噪聲 $e[n]$):
1 階 Sigma-Delta 輸出
$$Y(z) = \underbrace{z^{-1}}_{\text{STF}} X(z) + \underbrace{(1 - z^{-1})}_{\text{NTF}} E(z)$$STF = Signal Transfer Function(訊號延遲一個樣本),NTF = Noise Transfer Function(噪聲被高通化)
NTF 的頻率響應:
在 $\omega = 0$(DC,低頻)為零,在 $\omega = \pi$(Nyquist)為 2 → 噪聲被推向高頻
$L$ 階噪聲整形
用 $L$ 個積分器級聯($L$ 階調變器):
$L$ 階 NTF
$$NTF_L(z) = (1 - z^{-1})^L$$$L$ 階微分 → 噪聲在低頻被壓制得更厲害
$L$ 階 + $R$ 倍超取樣的 SNR
$$\text{SNR} \approx 6.02B + 1.76 + (2L+1) \cdot 10\log_{10}(R) - 10\log_{10}\!\left(\frac{\pi^{2L}}{2L+1}\right) \;\text{dB}$$對 1-bit ($B=1$):每 $2\times$ 超取樣提升 $(2L+1) \times 3$ dB
關鍵比較:
純超取樣:$2\times$ OSR → +3 dB (+0.5 bit)
1 階整形:$2\times$ OSR → +9 dB (+1.5 bit)
2 階整形:$2\times$ OSR → +15 dB (+2.5 bit)
4 階整形:$2\times$ OSR → +27 dB (+4.5 bit)
4 階 + 256x OSR → $\approx 27 \times 8 = 216$ dB 理論 → 實際約 120 dB (20 bit)
第三步:數位濾波 + 降取樣
調變器輸出的 1-bit 高速位元流,經過:
- 數位低通濾波器(截止 $f_b$)→ 去除被整形到高頻的量化噪聲
- 降取樣(因子 $R$)→ 回到目標取樣率 $2f_b$
- 得到高解析度(16-24 bit)的輸出
這個「數位濾波 + 降取樣」通常用 CIC (Cascaded Integrator-Comb) 濾波器 + 半帶濾波器的多級架構實現,正好用到 5.1-5.2 節的所有技術!
展開:1 階 Sigma-Delta 調變器轉移函數推導
設積分器的轉移函數為 $\frac{z^{-1}}{1-z^{-1}}$(離散積分器),量化器輸出 $y[n]$ 寫成 $y[n] = u[n] + e[n]$,其中 $u[n]$ 是量化器輸入,$e[n]$ 是量化誤差。
迴路方程式(Z 域):
$$U(z) = \frac{z^{-1}}{1-z^{-1}}\bigl[X(z) - Y(z)\bigr]$$ $$Y(z) = U(z) + E(z)$$將第一式代入第二式:
$$Y(z) = \frac{z^{-1}}{1-z^{-1}}[X(z) - Y(z)] + E(z)$$ $$Y(z)\left[1 + \frac{z^{-1}}{1-z^{-1}}\right] = \frac{z^{-1}}{1-z^{-1}}X(z) + E(z)$$ $$Y(z) \cdot \frac{1}{1-z^{-1}} = \frac{z^{-1}}{1-z^{-1}}X(z) + E(z)$$ $$Y(z) = z^{-1}X(z) + (1-z^{-1})E(z)$$因此 STF = $z^{-1}$(訊號只延遲一個樣本,無失真),NTF = $(1-z^{-1})$(量化噪聲被一階高通整形)。
帶內噪聲功率:
$$\sigma_{\text{in-band}}^2 = \frac{\sigma_e^2}{f_s}\int_0^{2\pi f_b} |1-e^{-j2\pi f/f_s}|^2 df \approx \sigma_e^2 \cdot \frac{\pi^2}{3R^3}$$其中 $R = f_s/(2f_b)$ 為 OSR。對比無整形時 $\sigma_e^2/R$,1 階整形額外降低了 $\pi^2/(3R^2)$ 倍。
怎麼用:Sigma-Delta ADC 設計計算
範例:音訊 ADC(20 kHz 頻寬,目標 16-bit)
- 目標 SNR:16 bit → $6.02 \times 16 + 1.76 = 98.1$ dB
- 選擇架構:3 階調變器 + 128 倍超取樣
- 1-bit SQNR = 7.78 dB
- OSR 增益 = $(2 \times 3 + 1) \times 10\log_{10}(128) = 7 \times 21.1 = 147.5$ dB
- 噪聲整形修正 = $-10\log_{10}(\pi^6/7) \approx -12.7$ dB
- 理論 SNR $\approx 7.78 + 147.5 - 12.7 = 142.6$ dB (23.4 bit)
- 考慮非理想因素(運放非理想、時鐘抖動、DAC 非線性)衰減 20-30 dB → 實際約 112-122 dB (18-20 bit) ✓
- 取樣頻率:$f_s = 2 \times 20{,}000 \times 128 = 5.12$ MHz。1-bit 比較器在此速度下輕鬆實現
- 數位濾波器:CIC 4 階 ($R = 16$) → 半帶 FIR ($\downarrow 2$, 3 級) → FIR 補償 → 最終 $128 \times$ 降取樣到 40 kHz
具體數值一覽
| 配置 | 理論 SNR | 等效位元 | 備註 |
|---|---|---|---|
| 1-bit, 無超取樣 | 7.78 dB | 1.0 bit | 比較器裸奔 |
| 1-bit, 256x OSR, 無整形 | $7.78 + 24.1 = 31.9$ dB | ~5 bit | 靠超取樣只能做到這樣 |
| 1-bit, 256x OSR, 1 階 | ~79 dB | ~13 bit | 噪聲整形的威力開始顯現 |
| 1-bit, 256x OSR, 2 階 | ~127 dB | ~21 bit | 理論上很高 |
| 1-bit, 256x OSR, 4 階 | ~224 dB | ~37 bit(理論) | 實際受限於非理想因素,~120 dB (20 bit) |
互動:超取樣與噪聲整形的效果
調整超取樣比和噪聲整形階數,觀察量化噪聲的功率譜密度如何變化,以及等效 SNR 和位元數。
應用場景
- 音訊 ADC/DAC:從手機到錄音室,幾乎全部採用 Sigma-Delta。AKM AK5397 (32-bit/768kHz) 和 ESS ES9038PRO 是高階代表
- 精密量測 (Precision Measurement):24-bit Sigma-Delta ADC(如 ADS1256)用於秤重、溫度量測、應變規。超高解析度 + 低速 = Sigma-Delta 的最佳戰場
- 感測器介面:MEMS 加速度計、陀螺儀內部大量使用 Sigma-Delta 將微小的電容變化轉為數位值
- 數位無線電接收機:寬帶 Sigma-Delta ADC + 數位下轉換可以直接數位化 RF 頻段(Bandpass $\Sigma\Delta$)
- Class-D 音頻放大器:本質上是 Sigma-Delta DAC——用 PWM 開關驅動喇叭,噪聲整形確保可聽範圍內的失真極低
陷阱與限制
- 高階調變器的穩定性:3 階以上的單迴路調變器可能不穩定(量化器非線性打破了線性分析的假設)。解決方案:MASH (Multi-stAge noise SHaping) 結構或 feedforward 架構
- 延遲:數位降取樣濾波器(尤其是 CIC + FIR 多級)引入顯著延遲。對即時控制應用可能不可接受
- 頻寬限制:要達到高 OSR,取樣頻率必須很高。20 kHz 音訊 × 256 = 5.12 MHz 還好,但寬帶通訊(幾十 MHz)就需要超高速比較器
- 音調 (Tones):低階 Sigma-Delta 在 DC 或低頻輸入時會產生周期性模式(idle tones),聽起來像嗡鳴。需要用抖動 (Dither) 或高階調變器來消除
- DAC 非線性(多位元 Sigma-Delta):回授 DAC 的非線性直接注入到訊號路徑。多位元內部量化器可提升性能但 DAC 線性度要求嚴苛。解決方案:DEM (Dynamic Element Matching)
Quick Check
Q1:一個 2 階 Sigma-Delta 調變器使用 64 倍超取樣。每增加 $2\times$ 超取樣,SNR 提升多少 dB?等效增加多少 bit?
查看解答
$L = 2$ 階,SNR 提升 = $(2L+1) \times 3 = 5 \times 3 = 15$ dB per octave of OSR。
等效位元增加 = $15/6.02 \approx 2.5$ bit per $2\times$ OSR。
所以 64x OSR ($= 2^6$):從基準 SQNR 開始增加 $6 \times 15 = 90$ dB ($\approx 15$ bit),加上 1-bit 基底和整形修正,理論可達約 85 dB ($\approx 14$ bit)。
Q2:為什麼 Sigma-Delta ADC 的「數位濾波器 + 降取樣」部分正好用到前面學的多速率技術(Polyphase、CIC)?
查看解答
調變器輸出的是一個極高速率(如 5.12 MHz)的 1-bit 位元流。要把它變成低速率(如 40 kHz)的多位元輸出,需要降取樣 128 倍。
直接用一個 FIR 在 5.12 MHz 下濾波再降取樣 128 倍 = 99.2% 的計算被浪費。所以實務上使用:
- CIC 濾波器:不需要乘法器,只用加法器和延遲,天然適合高速率第一級降取樣
- Polyphase 半帶濾波器:後續各級 $\downarrow 2$,每級用 Polyphase 結構避免浪費
這正是 5.1-5.2 節所學技術的最佳實戰應用場景。
References: [1] Inose, H., Yasuda, Y. & Murakami, J., A Telemetering System by Code Modulation: Delta-Sigma Modulation, IRE Trans., 1962. [2] Candy, J.C., A Use of Limit Cycle Oscillations to Obtain Robust Analog-to-Digital Converters, IEEE Trans., 1974. [3] Norsworthy, S.R., Schreier, R. & Temes, G.C., Delta-Sigma Data Converters: Theory, Design, and Simulation, IEEE Press, 1997. [4] Schreier, R. & Temes, G.C., Understanding Delta-Sigma Data Converters, 2nd ed., IEEE/Wiley, 2017. [5] Aziz, P.M., Sorensen, H.V. & van der Spiegel, J., An Overview of Sigma-Delta Converters, IEEE SP Magazine, 1996.
8A 隨機過程與廣義平穩 (Random Processes & Wide-Sense Stationarity)
真實訊號都有隨機性 — 連結統計與頻譜的橋樑
Learning Objectives
- 理解隨機過程 (Random Process) 的定義:以時間為索引的隨機變數集合
- 區分嚴格平穩 (SSS) 與廣義平穩 (WSS) 的定義與實用性
- 掌握自相關函數 (Autocorrelation) $R_{xx}[m]$ 的性質與物理意義
- 推導並應用 Wiener-Khinchin 定理:$S_{xx}(e^{j\omega}) = \text{DTFT}\{R_{xx}[m]\}$
- 理解白雜訊與彩色雜訊的頻譜特性
一句話總結
隨機過程把「隨機性」和「時間」結合在一起,而 Wiener-Khinchin 定理告訴我們:自相關函數的傅立葉轉換就是功率頻譜密度 (Power Spectral Density, PSD)——這座橋讓我們能用頻域工具分析隨機訊號。
為什麼要學這個? 因為真實世界中沒有「乾淨」的訊號。每個感測器讀數都夾帶雜訊 (Noise)、干擾 (Interference)、通道衰落 (Fading)。到目前為止我們學的 DFT、STFT、小波都假設訊號是確定性 (Deterministic) 的——但面對隨機訊號,你需要統計工具來描述「平均行為」。這是進入 Wiener 濾波、Kalman 濾波、自適應濾波的必要基礎。
前情提要:5.7 的 Synchrosqueezing 讓我們看到精細的時頻結構,但前提是訊號本身是確定性的。現在我們進入隨機訊號分析的領域——不再問「這個訊號長什麼樣?」而是問「這類訊號的統計特性是什麼?」這需要全新的數學框架。
痛點:確定性分析不夠用
假設你在量測一個引擎振動訊號。每次開機量到的波形都不一樣(因為環境雜訊、初始條件等隨機因素),但它們的「統計特性」(平均功率、頻譜形狀)是穩定的:
- 通訊:接收到的訊號 = 原始訊號 + 通道雜訊。你無法預測每一個雜訊樣本,但你可以描述雜訊的統計特性(高斯白雜訊、功率 $\sigma^2$)
- 雷達:目標回波被雜波 (Clutter) 和熱雜訊淹沒。偵測理論需要知道雜訊的功率頻譜密度
- 金融:股價走勢不可預測(隨機遊走),但波動率 (Volatility) 有統計規律
- 生醫:腦電圖 (EEG) 的 alpha 波功率是跨多次量測的統計量,單次量測不可靠
核心問題:對隨機訊號做 FFT 得到的頻譜「每次都不一樣」,沒有收斂到固定函數。我們需要一種方法把隨機訊號的頻域特性用統計平均來定義。
由來
Norbert Wiener (1930) 在其開創性著作 Generalized Harmonic Analysis 中提出:對於功率有限但能量無限的訊號(如隨機訊號),傳統的傅立葉轉換不存在,但自相關函數的傅立葉轉換(即功率頻譜密度)是有意義的。
Alexander Khinchin (1934) 獨立地從機率論的角度證明了同樣的結果:平穩隨機過程的自相關函數與功率頻譜密度構成傅立葉轉換對。這就是Wiener-Khinchin 定理——連接時域統計量(相關函數)和頻域表示(PSD)的核心橋樑。
Wiener 後來更進一步,用 PSD 的概念推導出最佳線性濾波器(Wiener Filter, 見 8B),開啟了統計訊號處理的時代。
原理
直覺:想像一個工廠有 100 條相同的生產線,每條線上的振動感測器都在同時錄資料。每條線的波形都不一樣(因為隨機性),但它們的「平均波形」和「平均功率」是穩定的。隨機過程就是把這 100 條「可能的波形」(稱為 realization 或 sample function)打包成一個數學物件。
隨機過程 (Random Process) 定義
隨機過程 $\{x[n]\}$ 是一組以時間 $n$ 為索引的隨機變數。對於每一個 $n$,$x[n]$ 是一個隨機變數;對於每一次「實驗」(realization),$x[n]$ 是一個確定的時間序列(sample function)。
集合平均 vs 時間平均 (Ensemble vs Time Average)
| 平均方式 | 定義 | 適用情境 |
|---|---|---|
| 集合平均 (Ensemble) | $E[x[n]] = \int x \cdot f_X(x;n)\, dx$ 固定 $n$,對所有 realizations 平均 | 理論分析(需要多次實驗) |
| 時間平均 (Time) | $\langle x[n] \rangle = \lim_{N\to\infty}\frac{1}{2N+1}\sum_{n=-N}^{N} x[n]$ 固定一次 realization,對所有時間平均 | 實務(通常只有一次量測) |
遍歷性 (Ergodicity):若隨機過程是遍歷的,集合平均 = 時間平均。這是實務中極重要的假設——因為我們通常只有一段錄音(一次 realization),但要用它來估計統計量。
平穩性 (Stationarity)
嚴格平穩 (Strict-Sense Stationary, SSS):所有有限維聯合 PDF 對時間平移不變:
這個條件太強了——要驗證「所有」聯合 PDF 在實務上是不可能的。
廣義平穩 (Wide-Sense Stationary, WSS):只要求前兩階統計量不隨時間變化:
WSS 兩個條件
$$\text{(1)}\quad E[x[n]] = \mu_x \quad \text{(均值為常數,不隨 $n$ 改變)}$$ $$\text{(2)}\quad R_{xx}[n, n-m] = R_{xx}[m] \quad \text{(自相關只依賴延遲 $m$,不依賴絕對時間 $n$)}$$WSS 是工程實務的標準假設。大多數穩態運轉的機器振動、穩態通訊通道、長時間的環境雜訊,都可以合理地視為 WSS。
自相關函數 (Autocorrelation Function) 的性質
- $R_{xx}[0] = E[|x[n]|^2]$ = 平均功率
- $R_{xx}[0] \geq |R_{xx}[m]|$ 對所有 $m$(最大值在原點)
- $R_{xx}[-m] = R_{xx}^*[m]$(共軛對稱)
- $R_{xx}[m]$ 是半正定函數(保證 PSD 非負)
互相關函數 (Cross-Correlation):
Wiener-Khinchin 定理
這是本章最重要的結果——連接時域統計量和頻域表示的橋樑:
Wiener-Khinchin Theorem
$$S_{xx}(e^{j\omega}) = \text{DTFT}\{R_{xx}[m]\} = \sum_{m=-\infty}^{\infty} R_{xx}[m]\, e^{-j\omega m}$$$S_{xx}(e^{j\omega})$ = 功率頻譜密度 (Power Spectral Density, PSD)
PSD 的關鍵性質:
- $S_{xx}(e^{j\omega}) \geq 0$(永遠非負、實數)——因為它代表「功率的頻率分佈」
- $\frac{1}{2\pi}\int_{-\pi}^{\pi} S_{xx}(e^{j\omega})\, d\omega = R_{xx}[0]$ =平均功率
- $S_{xx}(e^{j\omega}) = S_{xx}(e^{-j\omega})$(對於實訊號,PSD 是偶函數)
展開:Wiener-Khinchin 定理的推導思路
對有限功率的隨機訊號,直接做 DTFT 不收斂(因為能量無限)。我們改用截斷版本:
$$X_N(e^{j\omega}) = \sum_{n=0}^{N-1} x[n]\, e^{-j\omega n}$$定義週期圖 (Periodogram):
$$I_N(\omega) = \frac{1}{N}|X_N(e^{j\omega})|^2$$取期望值:
$$E[I_N(\omega)] = \frac{1}{N}\sum_{n=0}^{N-1}\sum_{k=0}^{N-1} E[x[n]x^*[k]]\, e^{-j\omega(n-k)}$$令 $m = n - k$,利用 WSS 條件 $E[x[n]x^*[k]] = R_{xx}[n-k]$:
$$= \sum_{m=-(N-1)}^{N-1}\left(1 - \frac{|m|}{N}\right) R_{xx}[m]\, e^{-j\omega m}$$當 $N \to \infty$:
$$\lim_{N\to\infty} E[I_N(\omega)] = \sum_{m=-\infty}^{\infty} R_{xx}[m]\, e^{-j\omega m} = S_{xx}(e^{j\omega}) \quad \blacksquare$$注意:這說明週期圖的期望值收斂到 PSD,但單次週期圖本身的變異數不會隨 $N$ 減小(這就是為什麼需要 Welch 或 Multitaper 方法來做 PSD 估計——回顧 3.2 節)。
白雜訊 (White Noise)
自相關只在 $m = 0$ 處非零 → 各時刻的樣本之間完全不相關。DTFT 是常數 → 所有頻率的功率相等(「白」的由來,類比白光包含所有顏色)。
彩色雜訊 (Colored Noise):濾波後的白雜訊
若白雜訊 $w[n]$ 通過 LTI 系統 $H(z)$ → 輸出 $y[n]$:
白雜訊的「平坦」頻譜被 $|H|^2$ 塑形 → 變成有特定頻譜形狀的「彩色」雜訊。例如 AR(1) 濾波器 $H(z) = 1/(1 - az^{-1})$ 產生低頻偏重的粉紅色雜訊。
怎麼用:數值範例
Step 1:定義隨機過程
考慮 AR(1) 過程:$x[n] = 0.9\, x[n-1] + w[n]$,其中 $w[n]$ 是 $\sigma^2 = 1$ 的白雜訊。
Step 2:計算理論自相關
AR(1) 的自相關有閉合解:
Step 3:計算理論 PSD
$H(z) = 1/(1 - 0.9z^{-1})$,所以:
低頻處 $S_{xx}(1) = 1/(1.81 - 1.8) = 100$(= 20 dB),高頻處 $S_{xx}(-1) = 1/(1.81 + 1.8) \approx 0.277$(= -5.6 dB)。這是一個低通型的 PSD。
Step 4:用實際數據估計
生成 $N = 1024$ 點的 AR(1) 數據,用 Welch 法估計 PSD,與理論值比較。平均次數越多,估計越準確。
實務關鍵:估計 PSD 時,必須在頻率解析度和估計變異數之間取捨。段長越長 → 頻率解析度越好,但可平均的段數越少 → 估計越不穩定(回顧 3.2 Welch 法)。
互動:隨機過程的統計量估計
觀察:增加 realizations 數量時,估計的自相關與 PSD 如何逐漸逼近理論值。
應用場景
- 通訊系統設計:通道雜訊建模為 WSS 過程,PSD 決定了接收機靈敏度和調變方式的選擇。AWGN (Additive White Gaussian Noise) 通道是最基本的模型
- 雷達信號處理:雜波 (Clutter) 的 PSD 形狀決定了 MTI (Moving Target Indication) 濾波器的設計。高斯型雜波 PSD → 需要多脈衝對消器
- 振動監測:機器穩態運轉時的振動可視為 WSS 過程。PSD 的峰值頻率對應轉速和故障特徵頻率
- 金融時間序列:股價收益率的自相關結構(如 GARCH 模型)決定了波動率預測和風險管理策略
- 語音編碼:線性預測編碼 (LPC) 將語音建模為 AR 過程,自相關矩陣的 Levinson-Durbin 遞迴求解是核心演算法
陷阱與限制
- WSS 假設不一定成立:非穩態過程(如引擎加速、語音中的過渡音段)違反 WSS。此時需要短時分析(假設短時間內近似 WSS)或用時變模型
- 遍歷性不能假設:並非所有 WSS 過程都是遍歷的。例如 $x[n] = A\cos(\omega_0 n)$($A$ 是隨機變數)是 WSS 但不遍歷——時間平均永遠是零,集合平均也是零,但自相關的時間估計和集合估計可能不同
- 有限數據的估計偏差:自相關在大延遲 $|m|$ 處的估計值不可靠(只有 $N - |m|$ 個乘積項用來平均)。經驗法則:只信任 $|m| < N/10$ 的估計值
- 週期圖不是好的 PSD 估計:單次週期圖的變異數不隨 $N$ 減小(不一致估計)。必須用 Welch 法、Multitaper 或參數法(見 3.1–3.3 節)
- 互相關 ≠ 因果關係:$R_{xy}[m] \neq 0$ 只表示線性統計相關,不代表 $x$ 導致 $y$
Quick Check
Q1: 白雜訊的自相關函數 $R_{ww}[m] = \sigma^2 \delta[m]$,其 PSD 是什麼?為什麼叫「白」雜訊?
顯示答案
$S_{ww}(e^{j\omega}) = \sigma^2$,是一個常數——所有頻率的功率相等。這就像白光包含所有可見光頻率一樣,所以稱為「白」雜訊。數學上,$\delta[m]$ 的 DTFT 是常數 1,乘以 $\sigma^2$ 即得。
Q2: 某 WSS 過程的 PSD 在 $\omega = 0$ 處有一個很大的峰值,在 $\omega = \pi$ 附近接近零。這告訴你什麼?如何用濾波器的語言來描述它?
顯示答案
這是一個低頻成分為主的過程(如 1/f 雜訊或 AR(1) 正相關過程)。它等價於白雜訊通過一個低通濾波器 $H(z)$ 的輸出:$S_{xx} = |H|^2 \sigma^2$。相鄰樣本之間有正相關($R_{xx}[1] > 0$),訊號變化較為平緩。
References: [1] Wiener, N., Generalized Harmonic Analysis, Acta Math., 55:117-258, 1930. [2] Khinchin, A., Korrelationstheorie der stationaren stochastischen Prozesse, Math. Ann., 109:604-615, 1934. [3] Oppenheim & Schafer, Discrete-Time Signal Processing, 3rd ed., Ch.11. [4] Haykin, S., Adaptive Filter Theory, 5th ed., Ch.2. [5] Papoulis, A. & Pillai, S.U., Probability, Random Variables and Stochastic Processes, 4th ed., Ch.9-12.
8B Wiener 濾波 (Wiener Filter)
已知統計特性時的最佳線性估計 — 最小均方誤差濾波
Learning Objectives
- 理解 Wiener 濾波的問題設定:從含噪觀測中最佳估計目標訊號
- 推導 Wiener-Hopf 方程:$\mathbf{R}_{xx}\, \mathbf{h}_{\text{opt}} = \mathbf{r}_{xd}$
- 理解頻域 Wiener 濾波器:$H_{\text{opt}}(e^{j\omega}) = S_{xd}(e^{j\omega}) / S_{xx}(e^{j\omega})$
- 分析訊號+不相關雜訊的特殊情形及其直觀意義
- 理解 Wiener 濾波與 LMS 自適應濾波(M4E 自適應濾波)的關係
一句話總結
Wiener 濾波器是已知訊號與雜訊統計特性時的最佳線性濾波器——它根據每個頻率的 SNR 自動決定「放行還是壓制」,在 SNR 高的頻帶讓訊號通過,在 SNR 低的頻帶把雜訊壓下去。
為什麼要學這個? 因為 Wiener 濾波器是所有「最佳線性濾波」理論的起點。LMS 自適應濾波器的目標就是逼近 Wiener 解;Kalman 濾波器是 Wiener 濾波器的非穩態推廣;語音增強、影像去噪、通訊等化器的經典方案都源自這個框架。理解 Wiener 濾波 = 理解統計訊號處理的基石。
前情提要:8A 建立了 WSS 隨機過程的框架——自相關 $R_{xx}[m]$、功率頻譜密度 $S_{xx}(e^{j\omega})$、Wiener-Khinchin 定理。現在我們要用這些工具回答一個核心問題:如何從含噪觀測中「最好地」還原原始訊號?
痛點:簡單濾波器不夠聰明
你收到一個含噪訊號 $x[n] = d[n] + v[n]$($d[n]$ 是想要的訊號,$v[n]$ 是雜訊)。直覺上你會用低通濾波器去噪,但:
- 截止頻率怎麼選?如果訊號和雜訊的頻帶重疊(這幾乎總是會發生的),任何固定截止頻率都會「傷到」訊號或「漏掉」雜訊
- 語音去噪:語音的頻帶 (100 Hz – 4 kHz) 和白雜訊完全重疊。低通濾波會把高頻子音 (/s/, /f/) 一起砍掉
- 想法:理想的濾波器應該是頻率相依的——在訊號強的頻帶完全通過、在雜訊強的頻帶完全壓制、在兩者混合的頻帶做最佳折衷
核心問題:給定訊號和雜訊的統計特性(PSD),能否系統性地求出「最佳」濾波器,使得估計誤差的功率最小?
由來
Norbert Wiener (1942/1949):在二戰期間為了預測敵機飛行軌跡(用於防空砲瞄準)而發展了最佳線性預測與濾波理論。他的分類報告在戰後以 Extrapolation, Interpolation, and Smoothing of Stationary Time Series 為名出版(因封面是黃色的,暱稱 "The Yellow Peril"——因為太難讀了)。
Andrey Kolmogorov (1941):在蘇聯獨立推導出了本質上相同的結果,用於平穩時間序列的預測。因此有時也稱為 Kolmogorov-Wiener 濾波。
Wiener-Hopf 方程得名於 Wiener 與 Eberhard Hopf 在 1931 年合作研究的一類積分方程。Wiener 濾波問題恰好歸結為這類方程。
原理
直覺:想像你在嘈雜的餐廳裡聽朋友說話。你的大腦在做什麼?在朋友聲音清晰的頻帶(如某些母音共振峰),你幾乎完全聽取;在背景噪音佔主導的頻帶(如低頻轟鳴),你自動忽略。Wiener 濾波器做的就是這件事——但是用數學最佳化的方式。
問題設定
- 觀測:$x[n]$(含噪訊號)
- 目標:$d[n]$(想要估計的訊號)
- 濾波器輸出:$\hat{d}[n] = \sum_{k} h[k]\, x[n-k] = h * x$
- 誤差:$e[n] = d[n] - \hat{d}[n]$
- 目標:最小化均方誤差 $J = E[|e[n]|^2]$
推導:Wiener-Hopf 方程
對 $J$ 求梯度並令其為零:
最佳性條件(正交原理)
$$\frac{\partial E[|e[n]|^2]}{\partial h^*[k]} = 0 \quad \forall k$$ $$\Longrightarrow \quad E[e[n]\, x^*[n-k]] = 0 \quad \forall k$$最佳誤差與所有觀測正交(Orthogonality Principle)
展開:從正交原理到 Wiener-Hopf 方程的完整推導
展開 $e[n] = d[n] - \hat{d}[n] = d[n] - \sum_l h[l] x[n-l]$,代入正交條件:
$$E\Big[\Big(d[n] - \sum_l h[l] x[n-l]\Big) x^*[n-k]\Big] = 0$$ $$E[d[n] x^*[n-k]] = \sum_l h[l]\, E[x[n-l] x^*[n-k]]$$利用 WSS 定義,$E[x[n-l] x^*[n-k]] = R_{xx}[k-l]$ 且 $E[d[n] x^*[n-k]] = R_{dx}[k]$:
$$R_{dx}[k] = \sum_l h_{\text{opt}}[l]\, R_{xx}[k-l] = (h_{\text{opt}} * R_{xx})[k]$$這就是卷積形式的 Wiener-Hopf 方程。
矩陣形式(FIR 濾波器,$M$ 階):
$$\underbrace{\begin{bmatrix} R_{xx}[0] & R_{xx}[1] & \cdots & R_{xx}[M-1] \\ R_{xx}[1] & R_{xx}[0] & \cdots & R_{xx}[M-2] \\ \vdots & & \ddots & \vdots \\ R_{xx}[M-1] & & \cdots & R_{xx}[0] \end{bmatrix}}_{\mathbf{R}_{xx}\ (\text{Toeplitz})} \underbrace{\begin{bmatrix} h[0] \\ h[1] \\ \vdots \\ h[M-1] \end{bmatrix}}_{\mathbf{h}_{\text{opt}}} = \underbrace{\begin{bmatrix} R_{dx}[0] \\ R_{dx}[1] \\ \vdots \\ R_{dx}[M-1] \end{bmatrix}}_{\mathbf{r}_{dx}}$$$\mathbf{R}_{xx}$ 是 Toeplitz 矩陣 → 可用 Levinson-Durbin 演算法在 $O(M^2)$ 求解(而非一般矩陣求逆的 $O(M^3)$)。
頻域形式:對卷積方程取 DTFT:
$$S_{dx}(e^{j\omega}) = H_{\text{opt}}(e^{j\omega}) \cdot S_{xx}(e^{j\omega})$$ $$\boxed{H_{\text{opt}}(e^{j\omega}) = \frac{S_{dx}(e^{j\omega})}{S_{xx}(e^{j\omega})}} \quad \blacksquare$$Wiener-Hopf 方程
$$\text{矩陣形式:}\quad \mathbf{R}_{xx}\, \mathbf{h}_{\text{opt}} = \mathbf{r}_{dx}$$ $$\text{頻域形式:}\quad H_{\text{opt}}(e^{j\omega}) = \frac{S_{xd}(e^{j\omega})}{S_{xx}(e^{j\omega})}$$特殊情形:訊號 + 不相關雜訊
若 $x[n] = d[n] + v[n]$,且 $d$ 和 $v$ 不相關($R_{dv}[m] = 0$),則:
- $S_{xx} = S_{dd} + S_{vv}$(功率相加)
- $S_{xd} = S_{dd}$(互 PSD = 訊號的 PSD)
Wiener 去噪公式
$$H_{\text{opt}}(e^{j\omega}) = \frac{S_{dd}(e^{j\omega})}{S_{dd}(e^{j\omega}) + S_{vv}(e^{j\omega})}$$直觀解讀:
- SNR 高的頻帶($S_{dd} \gg S_{vv}$):$H \approx S_{dd}/S_{dd} = 1$ → 完全通過
- SNR 低的頻帶($S_{vv} \gg S_{dd}$):$H \approx S_{dd}/S_{vv} \approx 0$ → 強力壓制
- 中間地帶:$H$ 隨局部 SNR 平滑過渡 → 頻率相依的最佳折衷
本質:Wiener 濾波器是一個頻率相依的 SNR 閘門——它在每個頻率獨立判斷「這裡訊號多還是雜訊多?」然後做最佳的增益調整。這就是為什麼它比固定截止頻率的低通濾波器好得多。
最小均方誤差 (MMSE)
在 SNR 為零的頻帶,殘餘誤差 = $S_{dd}/2$(最佳也只能砍掉一半);在 SNR 極高的頻帶,殘餘誤差趨近零。
與 LMS 自適應濾波的關係
| 特性 | Wiener 濾波 | LMS 自適應濾波 |
|---|---|---|
| 需要的資訊 | $R_{xx}$ 和 $r_{xd}$(離線統計量) | 只需輸入 $x[n]$ 和參考 $d[n]$ |
| 求解方式 | 解 Wiener-Hopf 方程(一次性) | 梯度下降的隨機近似(逐樣本更新) |
| 收斂 | 瞬間(非遞迴) | 需要時間收斂,受步長 $\mu$ 控制 |
| 追蹤能力 | 無(假設 WSS) | 有(可追蹤緩慢時變環境) |
| 關係 | LMS 收斂後 $\to$ 在 Wiener 解附近振盪 | |
怎麼用:語音去噪的數值範例
Step 1:問題設定
乾淨語音 $d[n]$(100 Hz 基頻正弦波模擬)+ 白雜訊 $v[n]$($\sigma^2 = 0.5$),輸入 SNR = 0 dB。
Step 2:估計 PSD
用 Welch 法分別估計 $S_{dd}$(從乾淨訊號)和 $S_{vv}$(從純雜訊段)。實務中乾淨訊號不可得,需用 VAD (Voice Activity Detection) 在靜音段估計 $S_{vv}$。
Step 3:計算 Wiener 濾波器
其中 $k$ 是頻率 bin 索引。在 100 Hz 附近(訊號強)$H \approx 1$;在遠離 100 Hz 處(雜訊主導)$H \approx 0$。
Step 4:頻域應用
$\hat{D}[k] = H_{\text{opt}}[k] \cdot X[k]$,然後 IFFT 回時域。
Step 5:評估
比較濾波前後的 SNR:SNR 從 0 dB 提升到 10–15 dB(視訊號和雜訊的頻譜重疊程度而定)。
互動:Wiener 濾波去噪
觀察 Wiener 濾波器如何根據 SNR 自動調整每個頻率的增益。拖動 SNR 滑桿,看濾波器形狀和輸出品質的變化。
應用場景
- 語音增強 (Speech Enhancement):手機通話中的雜訊消除。語音 PSD 集中在 100 Hz–4 kHz 的共振峰 (Formant) 區域,雜訊 PSD 相對平坦。Wiener 濾波器在共振峰頻帶讓語音通過,在其他頻帶壓制雜訊。現代手機的雜訊消除晶片本質上是 Wiener 濾波的改良版
- 天文影像去噪:哈伯太空望遠鏡的影像受到光子雜訊和讀出雜訊影響。Wiener 反卷積 (Wiener Deconvolution) 同時處理去噪和去模糊
- 通訊等化器 (Equalizer):MMSE 等化器就是 Wiener 濾波器的直接應用——最小化 ISI (符號間干擾) + 雜訊的均方誤差
- 腦波 (EEG/ERP) 去偽影:去除眼動、肌電等偽影。訊號和偽影的 PSD 不同,Wiener 濾波器可以選擇性地壓制偽影頻帶
- 主動噪音控制 (ANC):降噪耳機中的前饋/回饋路徑設計本質上求解的就是因果 Wiener 濾波問題
陷阱與限制
- 需要已知 PSD:Wiener 濾波器需要 $S_{dd}$ 和 $S_{vv}$,但實務中乾淨訊號不可得。常用方法:在「靜音段」估計 $S_{vv}$,用 $S_{dd} = S_{xx} - S_{vv}$(可能出現負值 → 需做半波整流或 spectral floor)
- 假設 WSS:語音、音樂等訊號是高度非平穩的。解決方法:用短時 Wiener 濾波(每一幀重新估計 PSD 並計算 $H$),與 STFT 框架結合
- Musical Noise(音樂雜訊):頻譜減法(Wiener 濾波的簡化版)會產生隨機出現的殘餘頻譜峰值,聽起來像「哨聲」或「水滴聲」。改善方法:平滑 $H$ 的時間軌跡、設定 spectral floor
- 非因果:理論上的 Wiener 濾波器是非因果的(使用未來的樣本)。因果版本需要用 spectral factorization 求解,更加複雜
- 只是線性最佳:如果雜訊是非高斯的,非線性估計器可能更好。Wiener 是所有線性估計器中的最佳,不是所有估計器中的最佳
Quick Check
Q1: 在 Wiener 去噪公式 $H = S_{dd}/(S_{dd}+S_{vv})$ 中,如果某頻率的 SNR = 0 dB(即 $S_{dd} = S_{vv}$),此處的 $H$ 值是多少?直覺上合理嗎?
顯示答案
$H = S_{dd}/(S_{dd}+S_{dd}) = 0.5$。Wiener 濾波器把增益設為 0.5(衰減 6 dB)。直覺上合理:訊號和雜訊一樣大時,無法完全分離,最佳策略是折衷——通過一半的能量,損失一些訊號但也壓制了一半的雜訊。
Q2: 為什麼說 LMS 自適應濾波器是 Wiener 濾波器的「線上近似」?它的優勢是什麼?
顯示答案
Wiener 濾波器需要事先知道 $R_{xx}$ 和 $r_{xd}$(統計量),是離線的一次性求解。LMS 不需要這些統計量——它用當前的輸入和誤差來估計梯度方向,逐樣本更新濾波器係數。收斂後,LMS 的係數會在 Wiener 最佳解附近振盪。LMS 的優勢是:(1) 不需要先知道統計量 (2) 可以追蹤緩慢時變的環境。
References: [1] Wiener, N., Extrapolation, Interpolation, and Smoothing of Stationary Time Series, MIT Press, 1949. [2] Kolmogorov, A.N., Interpolation and Extrapolation of Stationary Random Sequences, Izv. Akad. Nauk SSSR, 5:3-14, 1941. [3] Haykin, S., Adaptive Filter Theory, 5th ed., Ch.3. [4] Oppenheim & Schafer, Discrete-Time Signal Processing, 3rd ed., Ch.11. [5] Boll, S., Suppression of Acoustic Noise in Speech Using Spectral Subtraction, IEEE Trans. ASSP, 27(2):113-120, 1979. [6] Loizou, P.C., Speech Enhancement: Theory and Practice, 2nd ed., CRC Press, 2013.
互動實驗室
Signal Generator + FFT Spectrum Analyzer
訊號產生器
時域波形
FFT 幅度譜
- 取樣率:1024 Hz
- 取樣點數:1024 點
- 頻率解析度:Δf = fs/N = 1024/1024 = 1 Hz
- 最高可分析頻率:fs/2 = 512 Hz (Nyquist)
- 訊號模型:x[n] = A1sin(2πf1n/fs) + A2sin(2πf2n/fs) + noise
🧪 引導實驗
實驗 1:單一正弦波的頻譜
設定:f1=100Hz, A1=1.0, f2 關掉(A2=0), 雜訊=0, 視窗=Hann
預期結果:時域看到乾淨的正弦波。頻譜在 100Hz 處有一個尖銳的峰,旁邊幾乎沒有洩漏。
思考:改成 Rectangular 窗,觀察 100Hz 旁邊出現的旁瓣(洩漏)。
實驗 2:兩個接近頻率
設定:f1=100Hz, f2=108Hz, A1=A2=1.0, 雜訊=0
預期結果:Hann 窗下應該看到兩個分開的峰。改成 Rectangular 窗,可能看到兩峰合併(因為主瓣太寬互相干擾)。
思考:把 f2 拉近到 104Hz,觀察什麼時候兩峰開始無法分辨。
實驗 3:雜訊中的微弱訊號
設定:f1=100Hz A1=1.0, f2=200Hz A2=0.1, 雜訊=0.5
預期結果:100Hz 的峰很明顯,200Hz 的峰可能被雜訊淹沒。改用 Blackman 窗(低旁瓣),200Hz 的峰應該更容易看到。
實驗 4:方波的諧波結構
設定:(需要在程式碼中把波形改成 square)f1=50Hz square wave, A1=1.0
預期結果:頻譜在 50, 150, 250, 350... Hz(奇數倍頻)出現峰值,振幅以 1/n 衰減。這就是傅立葉級數的實際驗證。
綜合測驗:傅立葉分析 32 題 (Comprehensive Quiz)
涵蓋六大部分 + DSP 新章節(M2B、M4B-E、M5A-D、M8)的核心概念。每題測試的是理解而非背公式。
第 1 題:在 Hilbert 空間 L2[0, 2π] 中,為什麼 {ejnω} 可以作為基底 (basis)?
第 2 題:Dirac delta 函數 δ(t) 不是傳統意義的函數,它屬於什麼數學框架?
第 3 題:Uncertainty Principle(不確定性原理)告訴我們什麼?
第 4 題:傅立葉級數 (Fourier Series) 和傅立葉轉換 (Fourier Transform) 的根本差異是什麼?
第 5 題:取樣定理要求 fs > 2fmax。如果一個訊號的頻寬是 100-200 Hz(帶通訊號),取樣率至少要多少?
第 6 題:DFT 長度 N = 1024,取樣率 fs = 10 kHz。頻率解析度是多少?如果想分辨 1Hz 間隔的兩個頻率,N 至少要多少?
第 7 題:關於 Z 轉換與 DTFT 的關係,以下何者正確?
第 8 題:你用矩形窗做 FFT 分析一個單頻訊號。如果訊號頻率剛好落在兩個 FFT bin 之間(非整數 bin),會發生什麼?
第 9 題:Welch 方法相比直接計算 periodogram 的主要優勢是什麼?代價是什麼?
第 10 題:MUSIC 演算法比 FFT 能達到更高的頻率解析度,原因是什麼?
第 11 題:Hilbert 轉換的主要用途是什麼?
第 12 題:倒頻譜 (Cepstrum) 分析中,「liftering」是什麼意思?
第 13 題:你需要分析一個 100ms 的 chirp 訊號(頻率從 1kHz 線性掃到 5kHz)。STFT 窗長應該設多少?
第 14 題:小波轉換 (CWT) 相比 STFT 的最大優勢是什麼?
第 15 題:在 OFDM 系統中,如果 CP 長度小於通道延遲擴展 (delay spread),會發生什麼?
第 16 題:FMCW 雷達中,增加 chirp 頻寬 B 會改善什麼?
第 17 題:一位工程師在振動包絡譜 (envelope spectrum) 中看到 BPFO 的 1, 2, 3, 4 倍頻都很明顯。這代表什麼?
第 18 題:在陣列訊號處理中,天線間距 d > λ/2 會造成什麼問題?這類比於時域的什麼現象?
第 19 題:關於 HRV 頻域分析,以下何者是常見的錯誤觀念?
第 20 題:OLA (Overlap-Add) 快速卷積中,FFT 長度 N 必須滿足什麼條件?如果不滿足會怎樣?
第 21 題:BIBO 穩定的充要條件是什麼?
第 22 題:一階 IIR y[n] = x[n] + a·y[n-1] 的系統函數 H(z) = ?
第 23 題:四種經典 IIR 設計中,哪一種有最陡的滾降率(給定階數下)?
第 24 題:雙線性轉換 s = (2/T)(z-1)/(z+1) 會造成什麼效應?
第 25 題:為什麼工業界 IIR 濾波器幾乎都用 SOS (Cascade) 結構而非 Direct Form?
第 26 題:LMS 演算法的步長 μ 太大會發生什麼?
第 27 題:對訊號降取樣 M 倍前必須做什麼?
第 28 題:Polyphase 結構相比直接實作可以省多少計算量(decimation by M)?
第 29 題:完美重建 (Perfect Reconstruction) 條件是分析合成濾波器組滿足?
第 30 題:L 階 Sigma-Delta ADC 的 SNR 改善率(每倍頻 OSR)是?
第 31 題:Wiener-Khinchin 定理的核心內容是?
第 32 題:當訊號 d[n] 與雜訊 v[n] 不相關,Wiener 濾波器頻率響應是?
關於本平台 (About)
本教學平台是一個完整的研究所等級傅立葉分析 (Fourier Analysis) 線上教材,涵蓋從數學基礎到工程實務的六大部分。
課程架構
| 部分 | 主題 | 章節數 |
|---|---|---|
| Part I | 數學基礎 (Mathematical Foundations) | 4 節 |
| Part II | 四大傅立葉轉換 + Z 轉換 (Core Transforms) | 6 節 |
| Part III | 頻譜估計 (Spectral Estimation) | 4 節 |
| Part IV | 解析訊號與倒頻譜 (Analytic Signals & Cepstrum) | 3 節 |
| Part V | 時頻分析 (Time-Frequency Analysis) | 5 節 |
| Part VI | 工程實務 (Engineering Practice) | 10 節 |
設計理念
- 直覺優先 (Intuition First):每個概念先用白話文解釋「為什麼」,再給公式,最後在可展開的
<details>區塊中提供嚴格推導。 - 痛點驅動 (Problem-Driven):從實際問題出發——「FPGA 上的 FFT 為什麼精度不夠?」「OFDM 的 CP 為什麼要那麼長?」——而非從抽象定義開始。
- 工程連結 (Engineering Connection):每個理論都附帶具體的工業應用範例和真實數值參數。
- 互動探索 (Interactive Exploration):內建互動圖表和實驗室,讓學習者親手調整參數觀察結果。
適用對象
- 電機/電子/通訊/資工研究所學生
- 訊號處理/DSP 工程師
- 振動分析/預測維護工程師
- 生醫工程/神經科學研究者
- 雷達/通訊系統設計工程師
技術資訊
- 語言:繁體中文,技術名詞首次出現時附英文原文。
- 數學排版:使用 CSS 類別
fm標記數學公式,支援 MathJax/KaTeX 渲染。 - 互動圖表:使用
plot類別的 div 容器,可由 JavaScript 繪圖庫(如 Plotly.js, Chart.js)渲染。
主要參考文獻
- Oppenheim, A.V. & Schafer, R.W. Discrete-Time Signal Processing, 3rd Ed., Pearson, 2010.
- Haykin, S. & Van Veen, B. Signals and Systems, 2nd Ed., Wiley, 2003.
- Proakis, J.G. & Manolakis, D.G. Digital Signal Processing, 4th Ed., Pearson, 2007.
- Randall, R.B. Vibration-based Condition Monitoring, Wiley, 2011.
- Goldsmith, A. Wireless Communications, Cambridge University Press, 2005.
- Richards, M.A. Fundamentals of Radar Signal Processing, 2nd Ed., McGraw-Hill, 2014.
- Van Trees, H.L. Optimum Array Processing, Wiley, 2002.
- Mallat, S. A Wavelet Tour of Signal Processing, 3rd Ed., Academic Press, 2009.
- Task Force of ESC/NASPE. "Heart rate variability: Standards of measurement," Circulation, 93(5), 1996.
- 3GPP TS 38.211, "NR; Physical channels and modulation," Release 17.
📓 Python 範例與練習
本平台所有 Python 程式碼可以複製到你的 Jupyter Notebook 直接執行。建議的環境配置:
推薦的學習方式:
- 讀完每個章節的理論與範例
- 複製 Python 程式碼到 Jupyter,執行並觀察輸出
- 修改參數觀察行為變化(嘗試極端值!)
- 從首頁的真實資料集下載資料替換合成訊號
- 記錄你的觀察和疑問