欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

数据集库,产数据集库的现状

终极管理员 知识笔记 55阅读

目录 1 介绍数据集2 本博客函数库代码地址以及介绍读取dat,qrc,atr文件获得 ECG_rpeaks">">">">">">_aux_note">">">">">">_sampleECG0寻找时间点函数----signal_time_sample寻找R_R峰信号以及其位置----find_R_R_peak寻找 nR 峰信号以及位置----find_nR_peak找到指定范围内的所有 nR 峰----find_nR_peaks为信号建立伴随标注信号----AFDB_create_mate_">">">">">">重采样信号长度----resample_signal_length利用小波变换去噪滤波----wavelet_denoise利用小波变换去趋势----wavelet_detrend

1 介绍数据集

MIT-BIH-AF 是一个心电图信号房颤数据集。本篇博客介绍针对该数据集开发的快捷使用的自开发函数。基础了解是MIT-BIH-AF 数据集采集有 23 人的两导联数据。总长十个小时。单个病人约920万个数据点长度。

数据集下载地址 数据集可视化地址

信号例子如图

2 本博客函数库代码地址以及介绍

如下介绍的库函数功能都是平时用得最为频繁的基础功能为了避免重复编写代码因此自己编写成库。
使用代码import MIT_BIH_AF_function as MIT_BIH_AF将本文件夹代码库加载。
库地址 读取dat,qrc,atr文件获得 ECG_rpeaks">">">">">">_aux_note">">">">">">_sampleECG0

使用数据集主要通过读取文件其中dat后缀是记录心电实际信号的文件atr后缀是心电实际信号对应的标注文件qrs后缀是心电实际信号的每个R峰的标注文件。数据集所有的信息都在这三大文件中。

import wfdb# 设置患者04015的路径mit_bih_af_path  C:/mycode/dataset/mit-bih-atrial-fibrillation-database-1.0.0/files/04015# 读取患者文件record  wfdb.rdrecord(mit_bih_af_path, physicalTrue)signal_">">">">">">otation  wfdb.rd">">">">">">(mit_bih_af_path, atr)r_peak_">">">">">">otation  wfdb.rd">">">">">">(mit_bih_af_path, qrs)# 获取关键信息ECG_rpeaks  r_peak_">">">">">">otation.sample">">">">">">_aux_note  signal_">">">">">">otation.aux_note">">">">">">_sample  signal_">">">">">">otation.sampleECG0  record.p_signal[:, 0]# 展示信号import matplotlib.pyplot as pltplt.plot(ECG0[0:2000])  # 打印输出 ECG0 信号0-2000的值plt.show()
寻找时间点函数----signal_time_sample

本函数用于在代码中找到我们看到的感兴趣段落的位置。 如可视化界面我们的时间点为 “00:06:50.316”。

import MIT_BIH_AF_function as MIT_BIH_AF # 输入时间点获取该处时间点的索引值index  MIT_BIH_AF.signal_time_sample(00:06:50.316,10:13:43,len(ECG0))# 展示该索引值左右500的信号import matplotlib.pyplot as pltplt.plot(ECG0[index-500:index500])  # 打印输出 ECG0 信号plt.show()
原采样点采样出的时间范围 寻找R_R峰信号以及其位置----find_R_R_peak

日常使用时经常遇到提取单个R峰的情况本函数具备此功能。

import MIT_BIH_AF_function as MIT_BIH_AF# 获取该处时间点的索引值index  MIT_BIH_AF.signal_time_sample(00:06:48.817,10:13:43,len(ECG0))# 根据索引值找到 R 峰信号起点s, 终点esignal, s, e  MIT_BIH_AF.find_R_R_peak(index, ECG0, ECG_rpeaks)# 展示信号import matplotlib.pyplot as pltplt.plot(signal)  # 打印输出 signal 信号plt.show()
原采样点采样出的R峰 寻找 nR 峰信号以及位置----find_nR_peak

平时使用时我们除了需要寻找一个 R 峰。我们还需要寻找 234567…等n个连续R峰信号范围以及其信号位置。此函数可以完成此功能。

import MIT_BIH_AF_function as MIT_BIH_AF# 获取 一个时间点的索引值index  MIT_BIH_AF.signal_time_sample(00:07:54.819,10:13:43,len(ECG0))# 根据索引值找到 9R 峰信号signal, s, e  MIT_BIH_AF.find_nR_peak(9, index, ECG0, ECG_rpeaks)
采集出 1R 峰采集出 2R 峰采集出 3R 峰采集出 9R 峰 找到指定范围内的所有 nR 峰----find_nR_peaks

