MatlabCode

本站所有资源均为高质量资源,各种姿势下载。

您现在的位置是:MatlabCode > 资源下载 > 一般算法 > MIT-BIH心电数据库读取与解析工具

MIT-BIH心电数据库读取与解析工具

资 源 简 介

本项目专为生物医学工程及心电信号处理研究设计,是一个基于MATLAB环境的高效数据读取工具。其主要目的是无缝读取和解析国际通用的MIT-BIH心电数据库(MIT-BIH Arrhythmia Database)格式文件。程序核心功能包括:1. 完整解析PhysioNet标准数据格式,能够自动读取头文件(.hea)以获取采样频率、增益、导联数等配置信息;2. 通过二进制流操作解码(.dat)文件,将原始的模数转换数值转换为具有实际物理意义的毫伏(mV)级心电电压信号;3. 解析注释文件(.atr),精准提取由专家标记的心拍位置(如R波峰值)及心律失常类型;4. 提供基础的数据可视化模块,能够绘制多导联心电波形图并标记关键特征点。该项目解决了科研人员在处理非标准文本格式心电数据时的底层解码难题,为后续的心率变异性分析、QRS波检测算法开发以及深度学习模型训练提供了可靠的数据接口。

详 情 说 明

MIT-BIH 心电数据库读取与解析系统

项目简介

本项目是一个基于 MATLAB 环境开发的生物医学工程工具,专用于读取、解析和可视化国际通用的 MIT-BIH 心电数据库(MIT-BIH Arrhythmia Database)。该系统旨在解决非标准二进制心电数据的底层解码难题,能够独立完成从头文件配置读取、二进制信号解压到注释文件解析的全流程,并将原始 AD 转换数值转换为具有临床意义的物理电压信号(mV)。

核心功能特性

  • 自动化数据完整性检查:系统启动时自动检测目标记录文件是否存在,若未检测到本地数据,具备自动生成符合 MIT-BIH 格式(Format 212)模拟数据的能力,确保程序即刻可运行。
  • PhysioNet 头文件解析:能够读取 .hea 文本文件,解析采样率(Fs)、信号通道数、样本总数、数据格式、增益(Gain)、基线(Baseline)以及 ADC 零点信息。
  • Format 212 二进制压缩解码:内置专用的解压算法,能够处理 MIT-BIH 数据库特有的 Format 212 存储格式(即每 3 个字节存储 2 个 12 位样本),并正确处理符号位。
  • 物理量转换:依据头文件中的增益和 ADC 零点参数,自动将原始整数信号转换为毫伏(mV)单位。
  • 注释文件解析:能够读取 .atr 二进制文件,提取心拍位置(时间点)和心拍类型(如正常心拍 N、左束支阻滞 L、室性早搏 V 等)。
  • 数据可视化:提供多通道波形绘制功能,支持并列显示心电信号波形。

系统要求

  • MATLAB R2016b 或更高版本
  • 无需额外的工具箱(Toolbox),纯底层代码实现

使用方法

  1. 确保项目文件在 MATLAB 的当前工作路径中。
  2. 直接运行主程序脚本。
  3. 程序将按以下流程执行:
* 环境清理。 * 检测并加载(或生成)mitdb_demo_100 数据集。 * 在控制台输出解析到的头文件信息(采样率、通道数等)。 * 在控制台输出信号解码进度及矩阵大小。 * 在控制台输出读取到的注释点数量。 * 自动弹出窗口绘制前 10 秒的心电波形。

技术实现与算法详解

本项目完全基于 MATLAB 基础函数编写,未依赖外部库。以下是各模块的底层实现逻辑:

1. 头文件解析逻辑

程序通过文本流操作逐行读取 .hea 文件:
  • 基础信息提取:第一行通过字符串分割获取信号数和采样率。针对特殊的采样率格式(如 360/360),程序包含专门的分割逻辑以提取有效的频率数值。
  • 通道参数提取:逐行解析每个通道的配置。对于增益参数,程序能够处理 200(1024) 这种包含基线的格式,将其分离为增益值和基线值。同时,程序尝试解析 ADC 零点值,若未显式指定分辨率字段,则提供默认的安全处理逻辑。

2. Format 212 信号解码算法

这是本项目的核心模块,用于处理 .dat 文件中的二进制流。由于 Format 212 是一种非字节对齐的压缩格式,解析逻辑如下:
  • 块读取:将二进制数据流按字节(uint8)读取,并以 3 个字节为一个处理单元(Block)。
  • 位操作重组
* 样本 1:由第 1 个字节(低 8 位)和第 2 个字节的低 4 位组成。 * 样本 2:由第 3 个字节(低 8 位)和第 2 个字节的高 4 位组成。
  • 12-bit 有符号数处理:由于重建后的数值是 12 位无符号形式,程序通过检测数值范围(大于 2047 则判定为负数)并减去 4096($2^{12}$),实现了正确的补码还原。
  • 物理量计算:应用公式 (原始值 - ADC零点) / 增益,完成从数字量化值到物理电压值的映射。

3. 注释文件(ATR)解析机制

解析器读取 .atr 文件中的 16 位整数(Word),并执行以下位掩码操作:
  • 指令分解:通过右移 10 位提取高 6 位的 Code(注释类型),通过与操作提取低 10 位的 Data(通常为时间增量)。
  • 时间累积:MIT-BIH 格式使用差分时间存储。程序维护一个全局时间计数器,逐个累加读取到的时间增量。
  • 特殊代码处理
* SKIP (Code 59):检测到长跳跃指令时,自动读取后续两个 Word 组合成 32 为长整数作为时间偏移。 * AUX (Code 60-63):检测到辅助字符串信息时,根据长度字段跳过相应的字节,避免解析错误。
  • 类型映射:利用哈希表(Map)将数字编码(如 1, 5)映射为字符标识(如 'N', 'V'),用于后续展示。

4. 模拟数据生成机制

为了保证程序的独立运行能力,代码中包含了一个防御性逻辑:当检测到本地缺失 .hea 文件时,会调用内部生成器构建一套符合 Format 212 规范的模拟数据。这使得用户在下载真实数据库之前即可测试代码逻辑。