「ECG信號處理——(21)基于Pan-Tompkins和隨機森林(RF)的睡眠呼吸暫停檢測算法」2025年7月4日

目錄

1、引言

2、數據庫介紹(Apnea-ECG Database)

3、基于Pan-Tompkins和隨機森林(RF)的睡眠呼吸暫停檢測算法

3.1 算法概述

3.2 心電信號預處理及QRS波檢測算法

3.3 心電信號的隨機森林睡眠呼吸暫停識別

4、實驗結果

4.1 心電信號預處理及QRS波檢測結果

4.2 睡眠呼吸暫停分類結果

4.3 實驗結果評估

參考文獻


1、引言

????????睡眠呼吸暫停綜合征(Sleep Apnea Syndrome, SAS)是一種常見睡眠障礙,涵蓋阻塞性、中樞性和混合型等多種類型,以阻塞性最為常見。患者睡眠中反復出現呼吸暫停或低通氣,導致身體生理功能紊亂,引發白天嗜睡、疲勞、頭痛、認知障礙等,長期會增加心血管、代謝和神經系統疾病風險,嚴重威脅健康[1]。目前,多導睡眠監測(Polysomnography, PSG)是診斷 SAS 的金標準,可同步記錄多種生理信號,全面評估睡眠和呼吸狀態。但 PSG 設備昂貴、操作復雜、耗時且可能干擾患者睡眠,影響結果客觀性,限制了其廣泛應用[2]。

圖1:睡眠呼吸暫停患者正在佩戴呼吸機

????????睡眠呼吸暫停事件會引發自主神經系統的顯著變化,這種變化直接反映在心電信號中[3]。當呼吸暫停發生時:

  1. 血氧飽和度下降激活頸動脈體化學感受器

  2. 交感神經興奮性增強導致心率變異性改變

  3. 胸腔內壓劇烈波動引起R波幅度變化

  4. 呼吸運動缺失使ECG信號中0.15-0.4Hz頻段能量降低

????????鑒于此,本文提出一種基于Pan-Tompkins和隨機森林(Random?Forest,RF)算法的睡眠呼吸暫停檢測算法,通過心電(ECG)數據預處理、特征提取及模型構建訓練,實現有效分類識別,旨在提供一種高效便捷的檢測手段,提高診斷效率、降低成本,助力 SAS 早期篩查與診斷,具有重要臨床意義。

2、數據庫介紹(Apnea-ECG Database)

????????該數據集包含 70 條記錄,分為一個包含 35 條記錄的學習集(a01 至 a20,b01 至 b05,以及 c01 至 c10)和一個包含 35 條記錄的測試集(x01 至 x35)。所有記錄均可從本頁面下載。每條記錄的時長在略不足 7 小時到近 10 小時之間不等。

????????每條記錄包含:

  1. 一條連續的數字化心電圖(ECG)信號

  2. 一組呼吸暫停標注(由人類專家基于同步記錄的呼吸及相關信號得出)

  3. 一組機器生成的 QRS 波標注(所有心跳無論類型均標記為“正常”)

????????此外,有八條記錄(a01 至 a04, b01, 以及 c01 至 c03)額外附帶了四條信號:

  • Resp C 和 Resp A:使用感應式體積描記法(inductance plethysmography)獲取的胸部和腹部呼吸努力信號

  • Resp N:使用鼻熱敏傳感器(nasal thermistors)測量的口鼻氣流信號

  • SpO2:血氧飽和度信號

3、基于Pan-Tompkins和隨機森林(RF)的睡眠呼吸暫停檢測算法

3.1 算法概述

????????本算法實現了基于Pan-Tompkins和隨機森林(RF)的睡眠呼吸暫停檢測算法,主要流程包括信號預處理及QRS波檢測睡眠呼吸暫停分類兩個部分。其中,Pan-Tompkins算法用于信號預處理和檢測QRS波,隨機森林分類算法用于睡眠呼吸暫停檢測。

????????算法流程框圖如下:

圖2:睡眠呼吸暫停檢測算法流程框圖

