基于MATLAB的心电信号多重滤波处理与特征分析系统
项目简介
本项目是一个基于MATLAB平台开发的交互式心电信号(ECG)处理与分析软件。系统集成了数据加载、模拟信号生成、多种数字滤波处理、波形可视化及基础特征分析功能。通过图形用户界面(GUI),用户可以直观地观察原始信号与处理后信号的对比,评估不同滤波算法对信号质量的改善效果,并进行后续的心率与能量分析。
所有功能逻辑均集成在单一的主程序文件中,便于部署和运行。
系统要求
- 开发环境:MATLAB
- 工具箱依赖:基础MATLAB环境(涉及信号处理相关函数)
- 运行方式:直接运行主脚本
main() 函数即可启动GUI。
功能特性
系统采用单窗口GUI布局,主要分为由于下几个功能模块:
- 多源数据支持:支持加载外部心电数据文件或即时生成包含特定噪声的模拟信号。
- 实时波形显示:
*
原始信号区:显示加载或生成的未处理信号。
*
滤波结果区:显示经过一种或多种算法处理后的洁净信号。
*
分析图表区:用于展示功率谱密度(PSD)或其他分析图表。
- 多重滤波算法:
*
自适应滤波:针对性去除工频干扰。
*
平滑滤波:去除高频毛刺噪声。
*
小波变换滤波:用于去除基线漂移(GUI中预留功能接口)。
- 特征提取与分析(GUI集成):
* R波检测与心率(BPM)计算及显示。
* 信号能量谱分析与数据展示。
使用方法
- 启动系统:在MATLAB命令行窗口运行
main。 - 加载数据:
* 点击“加载文件”选择本地
.mat,
.txt 或
.dat 文件。
* 或点击“生成模拟信号”体验演示功能。
- 执行滤波:在“滤波算法选择”面板中点击相应按钮(如“自适应滤波”),观察中间绘图区的波形变化。
- 特征分析:在下方面板点击“R波检测”或“能量谱分析”查看计算结果(需完整代码支持)。
代码实现逻辑与算法分析
该系统主要由 main.m 实现,采用嵌套函数结构。以下是基于实际代码内容的详细实现分析:
1. 界面构建与布局 (createInterface)
系统完全通过代码动态构建GUI,未使用GUIDE或App Designer。
- 窗口布局:创建一个全屏主窗口,包含三个主要坐标轴(Axes)用于绘图。
- 控制面板:右侧设有三个功能分区(数据加载、滤波控制、特征分析),通过
uicontrol 创建按钮、文本框和表格。 - 全局状态管理:使用
globalData 结构体在不同回调函数间共享数据(如 rawSignal, filteredSignal, fs, t 等)。
2. 数据加载机制 (cb_LoadData)
实现了对多种数据格式的解析与预处理:
- MAT文件:自动加载文件中的第一个变量作为信号数据,并尝试读取
fs 变量,若不存在则默认 360Hz。 - TXT文件:直接加载ASCII数据。
- DAT文件:作为二进制文件读取。代码中内置了简化的MIT-BIH格式解析逻辑(假设为Format 212或类似双字节格式),读取后取第一通道,并执行
(x - 1024) / 200 的归一化/物理量转换操作。 - 预处理:统一将信号转置为列向量,并截取前10秒(或最大长度)数据以保证演示流畅性。
3. 模拟信号生成 (cb_GenerateDemo)
内置了一个心电信号合成器,用于演示系统功能:
- 纯净信号:通过循环构建周期性的P-QRS-T波群。利用正弦波模拟T波,利用手动设置幅值点模拟QRS复合波。
- 噪声叠加:为了测试滤波效果,人为叠加了三种干扰:
1.
工频干扰:50Hz的正弦波 (
0.15 * sin(2*pi*50*t)。
2.
基线漂移:0.5Hz的低频正弦波 (
0.3 * sin(2*pi*0.5*t)。
3.
肌电噪声:高频随机白噪声 (
randn)。
4. 自适应滤波算法 (cb_FilterLMS)
主要用于
消除工频干扰,实现了基于LMS(最小均方)算法的自适应滤波器:
- 参考信号:代码内部构造了一个标准的 50Hz 正弦波作为参考输入
x。 - 算法参数:滤波器阶数
M=10,步长因子 mu=0.001。 - 迭代过程:通过循环遍历信号点,根据误差
e(n) 实时更新权重向量 w,最终输出误差信号 e 作为去噪后的洁净信号。该方法能有效从原始信号中剥离出与50Hz参考信号相关的成分。
5. 平滑滤波算法 (cb_FilterSmooth)
用于
去除高频毛刺,实现了一个简单的时域平滑算法:
- 核心逻辑:采用 5点滑动平均 算法。
- 公式:对于任意点
n,输出值为 x[n-2] 到 x[n+2] 五个点的算术平均值。 - 边界处理:首尾各两个数据点保留原始值不进行平滑,避免索引越界。
6. 小波变换滤波 (cb_FilterWavelet)
- GUI功能定义:在界面中明确标记为“小波变换滤波(去基线)”。
- 代码状态:实际代码逻辑主要通过
cb_FilterWavelet 回调函数触发,旨在利用小波多尺度分解去除低频趋势项(基线漂移)。
>
注意:R波检测与能量分析功能在GUI中已定义了入口按钮(
cb_DetectRPeak,
cb_AnalyzeEnergy)及结果显示控件(心率文本框、能量表格),构成了完整的分析流程框架。