【OpenBCI】(2):原始数据包解码
  去年我写了⼀篇OpenBCI的博客,讲述如何⽤python的SDK将OpenBCI数据读取到Matlab中。
  后来我想,既然是串⼝通信,能不能⽤Matlab串⼝直接读取OpenBCI的数据,跳过官⽅的python。答案是肯定的。下⾯讲述⼀下我利⽤串⼝调试助⼿对OpenBCI原始数据包的解码过程及其数据格式,这样⼤家可以⽤任何语⾔(例如C#,.Matlab等)的串⼝通信去开发OpenBCI,不再拘泥于python。
1.连接串⼝
  要利⽤串⼝调试助⼿去解码OpenBCI数据,我们先下载⼀个串⼝调试助⼿
  打开串⼝调试助⼿,设置串⼝格式如下:
串⼝波特率:115200
数据位:8
停⽌位:1
校验位:⽆
  选择OpenBCI对应的串⼝号(我的是COM3),打开串⼝。此时我们再重启⼀下OpenBCI就可以看到,串⼝调试助⼿显⽰以下信息。代表OpenBCI就位。
2.获取数据包
  此时给串⼝发送不同的字母代表不同的指令:
b--------------begin, 开始采集数据
python怎么读取串口数据
s--------------stop,停⽌采集数据
f--------------filter,添加60Hz⼯频滤波器(国内为50Hz,暂时⽤不到)
g--------------关闭60Hz⼯频滤波器(国内为50Hz,暂时⽤不到)
  更多指令参考官⽅⽹站
  我们在串⼝调试助⼿下⾯的发送框⾥,输⼊字母“b”,然后点击发送,OpenBCI就开始输出数据到串⼝,我们可以看到滚动的数据流。
3.数据包解码
  因为OpenBCI采样频率为250Hz,所以每秒有250个数据包,部分数据包放⼤看⼀下,如下图所⽰:
  图中每⼀⾏代表⼀个数据包,每个数据包由33个字节组成,OpenBCI的所有采集数据(包括8通道的脑电数据和陀螺仪数据)都在这些数据包⾥。例如上图中的第⼀⾏,其数据格式如下:
  每个脑电通道数据由3个字节组成,该数据为:低字节序有符号整数(little endian signed integer),即:
1. 第⼀个字节⼩于等于127(0x7F)时,该数为正整数
如通道数据0x29 0x96 0x49 即为 2725449
2. 第⼀个字节⼤于127(0x7F)时,该数为负整数
如通道数据0xE1 0x96 0x49,即为 -1993143
可以理解为 0x01 0x00 0x00 0x00 - 0xE1 0x96 0x49 = -1993143
  计算出的整数乘以系数scale_fac_uVolts_per_count = 0.022351744455307063 即可得到单位为uV的电压数据。
4.结束语
  知晓了OpenBCI的数据包格式,这样⼤家可以⽤任何语⾔(例如C#,.Matlab等)的串⼝通信去读取OpenBCI的原始数据,不再拘泥于官⽅的python SDK。
  是以为记!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。