? ? ? ? (1)信號預處理:通過Pan-Tompkins算法對心電信號進行預處理,可以提高QRS波和RR間隔的檢測準確率,并且減少噪聲干擾的影響,為后續疾病診斷和判別提供更加可靠的數據基礎。

? ? ? ? (2)Pan-Tompkins算法:利用濾波器和移動平均器來增強QRS波信號,通過閾值檢測來確定QRS波的位置,在心電信號處理領域被廣泛應用。

? ? ? ? (3)睡眠呼吸暫停檢測:采用隨機森林分類器來判斷是否存在睡眠呼吸暫停現象。通過隨機選取特征子集進行訓練,得到多個決策樹模型,然后將這些模型組成一個隨機森林分類器。

????????最終可以得到睡眠呼吸暫停的檢測結果。整個算法的輸入為心電信號,輸出為睡眠呼吸暫停檢測結果。

3.2 心電信號預處理及QRS波檢測算法

????????Pam-Tompkins算法是一種經典的心電信號處理算法,用于定位和檢測QRS波[4]。

圖3:心電信號預處理及QRS波檢測算法流程框圖

????????相關內容詳情見我博客👇

「ECG信號處理——(10)Pan-Tompkins算法(R峰檢測)」2025年3月17日-CSDN博客

????????以下是Pan-Tompkins算法的簡要步驟:

????????(1)心電信號預處理。利用濾波器對信號進行預處理,以消除基線偏移和高頻噪聲。

????????(2)R峰定位。對信號進行微分,然后應用一個帶寬限制的移動平均濾波器。過濾掉QRS波的尖峰和高頻噪聲,確定R峰的位置。

????????(3)定位QRS波群。利用QRS波組的形態和周期性,以及R峰的位置,識別Q波與S波,然后將每個QRS波組拆分為Q-R波和R-S波。

????????(4)匹配QRS波群心率。通過計算QRS波群之間的時間間隔,即RR間期。

????????(5)后處理和重采樣。最后對QRS波群進行后處理和重采樣。

圖4:Pan-Tompkins算法流程圖

3.3 心電信號的隨機森林睡眠呼吸暫停識別

????????隨機森林(Random?Forest,RF)是一種集成學習算法,核心思想是在隨機的特征子集和隨機的樣本子集上訓練多個決策樹,最終利用這些決策樹的投票結果或平均結果來得到最終的分類結果[5]。

????????

圖5:隨機森林生成過程示意圖

????????本文對心電特征分類采用的是隨機森林算法,目的是將患有睡眠呼吸暫停綜合征的數據和非睡眠呼吸暫停綜合征數據分離開。本文選擇了RR間期的8個時域特征。

圖6:隨機森林算法流程框圖

????????隨機森林的模型訓練和測試步驟如下:

????????(1)加載a、b、c編號的數據,使用特征提取特征的函數進行特征提取,將數據的特征存儲為f-a、f-b、f-c三個矩陣。

????????(2)合并所有數據特征,將三個矩陣合并為一個特征矩陣,然后將數據進行隨機打亂消除數據之間的順序性。

????????(3)構建和訓練隨機森林模型,將特征矩陣劃分為訓練集和測試集,搭建隨機森林分類器并對訓練集進行擬合。

????????(4)用隨機森林模型對測試集進行預測,并將預測結果與真實標簽進行對比。最后使用混淆矩陣進行模型性能的評估。

????????隨機森林算法通過在多個隨機的樣本和特征集合上構建多個相互獨立的決策樹,提高算法的準確率和泛化能力,在分類和回歸任務中都有廣泛的應用。

4、實驗結果

4.1 心電信號預處理及QRS波檢測結果

????????本研究將數據集按照1:1比例劃分為訓練集和測試集,使用Matlab對Apnea-ECG數據庫進行實驗,使用交叉驗證方法選擇最優的模型參數,并分析模型的性能指標。

????????首先讀取Apnea-ECG數據庫。然后從標注文件里提取出標注信息,并將ECG信號數據分為1分鐘的小段,將分段后的心電信號分為正常和異常兩類。

