通过实时ECG信号在Python matplotlib中进行R峰检测

时间:2018-07-02 11:08:07

标签: python-2.7 matplotlib

我已经对Raspberry Pi 3进行了编程,以绘制ECG SIgnal。我在Python2.7中使用过matplotlib库。 Arduino开发板已用于获取模拟输入。

创建的GUI包含2个子图,可从arduino的2个模拟引脚读取信号。

现在我需要从实时ECG信号中检测R峰。

我尝试了几种代码来检测,但是我无法在同一图中检测到它。 请建议如何在实时ECG信号绘图的以下代码中添加r-peak检测代码。

这是我的以下代码:-

import serial
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation

ser = serial.Serial('/dev/ttyACM0', 115200)

n = 200
fig = plt.figure(figsize=(12,9))

ax1 = fig.add_subplot(2,1,1)
ax2 = fig.add_subplot(2,1,2)


ch1, = ax1.plot([], [], 'b', label = 'Channel 1')
ch2, = ax2.plot([], [], 'r', label = 'Channel 2')

axes = [ax1, ax2]

for ax in axes:
    ax.set_xlim(0, n+1)
    ax.set_ylim(0, n-1)
    ax.set_ylabel('values')
    ax.legend(loc='upper right')
    ax.grid(True)

ax1.set_title('Real-time ECG plot')
ax2.set_xlabel('Values')

t = list(range(0,n))
channel1 = [0] * n
channel2 = [0] * n


def init():
    ch1.set_data([], [])
    ch2.set_data([], [])

    return ch1, ch2,

def animate(i):

    while (ser.inWaiting() == 0):
        pass
    arduinoString = ser.readline()
    dataArray = arduinoString.split(',')

    channel1.append(float(dataArray[0]))
    channel2.append(float(dataArray[1]))

    channel1.pop(0)
    channel2.pop(0)

    ch1.set_data(t, channel1)
    ch2.set_data(t, channel2)



    return ch1, ch2, ch3,

delay = 0
anim = animation.FuncAnimation(fig, animate, init_func=init,interval=delay, blit=True)

plt.show()

ser.close()

0 个答案:

没有答案