「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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;与传统预训练模型…