ECG信号的P波定位Python代码
时间: 2023-11-19 21:06:09 浏览: 271
由于ECG信号的P波定位是一个较为复杂的过程,需要用到多种信号处理和机器学习算法,因此需要较长的代码。以下是一个简单的ECG信号P波定位的Python代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks, butter, filtfilt
# 加载ECG信号数据
ecg_signal = np.loadtxt('ecg_signal.txt')
# 设置滤波器参数
nyq = 0.5 * 360 # 采样频率的一半
low_cutoff = 1 / nyq # 截止频率为1Hz
high_cutoff = 30 / nyq # 截止频率为30Hz
b, a = butter(4, [low_cutoff, high_cutoff], btype='band') # 4阶带通滤波器
# 应用滤波器
filtered_signal = filtfilt(b, a, ecg_signal)
# 寻找QRS波峰
qrs_peaks, _ = find_peaks(filtered_signal, height=0.5, distance=100)
# 初始化P波峰列表
p_peaks = []
# 寻找每个QRS波峰前的P波峰
for i in range(len(qrs_peaks)):
start = qrs_peaks[i] - 100 # 从QRS波峰前100个点开始搜索
end = qrs_peaks[i] - 30 # 在QRS波峰前30个点结束搜索
p_peak, _ = find_peaks(filtered_signal[start:end], height=0.1, distance=20)
if len(p_peak) > 0:
p_peaks.append(start + p_peak[0])
# 绘制结果
plt.plot(ecg_signal, label='Original ECG Signal')
plt.plot(filtered_signal, label='Filtered ECG Signal')
plt.plot(qrs_peaks, filtered_signal[qrs_peaks], 'x', label='QRS Peaks')
plt.plot(p_peaks, filtered_signal[p_peaks], 'o', label='P Peaks')
plt.legend()
plt.show()
```
上述代码实现了以下过程:
1. 加载ECG信号数据。
2. 设计带通滤波器并应用于ECG信号。
3. 寻找QRS波峰。
4. 在每个QRS波峰前搜索P波峰。
5. 绘制原始ECG信号、滤波后的ECG信号、QRS波峰和P波峰。
注意,该代码仅作为示例,实际应用中可能需要进行更多的信号处理和算法优化,以获得更准确的P波定位结果。
阅读全文