圖7:正常原始心電信號波形圖

圖8:異常原始心電信號波形圖

????????異常心電信號通常表現為峰值振幅、持續時間和波形形態的異常變化。在呼吸暫停期間,心電信號的波形可能會出現振幅減小,時間延長等變化,而在呼吸暫停結束后這些指標會得到恢復。

????????心電信號預處理是對采集到的心電信號進行去噪、濾波、歸一化等處理,以提高信號質量和可用性。

????????(1)進行帶通濾波。我們設計的是一個截止頻率為5-15Hz的帶通濾波器。

圖9:經帶通濾波器處理過的正常心電信號

圖10:經帶通濾波器處理過的異常心電信號

????????信號中的噪聲和雜波被去除一部分,變得平滑和清晰,有利于后續的處理和分析。

????????(2)進行差分運算。差分運算可以將離散時間序列中相鄰時刻兩個數值的差計算出來。

圖11:經差分運算處理后的正常心電信號

圖12:經差分運算處理后的異常心電信號

????????經差分運算后,快速變化的信號例如QRS波群,差分運算會導致輸出信號的幅值增加。而緩慢變化的信號例如T波,差分運算會導致輸出信號的幅值減小。

????????(3)進行平方運算。用信號的幅值的平方替換信號本身。

圖13:經平方運算處理后的正常心電信號

圖14:經平方運算處理后的異常心電信號

????????通過平方運算,使得QRS波群更加容易被檢測和提取。此外,平方運算還可以增強信號中高能量成分,有助于區分QRS波群和其他信號成分。

????????(4)進行平均濾波處理。平滑信號并提取QRS波峰值。使用了一個長度為0.15秒的滑動窗口,對心電信號進行移動平均操作,得到平滑處理后的心電信號。該算法可以自適應調整濾波器的閾值,以適應不同心電信號的峰值大小和幅值范圍。

圖15:經平均濾波處理后的心電信號圖

????????上圖分別表示經過移動平均濾波和各種閾值調整后的心電信號和峰值。黑色為信號中的高頻噪聲。綠色為自適應閾值線,用于自適應調整QRS波的閾值。紅色信號電平線,用于檢測QRS波的峰值。紅色圓圈表示自適應調整的QRS波閾值的位置。在平滑后的心電信號中尋找QRS波峰值位置,用于識別心電信號中的R峰位置。

????????(5)R波定位。在睡眠呼吸暫停過程中會導致低氧血癥和高碳酸血癥,通過分析QRS間隔的變化和R波的幅度變化,可以用來測量呼吸頻率和周期,提供睡眠呼吸暫停的診斷信息。

????????下圖展示了在原始ECG信號上找到的QRS脈沖信號,水平的紅線表示檢測到的R波位置。脈沖信號視為一種二進制信號,將QRS復合物與心率信號分離,方便進一步分析處理。

圖16:正常心電信號的R波脈沖

圖17:異常心電信號的R波脈沖

????????以上可得異常心電信號的R波脈沖幅度減小,這反映了心室收縮的減少或消失。有些R波脈沖的周期發生明顯變化,反映了心室收縮的減少和異常間歇。

4.2 睡眠呼吸暫停分類結果

????????我們根據8個RR期間上的時域特征對數據庫進行模型訓練和模型測試。合并數據集特征,隨機打亂數據的順序,創建隨機森林分類器。測試分類器的分類效果,使用訓練好的分類器模型,在測試集上進行分類,并使用混淆矩陣評估模型的分類效果,測試結果如下。

圖18:測試結果1

????????左上角矩陣中的1代表正常標簽數據,其中1152個預測正確,108預測錯誤,正常信號識別率為91.4%。左上角矩陣中的8代表異常標簽數據,其中665個預測正確199個預測錯誤,正確率為87.0%。左下角的矩陣意思是預測為1類的數據中1152個是真正的1,99個是標記為8但是預測為1的,假陰率為7.9%。

