2

我是 Python 世界的新手,我的编程技能相当差,但我正试图找到一种方法来使用 Python 来显示 EEG 电路的输出(使用 OpenEEG 电路http://openeeg.sourceforge.net )

模拟输出通过 ADC(在 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 个实时 xy 波形(时间与电压)

问题更新:

我正在使用 PySerial 明显的几行打印代码,但它是乱码。我正在尝试将数据分解为可以绘制的值的格式。17 字节的数据目前以 256 帧/秒的速度输入。(两个)通道由每个 10 位数据组成(用 6 个零组成其余 2 个字节)。它们是无符号的,可能的值为 0 到 1023。这些对应于应该绘制为正负的值,因此 512 的二进制值对应于零(微)伏的图......

如何将传入的流读取为 8 位二进制(去除我不需要的数据),然后组合我想要的每个通道的两个相关字节(如有必要,可能删除多余的 6 个零)?

4

2 回答 2

2

这里有一个很好的实时绘图示例。这是一个很好的例子,因为它使用自生成的数据运行,因此很容易测试,但修改代码以绘制真实数据的位置也很明显,并且代码易于遵循。

基本思想是制作一个绘图窗口,然后在使用时更新该数据

set_xdata(np.arange(len(self.data)))
set_ydata(np.array(self.data))

(尽管在当前版本的 matplotlib 中您可能想要使用它set_data(xdata, ydata)。)

至于解析串口数据,最好将其作为一个单独的问题提出。

于 2009-12-01T06:37:42.107 回答
2

要处理复杂的二进制数据格式,您可能会在 numpy 中使用结构化数组(另请参阅此处以获得很好的介绍)。在定义数据的结构之后,它应该很容易读入。然后你可以使用 numpy 的功能将数据煮熟到你需要的东西。

于 2009-11-25T14:48:07.887 回答