MIT-BIH 心律失常数据库解析工具
项目介绍
本项目是一个专门用于解析 MIT-BIH 心律失常数据库的标准 MATLAB 脚本。心电图(ECG)信号在存储时为了节省空间,通常采用特殊的二进制压缩格式(如 Format 212)。本程序能够直接读取这类二进制数据,并将其精确还原为具有物理意义的电压信号(毫伏)。该工具为生物医学工程研究人员提供了一个从原始临床数据库到 MATLAB 分析环境的桥梁,支持后续的信号处理、特征提取及机器学习模型开发。
功能特性
- 多文件协同解析:能够同步处理数据库中的标题文件、二进制数据文件和标注文件。
- 212 格式硬解码:实现了复杂的位操作逻辑,能够从每 3 个字节的原始码流中恢复出两个 12 位的采样点。
- 物理单位自动化转换:依据标题文件定义的增益和基线参数,自动完成从原始数字单位到物理单位(mV)的映射。
- 同步时间轴生成:根据文件的采样频率自动构建高精度的时间向量。
- 标注信息叠加展示:支持提取心拍标注位置,并将其与心电波形同步可视化。
- 多通道支持:适配常见的双导联(如 MLII 和 V1/V2/V5)记录结构。
系统要求
- 软件平台:MATLAB R2016b 或更高版本。
- 硬件需求:标准桌面级内存(取决于处理的数据量大小)。
- 数据源:需包含 MIT-BIH 标准格式的后缀名为 .hea、.dat 及 .atr 的数据文件。
使用方法- 将项目脚本存放在包含目标数据文件的目录下。
- 在脚本开头部分设置文件路径以及对应的记录编号(通常为三位数字)。
- 运行脚本。
- 运行结束后,系统将弹出可视化波形窗口,并在控制台打印该记录的详细摘要信息。
核心功能与实现逻辑
该程序通过六个核心步骤实现数据的完整生命周期管理:
1. 参数配置与资源定义
程序首先定义文件系统的路径及记录名,作为搜索相关二进制资源的唯一标识。它采用自动化路径拼接方式,确保多文件读取的准确性。
2. 标题文件解析算法
程序使用文本扫描器逐行解析描述文件。其底层逻辑是从第一行提取记录名称、通道数、采样频率和总采样点数。随后进入循环,解析每个信号通道特有的增益、基线偏移量以及信号名称(如 MLII)。这里采用了动态提取策略,即使增益和基线信息中夹杂非标字符(如单位括号),也能准确提取数值。
3. Format 212 格式解码逻辑
这是代码中最关键的算法部分。根据 MIT-BIH 标准,每三个字节(24位)存储两个连续采样。
- 信号 1 的构建:通过提取第二个字节的低 4 位作为高位偏移,结合第一个字节作为低位,通过位移运算拼接。
- 信号 2 的构建:通过提取第二个字节的高 4 位作为高位偏移,结合第三个字节作为低位,通过位移运算拼接。
- 该逻辑支持大批量矩阵计算,显著提高了读取大规模数据的效率。
4. 12位补码转换
由于解码后的原始数据是 12 位带符号整数,其表示范围为 0 至 4095。代码通过条件判定逻辑,将大于 2047 的数值减去 4096,从而实现负半周信号的正确还原,使数据符合 12 位有符号二进制补码的数学特征。
5. 标注文件解析
程序实现了针对二进制标注文件的解析。它通过读取双字节编码,识别其中的跳数跨度和标注类型。特别处理了 SKIP 代码逻辑,确保在非连续标注的情况下,采样点索引依然能保持全局同步。
6. 可视化与统计输出
程序最后将数字信号转化为物理电压信号,公式为:(采样值 - 基线)/ 增益。随后利用子图系统绘制多通道波形,并在波形上方使用红圈标记出解析到的心拍位置。控制台会同步输出记录的采样率、时长、各通道增益及其物理描述,完成数据校核。
技术实现细节分析
- 位运算应用:通过 bitshift 和 bitand 函数直接操作内存中的原始字节,避免了逐位读取的低效性,展示了高性能二进制流处理技巧。
- 内存预分配:在解码前根据标题文件的采样总数预分配矩阵空间,有效防止了动态增加数组大小时导致的内存碎片问题。
- 容错处理:在文件开启和标注解析环节加入逻辑判断,当标注文件缺失或格式不全时,程序仍能保证波形信号的正常读取与绘制。
- 标准化转换:严格遵循 PhysioNet 官方定义的 (Digital - Baseline) / Gain 转换标准,确保了数据的医学临床准确性。