① 非平穩
訊號的統計性質隨時間改變。睡眠紡錘只出現 0.5–2 秒,K 複合波是單次瞬態事件。 傅立葉轉換假設整段訊號由固定振幅的正弦波組成,一個只佔 3% 時間的事件,能量會被抹平到整段 30 秒裡。
Empirical Mode Decomposition · Sleep Staging
傅立葉分析要你先選好正弦基底,小波分析要你先選好母小波。 但睡眠腦波是非線性、非平穩的——一個 30 秒的 epoch 裡,可能同時藏著 0.8 Hz 的慢波、 持續 0.9 秒的紡錘、還有一個突如其來的 K 複合波。
1998 年,黃鍔(Norden E. Huang)提出經驗模態分解(EMD): 不預設任何基底,讓訊號自己說出它由哪些振盪組成。 這份導覽從演算法本身出發,一路做到能判讀睡眠期別的完整流程——而且每一步你都可以自己動手跑。
第 1 章
腦電訊號的兩個性質,讓經典的頻譜分析在睡眠研究裡處處碰壁。
訊號的統計性質隨時間改變。睡眠紡錘只出現 0.5–2 秒,K 複合波是單次瞬態事件。 傅立葉轉換假設整段訊號由固定振幅的正弦波組成,一個只佔 3% 時間的事件,能量會被抹平到整段 30 秒裡。
神經網路的回饋是非線性的,波形不是純正弦——慢波有明顯的上下不對稱、鋸齒波有陡峭的斜邊。 用正弦基底去逼近,只能靠大量假諧波(spurious harmonics)湊出形狀,這些諧波沒有生理意義。
小波轉換比傅立葉好,但你仍得先決定母小波(Daubechies?Morlet?)與尺度。 不同選擇會給出不同結論。EMD 的基底由資料事後決定(a posteriori),沒有這個自由度問題。
下面這段訊號在中間突然變頻(像是紡錘叢發結束、慢波接手)。看看傅立葉頻譜與 EMD 各自怎麼描述它。
傅立葉頻譜看到兩根獨立的峰,卻完全說不出「先 A 後 B」這件事——時間資訊在轉換中被積掉了。
EMD 讓訊號自己決定要拆成幾個成分,再用希爾伯特轉換讀出每一刻的瞬時頻率:頻率在中點跳變的那一瞬間,被直接畫了出來。
第 2 章
EMD 沒有積分變換、沒有基底矩陣,整個演算法就是一個叫做篩選(sifting)的迴圈, 而且只用到兩件事:找極值點,以及三次樣條內插。
x(t) 全部的局部極大值與局部極小值。emax(t),所有極小值連成下包絡 emin(t)。m(t) = ( emax(t) + emin(t) ) / 2,這是訊號的「局部趨勢」。h(t) = x(t) − m(t)。h 還不符合 IMF 條件,把 h 當成新的 x 回到步驟 1。h 通過檢查 → 它就是 IMF1。令 r(t) = x(t) − IMF1(t),對殘量 r 重跑整套流程。按「下一次篩選」,觀察上下包絡(虛線)、它們的均值(紅線)被扣掉之後,波形如何逐漸「對稱化」成一個 IMF。
紅點與藍點是偵測到的極大值/極小值;虛線是三次樣條包絡。當 極值數 與 零交越數 相差不超過 1、且 SD 掉到 0.2 以下,篩選就停止。
第 3 章
篩選要篩出來的東西叫做本質模態函數(Intrinsic Mode Function, IMF)。 它的定義只有兩條,但這兩條正是「能定義出有意義的瞬時頻率」的充分條件。
在整段資料中,極值點的數目與零交越點的數目必須相等,或最多相差 1。
→ 不允許「有起伏但不過零」的偏移波,每一次振盪都要真的繞著零來回。
在任意時刻,由局部極大值構成的包絡與由局部極小值構成的包絡,其平均為零。
→ 波形局部對稱,振幅調變與頻率調變才能被乾淨地分離。
滿足這兩條之後,原始訊號可以被完整重建,沒有任何資訊損失:
x(t) = Σi=1n IMFi(t) + rn(t)
加總必定等於原訊號。下面的分解器會實際算出重建誤差給你看——大約在 10⁻¹⁵ 的數值精度上限。
IMF 之間近似正交,能量分配有意義,但這是經驗上的性質,不像傅立葉基底有嚴格保證。
Flandrin 等人 (2004) 發現:對寬頻雜訊做 EMD,各 IMF 的中心頻率大約每階減半,行為像小波的二進位濾波器組——但門檻是資料自己畫的。
選一段訊號,按下分解。每個 IMF 右上角標的是它的振幅加權平均瞬時頻率,色塊代表它落在哪個腦波頻帶。
第 4 章
EMD 只是前半場。把每個 IMF 送進希爾伯特轉換,就得到希爾伯特—黃轉換(HHT)—— 一張真正意義上的時間×頻率×能量圖。
對窄帶的 IMF c(t) 建立解析訊號:
z(t) = c(t) + i·H[c](t) = a(t)·eiθ(t)
於是同時得到瞬時振幅與瞬時頻率:
a(t) = |z(t)| , ω(t) = dθ(t)/dt
關鍵在於:瞬時頻率只有對窄帶、局部對稱的訊號才有物理意義。 直接對原始 EEG 算 ω(t) 會得到一堆負頻率的垃圾; 正是 IMF 的那兩條定義,讓這個量變得可以解釋。這就是為什麼 EMD 必須走在希爾伯特轉換前面。
每個點是一個時間樣本,縱軸是該時刻的瞬時頻率,亮度與大小代表瞬時振幅。試著在 N2 找出紡錘叢發,在 N3 看慢波如何壓住整張圖。
第 5 章
臨床睡眠判期把整夜多項生理檢查(PSG)切成連續的 30 秒 epoch, 每一個 epoch 依 AASM 判讀手冊(Berry et al., 2017)指派一個期別: W(清醒)、N1、N2、N3、R(REM)。 一夜 8 小時 ≈ 960 個 epoch,全靠人工目視判讀。
| 期別 | 主導頻帶 | 指標波形 | 典型振幅 | 約佔一夜 |
|---|---|---|---|---|
| W 清醒 | α 8–12 Hz、β 16–30 Hz | 閉眼時枕區 α 節律、眨眼假影、明顯肌電 | 20–50 µV | < 5% |
| N1 | θ 4–7 Hz | α 消退超過一半、頂尖波(vertex sharp wave)、緩慢眼動 | 50–100 µV | 2–5% |
| N2 | θ + σ 12–16 Hz | 睡眠紡錘(≥0.5 s 的 11–16 Hz 叢發)、K 複合波 | 紡錘 ~25 µV、K 複合 >100 µV | 45–55% |
| N3 | δ 0.5–2 Hz | 慢波振幅 >75 µV(峰對峰)且佔該 epoch ≥20% | 75–200 µV | 13–23% |
| R / REM | 低振幅混合頻率 | 鋸齒波 2–6 Hz、快速眼動、下巴肌張力最低 | < 30 µV | 20–25% |
切換期別,看 30 秒 epoch 的波形、標註出來的特徵事件,以及頻帶能量分布。
典型的睡眠週期約 90 分鐘一輪。深睡(N3)集中在前半夜,REM 則在後半夜逐漸拉長—— 這也是為什麼自動判期的錯誤分布會隨時間改變。
第 6 章
文獻裡以 EMD 為核心的單通道睡眠判期,幾乎都走同一條管線。理解了這五步,就讀得懂這一整個子領域。
單通道 EEG(常用 Fpz-Cz 或 Pz-Oz),每 30 秒一段,100 Hz 取樣 → 3000 點。
對每個 epoch 做 EMD / EEMD / CEEMDAN,取前 K 個 IMF(K 常取 4–8)。
對每個 IMF 取統計動差(變異數、偏度、峰態)、頻帶能量、瞬時頻率與振幅統計、熵與非線性動力學指標。
AdaBoost、Bagging、RUSBoost、隨機森林、SVM。集成式方法特別常見——因為各期的 epoch 數量極度不平衡。
以 Sleep-EDF、DREAMS、SHHS 等公開資料庫做 2 類到 6 類的分類,報告準確率與 Cohen's κ。
IMF1–IMF2 落在 σ/β 範圍。睡眠紡錘是叢發式的,會讓該 IMF 的包絡峰態大幅升高——這正是本頁實驗室用的特徵之一。
N3 的能量幾乎全壓在 δ,對應到最後幾個 IMF 與殘量。N3 的總功率與 REM 差了一個量級以上。
K 複合波與頂尖波是單次大幅偏移,會讓低頻 IMF 的峰態(kurtosis)遠離高斯值 3。統計動差之所以有效,理由就在這裡。
| 研究 | 分解方法 | 特徵 | 分類器 | 資料 | 回報結果 |
|---|---|---|---|---|---|
| Hassan & Bhuiyan (2016a)[5] | EMD | IMF 統計動差 | AdaBoost + 決策樹 | Sleep-EDF | 2–6 類分類問題 |
| Hassan & Bhuiyan (2016b)[6] | CEEMDAN | 高階統計動差 | Bootstrap aggregating | Sleep-EDF | 5 類約 90.7%† |
| Hassan & Bhuiyan (2017)[7] | EEMD | 統計動差 + 統計檢定選特徵 | RUSBoost | Sleep-EDF | 6 類 88.07%/5 類 83.49%/4 類 92.66%/3 類 94.23%/2 類 98.15% |
| Liu et al. (2021)[8] | EEMD | 統計 + 時域 + 非線性動力學 | 集成學習 | Sleep-EDF / DREAMS / SHHS | Sleep-EDF 4 類 93.1%/5 類 91.9% |
| Huang & Ling (2022)[9] | EEMD + 可調 Q 小波(TQWT) | 時頻聯合特徵 | 機器學習分類器 | 公開睡眠資料庫 | 結合兩種時頻分解 |
† 此數值轉引自後續文獻的比較表,非本頁作者自原始摘要核實;其餘欄位的書目資料皆經 Crossref/PubMed 核對。
重要提醒:表中數字不宜直接互相比較。各研究使用的 epoch 子集、受試者切分方式(同受試者內/跨受試者)、
類別不平衡處理都不同。跨受試者驗證的準確率通常會明顯低於同受試者內驗證。
第 7 章
這一節會在你的瀏覽器裡真的跑完第 6 章那條管線:產生標註好的 epoch → EMD 分解 → 抽出 — 維 IMF 特徵 → 訓練最近質心分類器 → 在沒看過的 epoch 上測試。 沒有伺服器,沒有預先算好的答案,所有數字都是現場算出來的。
隨機抽一個 epoch(答案先藏起來)。你先猜,再看演算法從 IMF 讀出了什麼。
第 8 章
EMD 沒有解析理論基礎——它是由演算法定義的。這帶來了幾個真實存在、而且會影響睡眠判期結果的問題。
同一個 IMF 裡混進了差距很大的不同尺度,或同一個尺度被拆散到不同 IMF。 起因是訊號的間歇性——而睡眠腦波充滿間歇事件:紡錘、K 複合波、體動假影。 後果是 IMF 失去物理意義,抽出來的特徵也跟著不穩定。
訊號兩端沒有極值點可用,樣條會在邊界飛散,誤差往內傳播。 30 秒 epoch 的頭尾若剛好切在一個 K 複合波上,影響會很明顯。 常見對策是鏡射延拓(本頁的實作就用了這招)或極值預測。
IMF 數目、停止準則、內插方式都會改變結果,卻沒有唯一正解。 兩篇論文寫著「用了 EMD」,實際做出來的分解可能相當不同——這讓文獻間的比較變得困難。
EEMD 要跑上百次完整分解才做集成平均。整夜 960 個 epoch × 100 次集成, 在嵌入式的居家睡眠監測裝置上是很實際的負擔。
刻意在訊號上加白雜訊再分解,重複多次取平均。白雜訊填滿了整個時頻平面,讓間歇訊號在每次實現中都能找到對應尺度,混疊因此被平均掉。[2]
EEMD 的殘留雜訊會破壞完備性。CEEMDAN 改成每一階分別加入特定雜訊並計算唯一殘量,重建誤差可忽略、頻譜分離更好、篩選次數更少。[3]
都是用計算量換穩定度,而且集成次數與雜訊振幅又變成兩個要調的參數。天下沒有白吃的午餐。
底下是一條連續的 1 Hz 慢波,加上幾段短促的 12 Hz 叢發—— 結構上就是「慢波背景 + 間歇的紡錘/K 複合波」。 理想的分解應該把叢發乾淨地放進 IMF1,慢波留給後面的 IMF。看看標準 EMD 做到了沒有。
端到端的深度模型(DeepSleepNet、U-Time 等)在公開資料庫上的表現已經追平甚至超越人工判讀一致性, 不需要手工特徵。但 EMD 管線仍保有兩個難以取代的位置: 可解釋性——每個 IMF 都對應到看得見、講得出生理意義的振盪,而不是一個黑箱的隱藏層; 以及低資料需求——集成式分類器在幾百個 epoch 上就能訓練,深度模型通常需要數萬個。 在穿戴式裝置、動物睡眠研究、罕見疾病族群這些資料稀缺的場景,這兩點都還很值錢。
第 9 章
以下書目資料經 Crossref / PubMed / 出版社頁面核對。
全部的訊號處理都是這個頁面自己算的:FFT、希爾伯特轉換、自然三次樣條、篩選迴圈、EMD/EEMD、
特徵抽取與最近質心分類器,皆為原生 JavaScript 實作,沒有使用任何外部函式庫。
想讀程式碼的話:assets/dsp.js(演算法核心)、assets/eeg.js(訊號合成與特徵)、
assets/plot.js(繪圖)、assets/app.js(互動邏輯)。
頁面中的腦波為依文獻規格合成之教學用訊號,不可用於任何臨床判讀。