Python中实时信号的ECG数据分析
我正在用Python从Arduino获取的信号生成心电图(ECG)。我想对这些数据进行一些分析,但具体分析什么我还没决定。不过我想问的是,能不能在通过串口实时接收数据的同时进行分析,还是说先把数据保存到文本文件里再分析会更简单或更好?现在我对怎么做这件事还没想明白。另外,我至少想检测到信号的峰值(R波)和R-R间隔(这样我就可以测量每分钟的心跳次数)。
这是我目前在Python上写的代码:
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
import matplotlib.figure as mfig
import PyQt4.QtGui as gui, PyQt4.QtCore as core
import collections
import time
import random
import serial
ser = serial.Serial('/dev/tty.usbmodem1411', 57600)
start_byte = 'S'
end_byte = 'F'
refreshMillis = 50
N = 200
xs = collections.deque(maxlen=N)
ys = collections.deque(maxlen=N)
app = gui.QApplication([])
fig = mfig.Figure()
canvas = FigureCanvasQTAgg(fig)
ax = fig.add_subplot(111)
ax.set_ylim([0,5])
line2D, = ax.plot(xs,ys)
canvas.show()
def process_line():
line = ser.readline()
data = map(float,line.split(" "))
xs.append(data[0])
ys.append(data[1])
line2D.set_data(xs,ys)
print data
xmin, xmax = min(xs),max(xs)
if xmin == xmax:
ax.set_xlim([xmin,xmin+1])
else:
ax.set_xlim([xmin,xmax])
canvas.draw()
timer = core.QTimer()
timer.timeout.connect(process_line)
timer.start(refreshMillis)
app.exec_()
ser.flush()
ser.close()
1 个回答
1
当然这是可以做到的。一开始保存数据会更简单,之后再分析这些数据也没问题,不过在处理一小部分数据时也可以直接分析。真正的问题是,你想进行什么样的分析!你需要所有的数据吗?还是只需要几秒钟的数据?你需要多少数据才能找到可靠的R值和R-R值?在你的情况下,我建议先保存一些数据,然后试着玩玩这些数据,看看你需要什么。之后你可以再做一个版本,实时处理数据,使用你算法中发现的参数。