EMD 與 Hilbert 譜的原始論文:定義 IMF 的兩個條件、篩選程序、SD 停止準則、瞬時頻率與邊際譜。本站第 01、02 節的內容與實作都直接對應此文。
黃鍔院士 · Empirical Mode Decomposition × Sleep EEG
夜夜YAYA把一夜的腦波,一葉一葉剝開
睡眠腦波是非線性、非平穩的訊號,傅立葉分析看不清它。黃鍔院士 1998 年提出的經驗模態分解(EMD)讓資料自己說出它包含哪些尺度。這個網站把 EMD 的每一步做成可以動手的實驗,並直接對真實的 Sleep-EDF 整夜腦波即時運算。
- 為什麼傅立葉的盲點,與瞬時頻率如何補上
- 演算法一步一步親手把 IMF 篩出來
- 睡眠研究真實腦波、整夜結構、自動分期與文獻
- 原生 JavaScript 實作 · 附測試與 PyEMD 交叉驗證
- Sleep-EDF 真實整夜腦波 · 1128 個 epoch
- 25 篇 Crossref 查證文獻
- GitHub ↗
00黃鍔院士與 EMD:從 NASA 到睡眠研究
黃鍔(Norden E. Huang),1937 年生於湖北,1960 年畢業於國立臺灣大學,1967 年取得約翰霍普金斯大學流體力學博士。他在 NASA 戈達德太空飛行中心工作期間,為了分析非線性、非平穩的海洋波浪資料,於 1998 年提出經驗模態分解(EMD)與 Hilbert 譜,NASA 將這套方法命名為 Hilbert–Huang 轉換(HHT),並於 2003 年選為 NASA 年度發明。他於 2000 年獲選美國國家工程院院士、2004 年獲選中央研究院院士,2006 年起任國立中央大學講座教授,在台灣成立數據分析方法研究中心,把 HHT 帶進地球科學、工程與生醫訊號等領域。
下面是他本人與長期合作者的關鍵論文,每一篇都標註它對本站哪一節的意義。
- 1998
- 2003A confidence limit for the empirical mode decomposition and Hilbert spectral analysisHuang NE, Wu MLC, Long SR, et al. · Proc. R. Soc. Lond. A 459:2317–2345 · DOIS-number 停止準則與 EMD 結果的信賴區間;本站
sNumber選項的來源。 - 2004A study of the characteristics of white noise using the empirical mode decomposition methodWu Z, Huang NE · Proc. R. Soc. Lond. A 460:1597–1611 · DOI證明白噪音經 EMD 後各 IMF 的能量與週期呈固定關係,可用來判斷 IMF 是否只是噪音——也是 EEMD 的理論鋪墊。
- 2005Hilbert–Huang Transform and Its Applications(專書,2014 年二版)Huang NE, Shen SSP(編) · World Scientific · DOIHHT 的系統性教科書,含方法、數學問題與跨領域應用。
顯示其餘 6 篇(2005–2019)
- 2008A review on Hilbert-Huang transform: method and its applications to geophysical studiesHuang NE, Wu Z · Reviews of Geophysics 46:RG2006 · DOI十年回顧:方法的優缺點、邊界效應、停止準則與模態混疊的整理,本站第 09 節的限制討論大量參考此文。
- 2009
- 2009
- 2011
- 2016On Holo-Hilbert spectral analysis: a full informational spectral representation for nonlinear and non-stationary dataHuang NE, Hu K, Yang ACC, et al. · Phil. Trans. R. Soc. A 374:20150206 · DOI對 IMF 的振幅包絡再做一層 EMD,分開頻率調變與振幅調變;與台灣團隊(楊靜修、梁偉光、葉家榮、阮啟弘、彭仲康)合作,適合分析睡眠中慢波—紡錘波這類跨頻率耦合。
- 2019Unraveling nonlinear electrophysiologic processes in the human visual system with full dimension spectral analysisNguyen KT, Liang WK, Lee V, Chang WS, Muggleton NG, Yeh JR, Huang NE, Juan CH · Scientific Reports 9 · DOIHHSA 應用於人類 EEG 的示範(中央大學認知神經科學研究所),顯示黃鍔院士近年的重心已轉向腦電訊號。
生平資料來源:Wikipedia「Norden E. Huang」條目(出生、學歷、院士年份、中央大學職位)、NASA 技術報告(HHT 命名與 2003 年年度發明)。所有論文資料皆以 Crossref 查證。
01為什麼睡眠訊號需要 EMD?
傅立葉分析把訊號展開成固定頻率、固定振幅的正弦波之和。這件事隱含兩個假設:訊號是線性的(波形可以疊加而不互相影響)而且平穩的(統計性質不隨時間改變)。睡眠腦波兩者都不滿足:
深入說明
- 非平穩:N2 期的紡錘波(sleep spindle,11–16 Hz)只持續 0.5–2 秒;K 複合波是單一的瞬態事件;從 N2 進入 N3 時,慢波逐漸變大變慢。
- 非線性:神經元集體放電產生的波形不是完美正弦波,常常「上升快、下降慢」。傅立葉必須用一堆諧波(2 倍頻、3 倍頻……)拼出這種形狀,但那些諧波在生理上並不存在。
EMD 的想法完全不同:它不問「這個訊號由哪些正弦波組成」,而是問「這個訊號自己的振盪有幾種時間尺度」。它把訊號拆成少數幾個本質模態函數(Intrinsic Mode Function, IMF),每個 IMF 都是振幅與頻率可隨時間改變的單一振盪,因此可以用 Hilbert 轉換算出瞬時頻率。下面的小實驗就是黃鍔 1998 年論文裡的經典例子。
實驗:一個「非線性」的波,傅立葉看到諧波,Hilbert 看到頻率在擺動
訊號 x(t) = cos(2π·1·t + ε·sin(2π·1·t))。ε = 0 時是純正弦波;ε 越大,波形越不對稱(波峰變尖、波谷變平)。
怎麼看
橫軸:時間(秒);縱軸:振幅(無單位)。滑鼠移到圖上可讀值,鍵盤 ← → 可移動游標。
除了 1 Hz 的主峰,還冒出 2 Hz、3 Hz……的「諧波」(對數尺度才看得清楚)——這是用正弦波硬拼非正弦波形的代價。
只有一個成分,但它的頻率在每一個週期內來回擺動(intra-wave frequency modulation):這才是波形不對稱的真正原因。
02演算法拆解:篩選(sifting)
EMD 的核心是一個叫 sifting(篩選) 的迭代程序。一個 IMF 必須滿足兩個條件(Huang et al., 1998):
- 整段訊號的極值個數與零交越個數相等,或最多差 1;
- 在任一時間點,由局部極大值構成的上包絡線與局部極小值構成的下包絡線,其平均值為 0。
深入說明
篩選就是不斷把「包絡線平均」從訊號裡扣掉,直到剩下的部分滿足上面兩個條件:
什麼時候停?黃鍔建議用相鄰兩次篩選結果的標準差:
抽出 c1 後,殘差 r1 = x − c1 再重複同樣的程序得到 c2、c3……直到殘差變成單調函數(沒有足夠的極值可以畫包絡線)。最後 x(t) = Σ ci(t) + rn(t),分解是完備的:所有 IMF 加上殘差可以完全重建原訊號。
親手篩出 IMF
- 目前 IMF
- 1
- 篩選次數
- 0
- 極值個數
- –
- 零交越個數
- –
- SD
- –
怎麼看
藍:目前的 h(t);橘點/橘線:局部極大值與上包絡線;綠點/綠線:局部極小值與下包絡線;紫:包絡線平均 m(t)。縱軸 µV。
怎麼看
紅:h(t) − m(t)。若 SD 小於門檻且極值數與零交越數相差 ≤ 1,就被接受為 IMF;否則成為下一輪的 h(t)。
03真實睡眠腦波的 IMF 分解
下面的 30 秒腦波片段取自 PhysioNet Sleep-EDF Expanded 資料庫受試者 SC4002E0 的 Fpz-Cz 導程(100 Hz),睡眠階段來自專家人工判讀。挑選原則:避開階段切換的邊界、排除振幅超過 150 µV 的雜訊 epoch;N2 期優先挑選含有紡錘波的片段(用 YASA 偵測)。EMD 在你的瀏覽器裡即時計算,每個 IMF 再以 Hilbert 轉換算出能量加權的平均瞬時頻率,並據此標上傳統腦波頻帶。
進階參數
怎麼看
一個 30 秒 epoch,橫軸秒、縱軸 µV。顏色對應上方的睡眠階段。
怎麼看
殘差是最後剩下的單調趨勢(沒有足夠極值可再篩選),通常是緩慢的基線漂移。
各頻帶能量占比(把 IMF 依平均瞬時頻率歸類)
IMF 明細
| IMF | 平均瞬時頻率 (Hz) | 頻帶 | 能量占比 | RMS (µV) | 篩選次數 |
|---|
04Hilbert 譜 vs. 傅立葉頻譜圖
對每個 IMF 做 Hilbert 轉換,得到解析訊號 z(t) = c(t) + i·H[c(t)] = a(t)·eiθ(t),瞬時振幅 a(t) 與瞬時頻率 ω(t) = dθ/dt。把所有 IMF 的 (t, ω, a²) 疊到時間–頻率平面,就是 Hilbert 譜(Hilbert–Huang Transform, HHT)。它與短時傅立葉(STFT)頻譜圖的差別在於:STFT 的時間解析度與頻率解析度互相牽制(視窗 2 秒 → 頻率解析度只有 0.5 Hz,且任何事件都被抹成 2 秒寬),而 Hilbert 譜的頻率是逐點算出來的,短暫的紡錘波會呈現為一道清楚的短線。
深入說明
兩張圖使用第 03 節目前選取的片段。顏色為相對能量(對數尺度,0 dB = 該圖最大值)。
怎麼看
每個像素 0.2 s × 0.25 Hz;顏色深淺為該格內所有 IMF 的 a² 總和(對數尺度,右側色條由淡到深)。空白代表該時刻沒有任何 IMF 落在這個頻率。
怎麼看
同一片段的短時傅立葉功率;2 秒視窗使任何事件在時間上被抹成約 2 秒寬、頻率解析度約 0.5 Hz。
傅立葉譜告訴你「整段 30 秒內某個頻率的能量有多少」;Hilbert 邊際譜的意義是「某個頻率曾經出現的機率有多高」(Huang et al., 1998)。對一個 30 秒裡只出現兩次、各 1 秒的紡錘波,兩者的解讀完全不同。
05模態混疊與集成經驗模態分解(EEMD)
EMD 最出名的弱點是模態混疊(mode mixing):當一個高頻振盪只間歇出現(例如紡錘波),有它的時段極值密集、沒它的時段極值稀疏,同一個 IMF 就會一下子裝著 14 Hz、一下子裝著 1 Hz;反過來,同一個尺度也可能被拆到不同 IMF。這正是睡眠腦波最常見的情況。
深入說明
Wu 與 Huang(2009)的解法很巧妙:在訊號上加入白噪音再分解,重複很多次,把結果平均。白噪音均勻填滿整個時間–頻率平面,提供一把「均勻的尺」讓每個時段的極值密度一致;而不同次試驗的噪音彼此獨立,平均之後互相抵消,殘留噪音的量級為 ε/√N。這就是 EEMD。代價是運算量乘以 N,而且各次分解的 IMF 相加不再完全等於原訊號——後來的 CEEMDAN(Torres et al., 2011)就是為了修正這一點。
實驗:1 Hz 慢波 + 兩段 14 Hz 短暫振盪(模擬慢波上的紡錘波)
怎麼看
橘色底色標示 14 Hz 短暫振盪出現的兩段時間(3–4.5 s、9–10.5 s)。
EMD
EEMD
觀察重點:在 EMD 裡,IMF1 在沒有 14 Hz 振盪的時段會「掉下去」抓 1 Hz 慢波的一部分,1 Hz 成分因此被切碎;EEMD 之後 IMF1 只剩短暫振盪,慢波完整地留在同一個 IMF。
06從 IMF 到自動睡眠分期
睡眠分期是把整夜的 PSG 每 30 秒判成 W / N1 / N2 / N3 / REM 之一。人工判讀費時且判讀者之間一致性有限,因此自動分期是睡眠研究的長期課題。Hassan 與 Bhuiyan(2016, 2017)的作法是把單導程 EEG 用 CEEMDAN 或 EEMD 拆成 IMF,對每個 IMF 計算平均、變異數、偏態、峰度等統計特徵,再交給集成式分類器(bagging、RUSBoost);Liu 等人(2021)也用 EEMD 特徵做單導程自動分期。這些工作的共同邏輯是:IMF 是資料自適應的頻帶,能比固定的濾波器頻帶更貼近每一段訊號真正的振盪成分。
深入說明
下面用本站的 16 個真實片段重現這個想法的第一步:對每個片段做 EMD,算出 IMF 特徵,在二維平面上看看不同睡眠階段是否分得開。這只是示意——真正的研究使用數千個 epoch 與交叉驗證。
怎麼看
每個符號是一個 30 秒 epoch,顏色與形狀同時表示睡眠階段;空心大符號為各階段質心。滑鼠靠近可看片段編號與數值。
顯示所有片段的特徵表
| 片段 | 階段 | δ 能量 | θ 能量 | α 能量 | σ 能量 | β 能量 | IMF1 頻率 | IMF2 頻率 | 主 IMF 頻率 | RMS | IMF1 峰度 |
|---|
「能量」為該頻帶內所有 IMF 的能量占比;頻率為 Hilbert 能量加權的平均瞬時頻率;準確率為留一法(leave-one-out)最近質心分類。
07從片段到整夜:IMF 特徵能追蹤睡眠結構嗎?
上一節只有 16 個片段。這一節把同一位受試者整夜 1128 個 30 秒 epoch(熄燈前 30 分鐘到起床後 30 分鐘)全部用本站同一套 js/emd.js 做 EMD(離線約 10 秒),把每個 epoch 的 IMF 特徵沿著時間畫出來,和專家判讀的睡眠圖(hypnogram)對照。這才是睡眠研究真正關心的尺度:EMD 抽出的特徵是否跟著睡眠週期一起起伏。
怎麼看
縱軸由下而上:N3、N2、N1、REM、W(愈上面愈清醒);橫軸為自熄燈前 30 分鐘起算的小時數。每晚約 4–5 個週期,前半夜 N3 多、後半夜 REM 長。
背景色標示專家判讀的 N3(黃)與 REM(粉)時段。試試「δ 頻帶 IMF 能量占比」與「訊號 RMS」:每一個 N3 時段都對應一個高峰;再看「IMF1 平均瞬時頻率」在 REM 與清醒時上升。
整夜留一法分類:從兩個特徵到 Hassan & Bhuiyan 式的特徵向量
| 專家 \ 預測 | W | N1 | N2 | N3 | REM |
|---|
怎麼看
留一法(leave-one-out):每個 epoch 用其餘 1126 個 epoch 訓練後預測。所有特徵先標準化(z-score)。EEMD 資料(約 250 KB)在切換時才載入。
| 設定 | 特徵數 | 準確率 | Cohen's κ | 備註 |
|---|---|---|---|---|
| EMD · δ 能量 × RMS · 最近質心 | 2 | 68.3 % | 0.58 | 本節預設;只抓到「慢波多不多」 |
| EMD · 10 個摘要特徵 · k-NN | 10 | 82.7 % | 0.77 | 加入 θ/β 能量、IMF1 頻率、峰度 |
| EEMD · 10 個摘要特徵 · k-NN | 10 | 84.5 % | 0.79 | EEMD 使各 epoch 的模態對齊,σ/α 能量不再幾乎為 0 |
| EEMD · 摘要 + 8 個模態的頻率與能量 · k-NN | 26 | 84.2 % | 0.79 | Hassan & Bhuiyan 式「逐模態統計量」特徵向量 |
| 參考:YASA(LightGBM,數十個頻譜/時域特徵;Week 1 作業) | — | 84.2 % | 0.79 | 同一位受試者、同一段夜間紀錄 |
怎麼看
上表由 tools/eval_night.mjs 離線計算,與本頁互動結果一致。注意這是單一受試者內的留一法:相鄰 epoch 高度相關,數字會比跨受試者驗證樂觀;它說明的是「IMF 特徵蘊含多少睡眠結構的資訊」,而非可推廣的分期效能。
各階段的特徵中位數(整夜)
| 特徵 | W | N1 | N2 | N3 | REM |
|---|
σ 與 α 頻帶的中位數接近 0 並不代表沒有紡錘波或 α 波,而是 IMF 的平均頻率大約逐階減半(Flandrin et al., 2004 的濾波器組特性),很少剛好落在 12–16 Hz;這正是文獻改用 EEMD/CEEMDAN 或直接用 IMF 統計動差的原因。
08文獻導覽:EMD 在睡眠研究中的脈絡
以下 25 篇文獻皆透過 Crossref 以 DOI 逐一查證(作者、期刊、卷期、頁碼)。分成五條線:方法本身的演進(含台灣團隊主導的 CEEMD 與 HHSA)、睡眠分期、睡眠呼吸中止的偵測、紡錘波與生理互動的微觀分析,以及本站使用的資料來源。
系統整理「瞬時頻率」的定義與計算方法,說明為什麼只有 IMF 這種單成分訊號的瞬時頻率才有物理意義——這是第 01 節實驗背後的理論。
提出 EEMD 解決模態混疊:加白噪音、多次分解、取平均。第 05 節的實驗即重現此文的核心論證;睡眠分期文獻幾乎都改用 EEMD 或其後續版本。
把 EMD 推廣到多通道訊號(MEMD),讓多導程 PSG(EEG、EOG、EMG)的 IMF 在頻率上對齊,解決各通道 IMF 數目不一致的問題。
CEEMDAN:在每一階段加入「已分解過的噪音 IMF」而非原始白噪音,使分解重新變得完備且集成次數更少。Hassan 與 Bhuiyan 2016 年的睡眠分期即以此為特徵抽取器。
中央大學羅孟宗團隊以 HHT 分析人類 EEG 的 α 波,示範瞬時頻率/振幅如何呈現腦波的非線性與非平穩特性,是台灣把 HHT 帶進腦波研究的代表作。
早期直接以 HHT 的時頻特徵做睡眠分期的嘗試,說明 IMF 的能量分布可對應各睡眠階段的主導節律。
用 EMD 把睡眠 EEG 拆成 IMF 後計算 Hilbert 譜,以高時頻解析度自動偵測紡錘波——正是第 04 節「短暫事件在 Hilbert 譜中是一道短線」的應用。
從單導程心電圖的心率變異與 QRS 面積序列抽出 EMD/小波特徵,以分鐘為單位篩檢阻塞型睡眠呼吸中止(OSA),是 EMD 用於睡眠呼吸中止的早期代表。
以 EMD 系列的非線性方法分析睡眠中心率變異與腦波的交互作用(心腦耦合),顯示 EMD 不只用來分期,也能探討睡眠的生理機制。
只用血氧飽和度(SpO₂)訊號做 EMD,從 IMF 的振盪特徵篩檢 OSA——展示 EMD 對低取樣率、慢變化的睡眠訊號同樣適用。
單導程 EEG → CEEMDAN → 各 IMF 的高階統計量 → bagging 分類器,在 Sleep-EDF 上完成自動分期。第 06 節的示意實驗就是這條流程的簡化版。
同一團隊改用 EEMD 特徵搭配 RUSBoost 處理各睡眠階段樣本數極不平衡的問題(N1 很少、N2 很多)。
近期以 EEMD 為特徵基礎的單導程自動分期研究,說明在深度學習時代 IMF 特徵仍是可解釋、低運算量的選擇。
成功大學團隊:把單導程 ECG 先做 EMD,再把 IMF 餵給 1D/2D CNN,於 PhysioNet Apnea-ECG 資料集達到 93.8% 的片段分類準確率——EMD 作為深度學習前處理的範例。
結合 Teager 能量算子與 EMD,在單一 EEG 通道上精確定位紡錘波的起迄時間——說明 EMD 在紡錘波偵測上至今仍是活躍的方法。
提出 S-number 停止準則(連續 S 次篩選極值與零交越數相等或差 1),並用不同停止準則的集合估計 EMD 結果的信賴區間——本站實作的 sNumber 選項即來自此文。
以寬頻雜訊做數值實驗,證明 EMD 的行為近似「二進制濾波器組」:每往下一階 IMF,中心頻率大約減半。這是把 IMF 對應到 δ/θ/α/σ 頻帶的理論依據,也說明了為什麼這種對應只是近似。
神經科學界(Desimone、Fries)系統性檢視 EMD 是否適合神經電生理訊號:肯定其處理非平穩振盪的優勢,也點出邊界效應與 IMF 詮釋的限制。
CEEMD:把白噪音以正負成對的方式加入,平均後噪音精確抵消,用較少的集成次數就能恢復分解的完備性。台灣(元智大學)團隊與黃鍔院士合作。
改良版 CEEMDAN:減少殘留噪音與「假模態」,並以生醫訊號為例說明適用性。是目前睡眠分期文獻最常採用的 EMD 變體之一。
黃鍔院士與台灣團隊提出的 HHSA:對 IMF 的振幅包絡再做一層 EMD,把頻率調變與振幅調變分開展成二維譜,適合分析跨頻率的調變耦合(例如睡眠中慢波與紡錘波的振幅調變)。這是 EMD 家族最新的發展方向。
Hassan 系列的第一篇:用原始 EMD(而非 CEEMDAN)的 IMF 統計動差搭配 AdaBoost,並比較十種分類器;與同年的 CEEMDAN 版本並讀,可看出噪音輔助分解帶來的差異。
Sleep-EDF 資料庫的來源論文;本站所有真實腦波片段都來自這個資料集(sleep-cassette 子集,受試者 SC4002E0)。
PhysioNet 平台的引用論文;Sleep-EDF 透過 PhysioNet 以 Open Data Commons Attribution License 公開。
09與 AI 討論的紀錄、設計決策與限制
這個網站是在 Claude Code 的協助下完成的。以下整理製作過程中真正影響設計的問題與結論,以及我們自己驗證過的事實。
為什麼不用 FFT 或小波轉換就好?
FFT 假設平穩、線性,對 30 秒的睡眠 epoch 只能給「平均」頻譜,看不到紡錘波何時出現;小波雖然有時頻解析度,但基底是預先選定的(母小波),解析度仍受測不準原理限制。EMD 的基底由資料決定,IMF 的瞬時頻率是逐點的。代價是 EMD 沒有封閉的數學理論(沒有唯一性與收斂性的證明),這是它最常被批評的地方——所以我們在第 02 節把每一步都攤開來讓人檢查。
篩選的停止準則怎麼選?我們實際比較了什麼?
Huang 1998 用 SD 在 0.2–0.3;2003 年又提出 S-number 準則(連續 S 次篩選極值與零交越數相等或差 1)。我們的實作兩者都支援(sdThreshold、sNumber),並加上 maxSift = 50 的上限避免「過度篩選」——篩太多次會把 IMF 磨成振幅固定的純調頻訊號,失去物理意義。第 02 節可以直接切換 SD 門檻觀察篩選次數與 IMF 的差別。
邊界效應怎麼處理?
最早的版本只用自然三次樣條,包絡線在訊號兩端會劇烈甩動,錯誤逐階累積到低頻 IMF。改用 Rilling 等人的鏡像延伸(把最靠近兩端的 2 個極值對稱反射出去)後問題明顯改善。這也是為什麼 Hilbert 瞬時頻率我們在計算平均時捨棄前後各 5% 的樣本。
模態混疊真的會在睡眠腦波裡發生嗎?
會,而且非常典型。紡錘波正是「間歇出現的高頻振盪」,第 05 節用合成訊號重現了 Wu 與 Huang 描述的現象;在第 03 節的真實 N2 片段,若用 EMD,IMF2 常常在紡錘波之間的空檔混入較慢的背景活動,切換成 EEMD 後會乾淨許多。這解釋了為什麼睡眠分期的文獻幾乎都用 EEMD/CEEMDAN。
IMF 就等於 δ、θ、α、σ、β 頻帶嗎?
不是。IMF 是資料自適應的,同一個 IMF 的瞬時頻率在 30 秒內可能從 3 Hz 漂到 8 Hz;不同 epoch 的「IMF 3」也不一定對應同一個頻帶。本站用能量加權的平均瞬時頻率把 IMF「暫時」歸到傳統頻帶只是為了方便閱讀。做分類時要特別小心「IMF 編號對齊」的問題——這也是 EEMD 固定模態數、MEMD 對齊多通道的動機之一。
第 06 節的分期示意為什麼只有 16 個片段?準確率能相信嗎?
16 個片段是為了讓瀏覽器能即時算完整條流程(EMD 每個 epoch 約 1–3 毫秒)。留一法最近質心的準確率只能說明「這兩個特徵有沒有區分力」,不能推論到真實效能;正式研究用數千個 epoch、多位受試者與交叉驗證,而且 N1 期在人工判讀之間的一致性本來就低。
資料為什麼選 Sleep-EDF SC4002E0?
它是課程 Week 1 作業指定的公開資料,我們已在先前作業用 YASA 做過自動分期(準確率 84.2%、κ = 0.79),對這位受試者的整夜結構有把握。片段挑選避開階段邊界、排除 >150 µV 的雜訊;清醒期另外排除振幅 >80 µV 的眼動/汗液漂移片段,否則 EMD 的能量會被 0.3 Hz 的漂移主導。
部署:為什麼是 GitHub Pages 而不是 Zeabur?
作業原本要求部署到 Zeabur。查閱 Zeabur 官方文件(2026 年 9 月)後確認其「共享叢集」已停止服務,新帳號必須先綁定付費的專用伺服器才能建立專案;2026-09-23 以 Zeabur CLI 實測,建立專案時 API 回覆「Shared clusters are deprecated. Please rent a Server」,最便宜的伺服器為每月 3 美元。因此改為雙平台:GitHub Pages(主要網址)與 Cloudflare Workers(emd-sleep-explorer.emd-sleep-explorer.workers.dev,以 wrangler.jsonc 靜態資產模式部署)。repo 內同時保留 zeabur.json 與一鍵腳本 tools/deploy_zeabur.sh,租用伺服器後即可部署,不需修改任何檔案。本站是純靜態網站,不需要任何後端。
我們怎麼確認自己寫的 EMD 是對的?
兩層驗證。第一層是有解析解的單元測試(tests/test_emd.mjs):Bluestein FFT 對照直接 DFT、Hilbert 轉換對純音給出正確的瞬時頻率與振幅、EMD 完備重建(誤差 10⁻¹⁴)、雙音分離、模態混疊下 EEMD 優於 EMD。第二層是與 Python 套件 PyEMD 在同樣 16 個真實 epoch 上交叉比對(docs/validation.md):用本站預設的 Huang 1998 SD 準則時,前三階 IMF 的相關係數中位數 0.69;把 PyEMD 額外的「極大值全為正、極小值全為負」條件也加進來(strictExtrema 選項)後升到 0.83,高、低頻合計的相關係數 0.87/0.89。結論:差異來自停止準則而非實作錯誤,而且 PyEMD 多篩幾次會把 IMF1 的頻率系統性推高,正是「過度篩選」的實例。
整夜的結果說明了什麼?
第 07 節把整夜 1128 個 epoch 全部做 EMD 與 EEMD。只用「δ 頻帶 IMF 能量占比」與「訊號 RMS」兩個特徵、最近質心分類器,留一法準確率 68%、κ 0.58,N3 幾乎全對、N1 幾乎全錯。把 10 個摘要特徵交給 k-NN 後升到 83%;改用 EEMD 特徵(模態對齊、σ/α 能量不再幾乎為 0)再升到 84.5%、κ 0.79,與 Week 1 作業用 YASA(數十個頻譜特徵 + LightGBM)在同一位受試者得到的 84.2%、κ 0.79 相當。這說明 IMF 特徵確實蘊含了睡眠結構的主要資訊,而且 EEMD 對「特徵對齊」的幫助是可量化的——正是 Hassan 與 Bhuiyan 系列論文走的路。但這是單一受試者內的留一法,相鄰 epoch 高度相關,數字比跨受試者驗證樂觀。
已知限制
- EMD 沒有解析理論,結果對取樣率、雜訊、停止準則與邊界處理都敏感。
- EEMD 的運算量是 EMD 的 N 倍;在瀏覽器裡 200 次集成約需 1 秒。
- Hilbert 瞬時頻率在振幅接近 0 的時段會發散,Hilbert 譜在這些點不可靠。
- 只用單一受試者的單一導程;Fpz-Cz 靠近前額,易受眼動影響。