数据集为PTB心电数据集,具体信息可参考网站https://www.physionet.org/content/ptb-xl/1.0.3/。数据集存储地址为D:\下载\ptb-xl-a-large-publicly-available-electrocardiography-dataset-1.0.3。写一个代码要求如下:1去除基线漂移。2.进行滤波。3.画出滤波前,滤波后以及最后去除基线漂移的三个图像
时间: 2024-04-07 17:27:39 浏览: 252
PTB simple-examples数据集.rar
5星 · 资源好评率100%
好的,以下是一个示例代码,满足你的要求:
```python
import wfdb
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# 读取心电数据
record = wfdb.rdrecord('D:/下载/ptb-xl-a-large-publicly-available-electrocardiography-dataset-1.0.3/records100/00000/00003_lr')
# 获取心电信号
ecg_signal = record.p_signal[:, 0]
# 获取采样频率
fs = record.fs
# 获取时间轴
t = np.arange(ecg_signal.size) / fs
# 去除基线漂移
ecg_detrend = signal.detrend(ecg_signal)
# 定义滤波器
b, a = signal.butter(4, 0.2, 'low')
# 进行滤波
ecg_filt = signal.filtfilt(b, a, ecg_detrend)
# 绘制原始信号,滤波后的信号以及去除基线漂移后的信号
plt.figure(figsize=(12, 6))
plt.subplot(3, 1, 1)
plt.plot(t, ecg_signal, 'b')
plt.title('Original Signal')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude (mV)')
plt.subplot(3, 1, 2)
plt.plot(t, ecg_filt, 'r')
plt.title('Filtered Signal')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude (mV)')
plt.subplot(3, 1, 3)
plt.plot(t, ecg_detrend, 'g')
plt.title('Detrended Signal')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude (mV)')
plt.tight_layout()
plt.show()
```
在这个例子中,我们使用`wfdb.rdrecord`函数读取了一个心电数据,并将其赋值给`record`变量。然后,我们使用`record.p_signal[:, 0]`获取了心电信号,并将其赋值给`ecg_signal`变量。接着,我们使用`record.fs`获取了采样频率,并使用`np.arange`函数以及采样频率计算出了时间轴`t`。然后,我们使用`signal.detrend`函数去除了信号的基线漂移。然后,我们使用`signal.butter`函数定义了一个低通滤波器,并将其应用于去除基线漂移后的信号`ecg_detrend`,得到滤波后的信号`ecg_filt`。最后,我们将原始信号,滤波后的信号以及去除基线漂移后的信号分别绘制在三个子图中。
阅读全文