You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现MIT-BIH Arrhythmia数据库ECG信号幅值与时间戳映射

MIT-BIH心律失常数据库ECG信号时间-幅值映射实现方案

核心逻辑:MIT-BIH的原始存储格式不会单独存每个采样点的时间戳,时间轴完全可以通过固定采样率计算生成,不需要额外解析复杂字段,新手按下面步骤走就能出结果。

前期准备

直接用Python实现即可,对新手最友好,不用啃复杂的二进制格式解析,先安装依赖库:
pip install wfdb numpy
其中wfdb是生理信号领域通用的信号读取库,不用自己手写二进制解析逻辑,numpy用来做数组计算。

具体实现步骤

  • 读取ECG原始记录
    先把下载好的MIT-BIH数据库文件放到指定目录,注意每条有效记录必须包含.hea头文件和.dat信号文件两个部分,缺任何一个都无法正常读取。读取代码示例:
    import wfdb
    import numpy as np
    
    # 括号内填本地存储记录的路径,不要加文件后缀
    record = wfdb.rdrecord("./mitdb/100")
    # 提取最常用的MLII导联幅值数据,新手直接取第0列即可
    ecg_amplitude = record.p_signal[:, 0]
    # 直接从记录元数据取采样率,MIT-BIH标准采样率是360Hz,读属性比硬编码更稳妥
    sampling_rate = record.fs
    
  • 生成对应时间轴(x值)
    采样率sampling_rate代表每秒采集对应数量的信号点,相邻两个点的时间间隔就是1/sampling_rate秒,直接按这个间隔生成和信号等长的时间序列即可:
    # 时间从0秒开始,长度和信号点数量完全一致,单位为秒
    ecg_time = np.arange(len(ecg_amplitude)) / sampling_rate
    
  • 组装为目标(x,y)结构数组
    把两个一维数组合并成二维数组即可,第一列为时间值,第二列为对应位置的信号幅值:
    # 最终输出数组形状为(信号点总数, 2),完全匹配x为时间、y为幅值的要求
    ecg_time_amp_array = np.column_stack((ecg_time, ecg_amplitude))
    

新手避坑提示

  • 不要手动硬编码采样率,不同衍生版本的MIT-BIH子集可能采样率存在差异,永远从读取的record对象里拿fs属性最准确
  • 如果你拿到的是他人转好的csv、mat格式数据,先确认信号是连续无缺失的,只要采样连续,时间轴的计算逻辑完全一致
  • 需要毫秒单位时间的话,把生成的ecg_time数组整体乘1000即可
  • 正确性验证方法很简单:打印数组前5行,第一列的时间值应该按0、1/360≈0.00278、2/360≈0.00556的规律均匀递增,第二列是-5~5mV区间内的ECG幅值,就说明映射关系正确。

内容的提问来源于stack exchange,提问作者user19536133

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:42:25