我们除了上面的要提取单独 nR 峰。很多情况下我们还要在一段心电信号中提取出该段落的所有单个 nR 峰信号。下面代码展示了寻找一段信号中的所有 3R 峰的过程。

import MIT_BIH_AF_function as MIT_BIH_AF# 获取 起点时间点的索引值start_index  MIT_BIH_AF.signal_time_sample(00:06:48.067,10:13:43,len(ECG0))# 获取 终点时间点的索引值end_index  MIT_BIH_AF.signal_time_sample(00:06:51.764,10:13:43,len(ECG0))# 根据索引值查找 3R 峰r_peaks_position  MIT_BIH_AF.find_nR_peaks(3, start_index, end_index, ECG0, ECG_rpeaks)for i in r_peaks_position:     r_signal  ECG0[i[0]:i[1]]        # 展示信号    import matplotlib.pyplot as plt    plt.plot(r_signal)    plt.show()
第 1 个 3R 峰第 2 个 3R 峰第 3 个 3R 峰第 4 个 3R 峰 为信号建立伴随标注信号----AFDB_create_mate_">">">">">">

建立伴随标注信号在代码中存在很大的好处。使得波形提取对应的标注更加方便。避免麻烦的原信号标注类型寻找。如图下面的波形可视化原信号根据atr文件的标注可以看到患者发生了一秒左右的房颤。但数据集并不是对每一个点进行标注伴随标注信号应运而生。

import MIT_BIH_AF_function as MIT_BIH_AF# 获取 一个起点时间点的索引值start_index  MIT_BIH_AF.signal_time_sample(00:08:04.772,10:13:43,len(ECG0))# 获取 一个终点时间点的索引值end_index  MIT_BIH_AF.signal_time_sample(00:08:11.672,10:13:43,len(ECG0))# 建立原信号的伴随标注信号ECG_">">">">">">  MIT_BIH_AF.AFDB_create_mate_">">">">">">(len(ECG0), ">">">">">">_sample, ">">">">">">_aux_note)# 展示波形import matplotlib.pyplot as pltplt.subplot(2,1,1)plt.plot(ECG0[start_index:end_index])  # 展示原信号plt.subplot(2,1,2)plt.plot(ECG_">">">">">">[start_index:end_index])  # 展示标注波形plt.show()

原图像

标注图像

重采样信号长度----resample_signal_length

在我们提取信号之后最终将信号送入模型训练。但多数情况下模型信号输入长度有要求。而我们采集的信号可能不是固定长度的于是开发了本函数将一段信号重采样到指定的长度。注意本函数是基于 scipy 库实现的如果出现缺少 scipy 库缺失相关的报错请使用 pip install scipy

import MIT_BIH_AF_function as MIT_BIH_AF# 获取 一个起点时间点的索引值start_index  MIT_BIH_AF.signal_time_sample(00:08:04.772,10:13:43,len(ECG0))# 寻找一段 R 峰信号signal, s, e  MIT_BIH_AF.find_R_R_peak(start_index, ECG0, ECG_rpeaks)# 将信号长度重采样到500resample_signal  MIT_BIH_AF.resample_signal_length(signal, 500)

运行结果如图原信号长度 200蓝色重采样到了 500 长度橙色

利用小波变换去噪滤波----wavelet_denoise

有的时候需要对信号进行去噪。这里简单封装了一个小波去噪的方法使用的是 小波pyhon库。因此使用时要注意安装软件 pip install PyWavelets

import MIT_BIH_AF_function as MIT_BIH_AF# 获取 一个起点时间点的索引值start_index  MIT_BIH_AF.signal_time_sample(00:08:04.772,10:13:43,len(ECG0))# 寻找一段 R 峰信号signal, s, e  MIT_BIH_AF.find_R_R_peak(start_index, ECG0, ECG_rpeaks)# 对一段信号进行小波去噪denoise_signal  MIT_BIH_AF.wavelet_denoise(signal)
原信号去噪之后的信号 利用小波变换去趋势----wavelet_detrend

去趋势也叫 ”基线偏移“”基线漂移“描述的都是同一个现象即原波形被一种频率更低的波形干扰而产生整体波形的移动。本函数封装了一个小波去趋势的方法使用的是 小波pyhon库。因此使用时要注意安装软件 pip install PyWavelets

import MIT_BIH_AF_function as MIT_BIH_AF# 获取 一个时间点的索引值index  MIT_BIH_AF.signal_time_sample(00:06:48.772,10:13:43,len(ECG0))# 获取一段信号该时间点左右 800 范围signal  ECG0[index-800:index800]# 将信号进行去趋势处理detrend_signal  MIT_BIH_AF.wavelet_detrend(signal)
原信号去趋势处理的信号

标签:
声明:无特别说明,转载请标明本文来源!