我已经对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()