作者声明:此博客是作者的毕设心得,拿来分享。
拿到模块,在网上查了一圈,发现基本没什么有用的资料,有也是一些废话,经过我几个月的攻克,现在已初步搞定,分享给大家。
废话不多说,直接步入正题。
这是通过单片机的232通信例程直接接收得到的原始数据,也就是参考手册中的数据流。其中小包数据,是每秒512个大概,大包数据是每秒1个。
小包的格式是AA AA 04 80 02 xxHigh xxLow xxCheckSum前面的AA AA 04 80 02 是不变的,后三个字节是一只变化的,xxHigh和xxLow组成了原始数据rawdata,xxCheckSum就是校验和。所以一个小包里面只包含了一个对开发者来说有用的数据,那就是rawdata,可以说一个小包就是一个原始数据,大约每秒钟会有
512个原始数据。 从小包中解析出原始数据:rawdata = (xxHigh << 8) | xxLow; if(rawdata > 32768){ rawdata =65536; }根据手册,在计算原始数据之前,要先检查检验和:sum = ((0x80 + 0x02 + xxHigh + xxLow)^ 0xFFFFFFFF) & 0xFF。就是把头文件AA AA 04后面的四个数据加起来,取反,在取低八位。当检验码不对时,直接丢弃该包。
在大包数据里面可以解析Signal,Attention,Meditation和8个EEG的信号值,大包的格式是固定的:
AA 同步AA 同步20 是十进制的32,即有32个字节的payload,除掉20本身+两个AA同步+最后校验和02 代表信号值SignalC8 信号的值83 代表EEG Power开始了18 是十进制的24,说明EEG Power是由24个字节组成的,以下每三个字节为一组18 Delta 1/3D4 Delta 2/38B Delta 3/313 Theta 1/3D1 Theta 2/369 Theta 3/302 LowAlpha 1/358 LowAlpha 2/3C1 LowAlpha 3/317 HighAlpha 1/33B HighAlpha 2/3DC HighAlpha 3/302 LowBeta 1/350 LowBeta 2/300 LowBeta 3/303 HighBeta 1/3CB HighBeta 2/39D HighBeta 3/303 LowGamma 1/36D LowGamma 2/33B LowGamma 3/303 MiddleGamma 1/37E MiddleGamma 2/389 MiddleGamma 3/304 代表专注度Attention00 Attention的值(0到100之间)05 代表放松度Meditation00 Meditation的值(0到100之间)D5 校验和
想要获得某个EEG信号值,只需将相应信号的1/3值左移16位,2/3值左移8位,3/3值不变,然后将他们或运算:
delta=(payload[i]<<16) | (payload[(i+1)]<<8) | (payload[(i+2)])。
未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/