ECG信号的P波定位Python代码
时间: 2023-11-19 18:11:09 浏览: 209
ECG信号的滤波处理仿真,包括带阻滤波器,低通滤波器,高通滤波器+含代码操作演示视频
5星 · 资源好评率100%
以下是一个基本的Python代码示例,用于从ECG信号中定位P波。
```python
import numpy as np
import wfdb
import matplotlib.pyplot as plt
# 读取MIT-BIH Arrhythmia 数据库中的ECG信号
record = wfdb.rdrecord('100', pb_dir='mitdb')
signal = record.p_signal[:, 0]
# 计算滑动平均值
window = 30
smooth_signal = np.convolve(signal, np.ones((window,))/window, mode='same')
# 计算信号的一阶差分
diff_signal = np.diff(smooth_signal)
# 找到差分信号中的峰值
peak_indices = np.where(diff_signal > np.mean(diff_signal) + 0.5*np.std(diff_signal))[0]
# 通过比较相邻峰值之间的间隔来过滤掉不是P波的峰值
min_distance = int(0.2*record.fs) # 200ms
filtered_peaks = [peak_indices[0]]
for i in range(1, len(peak_indices)):
if peak_indices[i] - filtered_peaks[-1] > min_distance:
filtered_peaks.append(peak_indices[i])
# 绘制信号和定位的P波
plt.figure()
plt.plot(signal, label='Raw ECG')
plt.plot(smooth_signal, label='Smooth ECG')
plt.plot(peak_indices, signal[peak_indices], 'x', label='All Peaks')
plt.plot(filtered_peaks, signal[filtered_peaks], 'o', label='P Waves')
plt.legend()
plt.show()
```
该代码首先使用wfdb库读取MIT-BIH Arrhythmia数据库中的ECG信号。然后,它计算信号的滑动平均值和一阶差分,并找到差分信号中的峰值。接下来,代码通过比较相邻峰值之间的间隔来过滤掉不是P波的峰值。最后,它绘制了原始ECG信号、平滑ECG信号、所有峰值和定位的P波。 您可以根据需要对代码进行修改和调整,以满足您的特定需求。
阅读全文