欢迎访问宙启技术站
智能推送

在Python中利用scipy.signal模块进行心电图分析

发布时间:2023-12-28 18:37:12

心电图(ECG)是记录心脏电活动的一种方法,可以用来检测心脏疾病和其他心血管问题。在Python中,可以使用scipy库中的signal模块进行心电图分析。

首先,我们需要导入必要的库:

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

接下来,我们可以生成一段模拟的心电图信号:

# 生成心电图信号
fs = 1000  # 采样率
t = np.linspace(0, 2, 2 * fs, endpoint=False)  # 时间点
ecg = np.sin(2 * np.pi * 60 * t) + np.sin(2 * np.pi * 120 * t)  # 生成ECG信号

在这个例子中,我们生成了一个由两个频率为60Hz和120Hz的正弦波相加而成的信号。

我们可以使用matplotlib库绘制这个心电图的图形:

# 绘制心电图
plt.figure()
plt.plot(t, ecg)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('ECG Signal')
plt.show()

接下来,我们可以使用scipy库中的函数对心电图信号进行滤波和去噪。下面是一个使用Butterworth滤波器对信号进行低通滤波的例子:

# 低通滤波
b, a = signal.butter(2, 0.1, 'low')  # 2阶低通滤波器,截止频率为0.1
ecg_filtered = signal.lfilter(b, a, ecg)

然后,我们可以绘制滤波后的心电图信号:

# 绘制滤波后的心电图
plt.figure()
plt.plot(t, ecg_filtered)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Filtered ECG Signal')
plt.show()

除了滤波之外,我们还可以进行心率检测。下面是一个使用scipy库中的函数对心电图信号进行心率检测的例子:

# 心率检测
peaks, _ = signal.find_peaks(ecg_filtered, height=0.5)  # 寻找心电图信号中的峰值
heart_rate = len(peaks) / t[-1] * 60  # 计算心率,单位为bpm
print('Heart rate:', heart_rate, 'bpm')

在这个例子中,我们使用find_peaks函数找到心电图信号中的峰值,然后根据峰值的数量计算心率。

这只是scipy.signal模块在心电图分析中的一些常见用法,还有许多其他函数和方法可以用来处理心电图信号,并提取有用的信息。希望这篇文章能够帮助你入门心电图分析的Python编程。