📜  Scipy – 显示心电图(1)

📅  最后修改于: 2023-12-03 14:47:18.569000             🧑  作者: Mango

Scipy – 显示心电图

Scipy是Python中用于数学、科学和工程计算的开源软件集。它提供了各种算法和工具,用于处理和可视化数据,其中包括信号处理。

在本文中,我们将介绍如何使用Scipy中的信号处理模块来绘制心电图。

准备工作

在绘制心电图之前,您需要安装以下Python库:

  • numpy
  • matplotlib
  • scipy
!pip install numpy
!pip install matplotlib
!pip install scipy
导入库

首先,我们需要导入所需的Python库:numpymatplotlibscipy.signal

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import butter, filtfilt
加载数据

我们将使用MIT-BIH数据库的ECG数据来绘制心电图。您可以使用numpy函数genfromtxt()从CSV文件中加载数据。

# 加载数据
data = np.genfromtxt('mitbih_train.csv', delimiter=',')
预处理数据

在开始绘制心电图之前,我们必须对数据进行处理。首先,我们需要将所有心电图波形中的基线漂移移除。

# 移除基线漂移
filtered = np.zeros_like(data)
for i in range(data.shape[0]):
    baseline = np.median(data[i, :1000])
    filtered[i, :] = data[i, :] - baseline

其次,我们需要应用一个低通滤波器来降低高频噪声。

# 应用低通滤波器
def butter_lowpass(cutoff, fs, order=5):
    nyq = 0.5 * fs
    normal_cutoff = cutoff / nyq
    b, a = butter(order, normal_cutoff, btype='lowpass', analog=False)
    return b, a

def butter_lowpass_filter(data, cutoff, fs, order=5):
    b, a = butter_lowpass(cutoff, fs, order=order)
    y = filtfilt(b, a, data)
    return y

fs = 360.0 # 样本频率
cutoff = 0.05 # 低通截止频率
filtered = butter_lowpass_filter(filtered, cutoff, fs)
绘制心电图

现在我们已准备好绘制心电图了。我们可以使用matplotlib库绘制filtered数组中每个心电图波形的线条。

# 绘制心电图
plt.figure(figsize=(20, 10))
for i in range(filtered.shape[0]):
    plt.plot(filtered[i, :] + 2 * i)
plt.axis('off')
plt.show()

最后的结果应该类似于这样:

心电图示例

结论

在本文中,我们已经介绍了如何使用Scipy和Python绘制心电图。我们学习了如何使用信号处理模块来处理心电图数据,以及使用matplotlib绘制心电图波形的方法。