用Python实时信号进行心电数据分析

时间:2014-03-04 10:38:54

标签: python matplotlib data-analysis

我正在使用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 个答案:

答案 0 :(得分:1)

当然有可能。首先保存它然后稍后分析数据会更容易,但在定义的数据块上执行此操作也没有问题。真正的问题是,你想做什么样的分析!你需要所有数据吗?还是x秒的数据?您需要多少数据才能找到可靠的R和R-R值?在你的情况下,我会首先转储一些数据并使用它来查看你需要的东西。然后,您可以构建一个版本,该版本使用您发现的算法参数即时执行此操作。