????????由于每次樣本集都隨機打亂,所以每次得到的結果都不同。

圖19:測試結果2

????????此次的運行結果是20次運行結果中睡眠呼吸暫停識別準確率最低的。其中91.1%的正常信號進行識別,81.9%的睡眠呼吸暫停被正確識別,假陰性為11.1%。

圖20:測試結果3

????????這次的運行結果是20次運行結果中正常信號識別準確率最低的。其中90.6%的正常信號進行識別,83.1%的睡眠呼吸暫停被正確識別,假陰性為10.4%。

????????進行20次重復實驗,求其平均準確率,統計結果如表1所示。

表1 睡眠呼吸暫停檢測結果表

編號

標簽數目

正常信號識別率

睡眠呼吸暫停識別率

假陰性

1

1260

91.4%

87.0%

7.9%

2

1244

91.1%

81.9%

11.1%

3

1247

90.6%

83.1%

10.4%

4

1250

91.0%

85.6%

9.8%

5

1244

91.1%

81.9%

11.1%

6

1248

90.8%

84.2%

10.9%

7

1246

90.9%

82.3%

10.8%

8

1256

91.2%

87.1%

8.7%

9

1247

90.6%

83.1%

10.4%

10

1260

91.4%

87.0%

7.9%

11

1256

91.2%

87.1%

8.7%

12

1244

91.1%

81.9%

11.1%

13

1250

91.0%

85.6%

9.8%

14

1260

91.4%

87.0%

7.9%

15

1248

90.8%

84.2%

10.9%

16

1247

90.6%

83.1%

10.4%

17

1260

91.4%

87.0%

7.9%

18

1256

91.2%

87.1%

8.7%

19

1246

90.9%

82.3%

10.8%

20

1250

91.0%

85.6%

9.8%

平均

1251

91.3%

84.7%

9.8%

4.3 實驗結果評估

????????本論文設計的基于Pan-Tompkins和隨機森林(RF)的睡眠呼吸暫停檢測算法得到了魯棒性和穩健性的驗證。通過觀察混淆矩陣,得到了比較直觀的結果:該算法對正常信號識別率為91.3%,對有睡眠呼吸暫停現象發生的異常信號識別率為84.7%,假陰率為9.8%。

參考文獻

[1] 陳亮,劉云,曾麗珠,朱能琴,黃道蘭.便攜式睡眠監測儀在阻塞性睡眠呼吸暫停低通氣綜合征診斷中的價值分析[J].實用中西醫結合臨床,2022,22(11):87-89+128.DOI:10.13638/j.issn.1671-4040.2022.11.026.

[2] Qi Pengjia,Gong Shuaikui,Jiang Nan,Dai Yanyun,Yang Jiafeng,Jiang Lurong,Tong Jijun. Mattress-Based Non-Influencing Sleep Apnea Monitoring System.[J]. Sensors (Basel, Switzerland),2023,23(7).

[3] 董孝彤,曲新亮,魏守水.用于睡眠呼吸暫停檢測的心電特征穩定性分析[J].生物醫學工程研究,2020,39(01):6-10.DOI:10.19529/j.cnki.1672-6278.2020.01.02.

[4]?Pan J, Tompkins W J. A real-time QRS detection algorithm. IEEE Transactions on Biomedical Engineering, 1985, 32(3): 230-236

[5] Breiman, L. (2001). Random Forests. Machine Learning, 45(1), 5-32.

Tips:下一講,我們將進一步探討,心電信號處理與應用的其他部分。

以上就是基于Pan-Tompkins和隨機森林(RF)的睡眠呼吸暫停檢測算法的全部內容啦~

我們下期再見,拜拜(?v?) ~

(Ps:有代碼實現需求,請見主頁信息,謝謝支持!~)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87889.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87889.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87889.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++學習之STL學習:list的模擬實現

在上一篇學習了list的使用后,在本篇我們將通過模擬實現的方式深入了解list的底層運作原理。 作者的個人gitee:樓田莉子 (riko-lou-tian) - Gitee.com 感興趣的讀者可以看一看 目錄 前置準備 結點的定義 鏈表類的定義 迭代器 普通迭代器 const迭代器 …

