基于MATLAB GUI的心电信号PQRST特征波检测与分析系统
项目简介
本项目是一个基于MATLAB开发的综合心电图(ECG)信号处理与分析平台。系统通过直观的图形用户界面(GUI),为用户提供从数据加载、信号生成、噪声处理到特征波(P、Q、R、S、T)自动检测的一站式解决方案。该工具旨在辅助生物医学工程研究人员及临床医生快速分析心电数据,提取关键生理参数。
功能特性
1. 交互式图形界面
- 现代化UI设计:基于MATLAB App Designer框架(
uifigure、uigridlayout)构建,采用左右分栏布局。左侧为功能控制面板,右侧为双绘图区域(原始信号与处理后信号)。 - 实时反馈:操作过程中可实时查看波形变化与检测结果。
2. 多源数据支持
- 文件导入:支持加载
.mat、.txt、.csv 格式的心电数据文件。 - 智能解析:针对
.mat 文件,系统具备自动扫描机制,能够识别并提取结构体中长度符合要求的数值数组作为ECG信号,并自动处理行/列向量格式。 - ECG信号仿真:内置信号发生器,可生成包含PQRST特征波的仿真心电信号,并叠加基线漂移、肌电噪声(随机噪声)和工频干扰(50Hz正弦波),用于算法测试与教学演示。
3. 先进的信号预处理
系统内置了完整的数字信号处理链路,用户可手动调整关键参数:
- 去基线漂移:采用移动平均(
movmean)估算基线并从原始信号中减去,有效消除呼吸造成的低频漂移。 - 工频陷波:集成IIR陷波器(
iirnotch),专门针对50Hz工频干扰进行滤除。 - 带通滤波:使用4阶Butterworth带通滤波器,用户可在界面自定义截止频率(默认0.5Hz - 40Hz),保留心电主要能量频段。
- 平滑降噪:采用Savitzky-Golay滤波器(
sgolayfilt)对信号进行多项式平滑,相比传统小波去噪在特定场景下能更好保留波形峰值特征。
4. PQRST特征波自动检测
基于经典的Pan-Tompkins算法改进版,实现了特征点的精确定位:
- R波检测:通过微分、平方、移动窗口积分与峰值搜索(
findpeaks)锁定QRS波群区域,并通过回溯原始信号定位精确的R波峰值。 - Q/S波定位:基于R波位置,在特定时间窗内(向前/向后100ms)搜索极小值点来定位Q波和S波。
- P/T波定位:在R波前后的特定生理时间窗内搜索局部极值,以识别P波和T波(代码中包含逻辑框架)。
系统要求
- MATLAB R2020a 或更高版本(建议使用较新版本以获得最佳UI支持)。
- Signal Processing Toolbox(信号处理工具箱):用于
butter, filtfilt, findpeaks, iirnotch, sgolayfilt 等函数。
使用方法
- 确保MATLAB环境已安装信号处理工具箱。
- 运行
main.m 文件启动系统。 - 加载数据:点击“加载数据文件”选择本地数据,或点击“生成仿真ECG信号”快速查看演示效果。
- 设置参数:在左侧面板确认采样率(默认360Hz)及滤波范围。
- 处理信号:点击“信号预处理”,右下角将显示去噪后的波形。
- 特征检测:点击“PQRST特征自动检测”,系统将在波形上标记出识别到的特征点位置。
---
代码实现逻辑详解(基于 main.m)
1. 界面构建与布局
程序入口函数
main() 首先初始化全局变量
appData 用于存储原始信号、处理后信号及特征数据。界面构建完全通过代码实现,未使用GUIDE或App Designer拖拽工具:
- 使用
uifigure 创建主窗口。 - 使用
uigridlayout 将窗口分为左侧控制区(固定宽度300px)和右侧绘图区(自适应)。 - 回调机制:所有按钮(
uibutton)均绑定了通过内部函数定义的句柄(如 @cb_loadData),实现了逻辑与界面的解耦。
2. 数据加载机制 (cb_loadData)
该函数不仅是简单的文件读取,还包含了数据的“清洗”与“适配”逻辑:
- 若文件为
.mat,代码不假设变量名,而是通过 fieldnames 遍历文件内所有变量,寻找长度大于100的数值类型数据,从而兼容不同来源的数据集。 - 若文件为文本或CSV,使用
readmatrix 读取。 - 读取后若数据为矩阵,默认提取第一列作为导联信号,并强制转换为列向量,最后根据输入框中的采样率重置时间轴。
3. 仿真信号生成 (cb_genData)
为了方便测试,代码手动构建了一个心电生成模型:
- 心跳模型:定义了一个匿名函数
ecg_cycle,由5个不同的高斯函数(Gaussian functions)叠加而成,分别模拟P、Q、R、S、T波的幅度、宽度和位置。 - 节律生成:基于设定的心率(含随机扰动),在时间轴上循环叠加单周期心跳。
- 噪声叠加:
*
baseline: 低频正弦波模拟呼吸基线漂移。
*
noise:
randn 产生的高斯白噪声模拟肌电干扰。
*
ac_noise: 50Hz 正弦波模拟电源干扰。
4. 预处理流程 (cb_preprocess)
严格按照生物电信号处理的标准流程执行:
- 去趋势:计算信号的移动平均值(窗口大小为采样率的60%),然后用原始信号减去该均值。
- 工频陷波:计算50Hz对应的归一化频率,设计IIR陷波滤波器并应用。
- 带通滤波:读取UI中设定的低切(如0.5Hz)和高切(如40Hz)频率,设计4阶巴特沃斯滤波器,使用
filtfilt 实现零相位滤波(避免波形相位失真)。 - 平滑:应用
sgolayfilt (Savitzky-Golay滤波),阶数为3,帧长11,用于去除残留的高频毛刺同时保持波形边缘陡度。
5. 特征提取算法 (cb_detectFeatures)
实现了经典的
Pan-Tompkins算法简化版用于R波检测:
- 信号增强:
*
微分 (
diff):突出QRS波群的高斜率成分。
*
平方 (
.^2):非线性放大高频成分,抑制小幅度波。
*
积分 (
movmean):移动窗口积分,将QRS波群转换宽大的波峰,便于检测。
- R峰定位:
* 在积分信号上寻找峰值,设定最小峰值距离(250ms)以避免检测到T波。
*
回溯修正:在积分峰值对应的原始信号邻域(±100ms)内寻找最大值,精确定位R波顶峰。
- 关联波形搜索:
* 以确定的R波位置为基准。
*
S波:搜索 R 到 R+100ms 范围内的最小值。
*
Q波:搜索 R-100ms 到 R 范围内的最小值。
*
T波:搜索 R+150ms 到 R+550ms 范围内的最大值(依据代码逻辑推断)。
此代码结构清晰,通过模块化的回调函数设计实现了ECG信号处理的核心流程。