基于MIT数据集的ECG信号的P波定位的Python代码
时间: 2024-05-05 08:15:38 浏览: 21
由于MIT数据集的ECG信号可以通过PhysioNet的网站下载,因此我们需要首先下载数据集。在下载完数据集后,我们可以使用Python中的wfdb库来读取和处理ECG信号。以下是一个基于MIT数据集的ECG信号的P波定位的Python代码示例:
```python
import wfdb
import numpy as np
import matplotlib.pyplot as plt
# 读取ECG信号
record = wfdb.rdrecord('mitdb/100')
signal = record.p_signal[:, 0]
fs = record.fs
# 滤波
from scipy import signal as sps
b, a = sps.butter(4, [0.5/fs*2, 40/fs*2], 'bandpass')
signal_filtered = sps.filtfilt(b, a, signal)
# 求导
signal_diff = np.diff(signal_filtered)
# 平方
signal_square = signal_diff ** 2
# 移动平均滤波
window = int(0.08 * fs)
signal_ma = np.convolve(signal_square, np.ones(window)/window, mode='same')
# 寻找P波位置
from scipy.signal import find_peaks
p_peaks, _ = find_peaks(signal_ma, distance=int(0.2*fs), height=0.1)
# 绘图
plt.plot(signal_filtered, label='ECG')
plt.plot(signal_ma, label='signal_ma')
plt.plot(p_peaks, signal_ma[p_peaks], 'x', label='P wave')
plt.legend()
plt.show()
```
这段代码首先读取了MIT数据集中编号为100的ECG信号,并对其进行了滤波、求导、平方、移动平均滤波等预处理。然后使用`find_peaks`函数寻找信号中的P波位置,并将其在图中用红色叉号标注出来。最后使用Matplotlib库绘制了ECG信号和P波位置。