不引入變量 異或交換的缺點

文章目錄選擇排序正確代碼交換兩個數位置的方法引入中間變量不引入中間變量,使用異或的方法錯誤原因優化代碼選擇排序正確代碼 // 數組中交換i和j位置的數public static void swap(int[] arr, int i, int j) {int tmp arr[i];arr[i] arr[j];arr[j] tmp;}// 選擇排…

VS Code中使用Git的方法:環境配置與Git操作

本文介紹在Windows電腦的VS Code中,配置Git環境并使用Git命令、功能的方法。 1 環境部署 首先,我們需要分別安裝Git環境與VS Code軟件。這里需要注意,即使是在VS Code中使用Git,也需要我們首先在電腦上單獨配置好Git的環境&#…

在 Windows 上安裝和運行 Apache Kafka

Apache Kafka是一款開源應用程序,用于實時處理海量數據流。Apache Kafka 是一個發布-訂閱消息系統。消息系統允許您在進程、應用程序和服務器之間發送消息。廣義上講,Apache Kafka 是一款可以定義主題并進行進一步處理的軟件。 下載和安裝 Apache Kafk…

【嵌入式電機控制#8】編碼器測速實戰

一、編碼器測速重要參數有刷電機編碼器參數(其他的后面會慢慢提及,也可以在某寶看)1. 編碼器分辨率(PPR)2. 編碼器工作電壓 3. 電機減速比 例如 30:1 指的就是電機減速軸轉1圈,編碼器轉30圈。注…

在C#中,可以不實例化一個類而直接調用其靜態字段

這是因為靜態成員(static members)屬于類本身,而不是類的實例。這是靜態成員的核心特性1. 靜態成員屬于類,而非實例當用static關鍵字修飾字段、方法或屬性時,這些成員會綁定到類級別,而不是實例級別。它們在…

Win11 安裝 Visual Studio(保姆教程 - 更新至2025.07)

Visual Studio 安裝(保姆教程 - 更新至2025.07) 前言安裝須知安裝過程1. 下載安裝包2. 安裝3. 注冊4. 創建桌面快捷方式 前言 本教程針對 非計算機相關專業的小白用戶 ,手把手教你如何基于 win11 操作系統 安裝 Visual Studio 2022。安裝搭載…

工商銀行杭州軟開校招面經分享

