我是Python世界的新手,我的编程技术相当差,但我正在尝试找到一种方法来使用Python显示脑电图电路的输出(使用OpenEEG电路http://openeeg.sourceforge.net)。
模拟输出通过模数转换器(在ATmega8微控制器中)进行放大和处理,并由MAX232转换为RS232。
RS232信号如下:
字节1:同步值0xa5
字节2:同步值0x5a
字节3:版本
字节4:帧编号
字节5:通道1低位字节
字节6:通道1高字节
字节7:通道2低位字节
字节8:通道2高字节
..。
字节9-16用于额外的电极通道,但不需要数据,因为只使用前两个
..。
字节17:按钮状态(b1-b4)
我已经有了一些基本的PySerial功能,但我需要找到一种方法来利用传入的数据,方法是缓冲数据并将有用的值绘制为2个实时x-y波形(时间与电压)。
问题更新:
我只打印了几行明显的PySerial代码,但这简直是胡言乱语。我正在尝试将数据剥离成可以绘制的值的格式。这17个字节的数据当前以256帧/秒的速度传入。这(两个)通道分别由10位数据组成(用6个0组成其余2个字节)。它们是无符号的,给出了从0到1023的可能值。这些值对应于应该绘制为正值和负值的值,因此二进制值512对应于零(微伏)的曲线图。
如何以8位二进制格式读取传入的流(去掉不需要的数据),然后组合每个通道中的两个相关字节(如果需要,可能会删除多余的6个零)?
发布于 2009-11-25 22:48:08
要处理复杂的二进制数据格式,您可以在numpy中使用structured arrays (另请参阅here以获得更好的介绍)。在定义了数据的结构之后,应该很容易将其读入。然后,您可以使用numpy的功能将数据简化为您需要的内容。
发布于 2009-12-01 14:37:42
有一个很好的实时绘图示例here。这是一个很好的例子,因为它使用自生成的数据运行,所以很容易测试,但在哪里修改代码以绘制实际数据也很明显,代码也很容易理解。
基本思想是创建一个绘图窗口,然后在数据传入时使用
set_xdata(np.arange(len(self.data)))
set_ydata(np.array(self.data))
(不过,在当前版本的matplotlib中,您可能希望使用set_data(xdata, ydata)
。)
至于解析串行端口数据,最好作为一个单独的问题来问。
https://stackoverflow.com/questions/1797249
复制相似问题