用wfdb库读取mit-bih所有心电信号数据集提取幅值数据和标签数据,用biosppy库分析信号并剪切心拍并标记对应标签(多分类),再把每一个心拍归一化生成256*256单色位图关联标签并保存到工程文件夹且可视化,python代码
时间: 2024-05-04 14:22:24 浏览: 204
以下是用wfdb和biosppy库读取mit-bih所有心电信号数据集,提取幅值数据和标签数据,用多分类的方式分析信号并剪切心拍并标记对应标签,将每一个心拍归一化生成256*256单色位图关联标签并保存到工程文件夹且可视化的Python代码:
```python
import wfdb
import biosppy
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
# 读取MIT-BIH数据集
record_list = wfdb.get_record_list('mitdb')
# 遍历每个数据文件
for record_name in record_list:
print(f"Processing {record_name}...")
record = wfdb.rdrecord(record_name, channels=[0])
# 使用biosppy库分析信号,剪切心拍并标记对应标签
out = biosppy.signals.ecg.ecg(signal=record.p_signal.flatten(), sampling_rate=record.fs, show=False)
rpeaks = out['rpeaks']
labels = wfdb.rdann(record_name, 'atr').symbol
# 将每个心拍归一化生成256*256单色位图关联标签并保存到工程文件夹
for i in range(len(rpeaks)):
peak = rpeaks[i]
label = labels[i]
# 截取512个采样点(1秒)的数据
start = peak - 256
end = peak + 256
if start < 0 or end >= len(record.p_signal):
continue
data = record.p_signal[start:end]
# 归一化并生成位图
data = (data - np.min(data)) / (np.max(data) - np.min(data))
data = (data * 255).astype(np.uint8)
img = Image.fromarray(data)
img.save(f"{record_name}_{i}_{label}.png")
# 可视化结果
plt.imshow(img, cmap='gray')
plt.title(label)
plt.show()
```
注意:由于MIT-BIH数据集的版权问题,请勿将生成的位图用于商业目的。
阅读全文