近年來,央國企成為了很多求職者的首選,無論是校招還是社招。不過,在選擇央國企的時候,還是盡量要選擇壟斷性或者盈利多的。 昨天看到一份 2024 年中國企業 500 強榜單中提到的最賺錢的十家央國企的名單,給大家分享一下。 排名企業名稱成立時間主要業務描述2024年營收(萬…

李宏毅genai筆記:推理

0 思考越多效果越好 可以把算力投入在training的時候,也可以投入在testing上面 連起來的線表示表現是差不多的,越高分(越右上方)越好 同樣-1000分,可以訓練時候用力較少,test的時候多用點算力 但是training…

使用SSH隧道連接遠程主機

概述 SSH(Secure Shell 的縮寫)是一種網絡協議,通過使用身份驗證機制,是兩臺計算機進行加密通信。 SSH 主要用途是登錄服務器,還可以作為加密通信的中介,充當兩臺服務器之間的通信加密跳板,這個功能稱為端口轉發(port forwarding),又稱 SSH 隧道(tunnel)。 端口…

數據結構---鏈表理解(二)

文章目錄 二、鏈表2.1 鏈表初始化2.2 單鏈表2.2.1 單鏈表---頭插法2.2.2 單鏈表---單鏈表遍歷2.2.3 單鏈表---尾插法2.2.4 單鏈表---在指定位置插入數據2.2.5 單鏈表---刪除指定位置節點2.2.6 單鏈表---獲取鏈表長度2.2.7 單鏈表---釋放鏈表 二、鏈表 暫時到這一步你就理解為&a…

Playnite使用指北 —— 一個優秀的本地化游戲管理工具

為何我們使用 Playnite? 首先我們需要知道 Playnite 是什么,如果你有過用 emby 等管理過電影影視的經驗,你可能會對這種工具感到熟悉: Playnite 是一個開源的本地化的游戲管理軟件,可以實現多平臺的管理(S…

時間與空間復雜度詳解:算法效率的度量衡

一、為什么需要復雜度分析&#xff1f; 想象你正在開發一個手機通訊錄應用&#xff0c;需要實現聯系人搜索功能。你有兩種算法可以選擇&#xff1a; // 算法A&#xff1a;線性搜索 public Contact linearSearch(List<Contact> contacts, String name) {for (Contact c …

408第三季part2 - 計算機網絡 - 交換機

理解 題目 如果你這么做 那你完了&#xff0c;因為這種叫存儲轉發 直通只轉目的地址 b 再次理解 A發數據到交換機里想給B 然后交換表會記錄A的MAC地址和端口 然后因為交換表找不到B&#xff0c;所以A會把BCD全部肘一遍&#xff08;廣播&#xff09;&#xff0c;最終只有B會…

從零開始開發純血鴻蒙應用之探析倉頡語言與ArkTS的差異

探析倉頡語言與ArkTS的差異 〇、前言一、IDE 的支持程度不同二、內置組件的使用方式不同三、頁面路由實現方式的不同四、總結 〇、前言 截止到本文發布的日期為止&#xff0c;鴻蒙官方所推薦的開發原生鴻蒙應用的語言&#xff0c;有兩種&#xff0c;分別是擴展自 Typescript 的…

Cursor/VScode ,點擊運行按鈕,就打開新的終端,如何設置為在當前終端運行文件而不是重新打開終端----一招搞定篇

我發現就是&#xff0c;我運行.py&#xff0c;點擊完運行按鈕&#xff0c;就給我重新打開一個終端&#xff0c;然后新的終端是在base環境中的&#xff0c;就跟麻煩 還得在當前終端輸入python3 test.py 來運行文件。能不能修改。1、打開cursor或者vscode 。 同時按下 ctrlshiftp…

【STM32實踐篇】:I2C驅動編寫

文章目錄I2C 物理層I2C 協議層1. 數據有效性2. 起始和停止信號3. 應答響應4. 總線的尋址方式5. 數據傳輸5.1 主機向從機發送數據5.2 主機由從機中讀數據5.3 I2C通信復合格式I2C 驅動編寫1. 配置 SCL 和 SDA2. I2C起始信號和停止信號3. 等待從設備應答4. 主機發送ACK和NACK信號5…

ragflow本地部署教程linux Ubuntu系統

以下是一份在 Ubuntu 系統上本地部署 RAGFlow 的詳細教程。 一、基礎環境準備 1.硬件要求 –CPU ≥ 4核 –RAM ≥ 16 GB –磁盤空間 ≥ 50 GB&#xff08;建議 SSD&#xff09; 2.系統配置 更新系統 sudo apt update && sudo apt upgrade -y 設置內核參數&#xff…

[netty5: WebSocketClientHandshaker WebSocketClientHandshakerFactory]-源碼分析

在閱讀這篇文章前&#xff0c;推薦先閱讀以下內容&#xff1a; [netty5: WebSocketFrame]-源碼分析[netty5: WebSocketFrameEncoder & WebSocketFrameDecoder]-源碼解析 WebSocketClientHandshakerFactory WebSocketClientHandshakerFactory 是用于根據 URI 和協議版本創…

4.2 如何訓練?個 LLM

?般??&#xff0c;訓練?個完整的 LLM 需要經過圖1中的三個階段——Pretrain、SFT 和 RLHF。 4.2.1 Pretrain 預訓練任務與架構 任務類型&#xff1a;采用因果語言模型&#xff08;CLM&#xff09;&#xff0c;通過預測下一個 token 進行訓練&#xff0c;與傳統預訓練模型…