基于mindwave脑电波进行疲劳检测算法的设计(3)
这一节我将讲解thinkgear.h 里面的函数和宏定义。这一些都可以在MindSet Development Tools\ThinkGear Communications Driver\docs\html\index.html 这个路径中找到并打开。是使用doxygen软件生成的API帮助文档。
下面我将做一下简单的翻译。其实最主要的功劳还是google翻译(^v^)?
这些是API
- THINKGEAR_API int TG_GetDriverVersion ()
- 获取当前TGCD库的版本
- THINKGEAR_API int TG_GetNewConnectionId ()
- 返回一个控制ID,是一个整数。该ID是ThinkGear的连接对象。
- /////////////////////下面的函数要用到TG_GetNewConnectionId ////////////////////////////////
- THINKGEAR_API int TG_SetStreamLog (int connectionId, const char *filename)
- 做为一个ThinkGear的连接,将对它进行串行数据流字节的读取,它将自动记录这些字节数据到一个日志文件中。
- THINKGEAR_API int TG_SetDataLog (int connectionId, const char *filename)
- 作为一个ThinkGear连接器读取并解析来自它的串行数据流的数据包,它将记录数据解析到一个日志文件。
- THINKGEAR_API int TG_EnableBlinkDetection (int connectionId, int enable)
- 启用或禁止眨眼检测
- THINKGEAR_API int TG_Connect (int connectionId, const char *serialPortName, int serialBaudrate, int serialDataFormat)
- 连接一个ThinkGear连接,通过给定的ConnectionId,在串行通信(COM)端口,以便与ThinkGear模块进行通信。
- THINKGEAR_API void TG_FreeConnection (int connectionId)
- 释放与给定的ThinkGear连接相关联的所有内存。
- ///////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////下面的函数要用到TG_Connect ////////////////////////////////
- THINKGEAR_API int TG_ReadPackets (int connectionId, int numPackets)
- 尝试使用ThinkGear连接,通过指定的ConnectionId,读取串口数据流的numPackets。
- THINKGEAR_API int TG_GetValueStatus (int connectionId, int dataType)
- 如果数据类型是由最近一次调用TG_ReadPackets后更新的。那么将返回非零。
- THINKGEAR_API float TG_GetValue (int connectionId, int dataType)
- 通过指定dataType类型(该参数的取值为define的那些TG_DATA_开头的常量)将返回指定类型所取到的值。
- THINKGEAR_API int TG_SendByte (int connectionId, int b)
- 通过ThinkGear连接器(大概是为了某个ThinkGear模块)发送一个字节。
- THINKGEAR_API int TG_SetBaudrate (int connectionId, int serialBaudrate)
- 指定connectionid和串口波特率,然后尝试改变波特率。
- THINKGEAR_API int TG_SetDataFormat (int connectionId, int serialDataFormat)
- 给出connectionid和串口数据格式,进而改变所使用的ThinkGear连接的数据包解析格式。
- THINKGEAR_API void TG_Disconnect (int connectionId)
- 指定ID,从串行通信端口断开ThinkGear连接。
- ///////////////////////////////////////////////////////////////////////////////////////////
- THINKGEAR_API int TG_WriteStreamLog (int connectionId, int insertTimestamp, const char *msg)
- THINKGEAR_API int TG_WriteDataLog (int connectionId, int insertTimestamp, const char *msg)
- THINKGEAR_API int TG_EnableLowPassFilter (int connectionId, int rawSamplingRate)
- 作为一个ThinkGear连接读取并解析原始脑电值(通过TG_ReadPackets函数),对原始波形数据,驱动程序会自动套用30Hz的低通滤波器。
- THINKGEAR_API int TG_EnableAutoRead (int connectionId, int enable)
- 启用或禁用后台自动读取连接。
这些是宏定义:
- #define THINKGEAR_API __declspec( dllimport ) //栈调用方式
- #define WINVER 0x0501
- #define TG_MAX_CONNECTION_HANDLES 128
- Maximum number of Connections that can be requested before being required to free one.
- ////////////////波特率 TG_Connect() 和TG_SetBaudrate()这两个函数会用到///////////////////////
- #define TG_BAUD_1200 1200
- #define TG_BAUD_2400 2400
- #define TG_BAUD_4800 4800
- #define TG_BAUD_9600 9600
- #define TG_BAUD_57600 57600
- #define TG_BAUD_115200 115200
- ////////////////数据格式////////////////////////////////
- #define TG_STREAM_PACKETS 0
- #define TG_STREAM_5VRAW 1
- #define TG_STREAM_FILE_PACKETS 2
- ////////////////获取哪一种数据类型 TG_GetValue()这个函数会用到////////////////////
- #define TG_DATA_BATTERY 0 //应该是电量吧
- #define TG_DATA_POOR_SIGNAL 1 //连接质量
- #define TG_DATA_ATTENTION 2 //专注度
- #define TG_DATA_MEDITATION 3 //冥想度
- #define TG_DATA_RAW 4 //原始数据
- #define TG_DATA_DELTA 5 //δ波段
- #define TG_DATA_THETA 6 //θ脑波
- #define TG_DATA_ALPHA1 7 //α脑波
- #define TG_DATA_ALPHA2 8 //α脑波
- #define TG_DATA_BETA1 9 //β脑波
- #define TG_DATA_BETA2 10 //β脑波
- #define TG_DATA_GAMMA1 11 //γ脑波
- #define TG_DATA_GAMMA2 12 //γ脑波
- #define TG_DATA_BLINK_STRENGTH 37 //眨眼强度
对于上面讲到的一些数据的解释,网上的资料真的有点少。
对于上面提到的宏进行详解
POOR_SIGNAL质量
无符号的一个字节的整数值描述了神念科技NeuroSky的ThinkGear测量到的信号的强弱,它的范围值从0到200。零以外的值表示检测到了某种噪声信号。数值越高,表示测到的噪声越多。数值达到200说明神念科技NeuroSky的ThinkGear触点没有接触到用户的皮肤。
这个值每秒都会有输出,显示了刚刚测量到的信号的质量。信号质量差的原因很多。按照严重程度,它们分别是:
•传感器,地面,或者参考触点都没有在人的头上(即没有人戴ThinkGear的电极)。
•传感器、地面或者参考触点没有与人的皮肤接触好(比如:头发夹在里面,或者耳机与头的尺寸不适合,或者耳机没有放置在头部正确的位置 )。
•佩戴者动作过多(即头部或身体过于晃动,或碰撞到耳机)
•过多环境静电噪声(某些环境中会有强大的静电信号,或者在佩带传感器时人的静电积累)。
•过多的非EEG生物噪声(即肌电,心电,眼电等)。
正常使用神念科技NeuroSky的ThinkGear产品时也会不可避免的受到一定数量噪声的干扰,神念科技NeuroSky的过滤技术和eSense™ 专利算法都可以检测,改正,补偿,解释和容忍不同类型非脑电噪声。多数用户都只对eSense值感兴趣,如专注度Attention和冥想度Meditation,他们无需担心POOR_SIGNAL质量值,除非检测到POOR_SIGNAL质量值时专注度Attention和冥想度Meditation都无法更新。POOR_SIGNAL质量值对那些对噪音比较敏感的应用程序比较有用(正如一些医学或研究用的应用程序)或者只要检测出一点噪音数据就需要立刻作出反应的应用程序。默认情况下,数值的输出是有效的。通常一秒钟输出一次。
eSense “专注度Attention”指数
这个无符号的一个字节值表明用户当前的“eSense专注度Attention指数”,即使用者 精神“集中度”水平或“注意度”水平的强烈程度,例如,当你能够进入高度专 注状态并且可以稳定地控制你的心理活动,该指数的值就会很高。该指数值的范 围是0到100。心烦意乱、精神恍惚、专注度Attention不集中以及焦虑等精神状态都将降低 专注度Attention指数的数值。默认情况下,数值的输出是有效的。通常一秒钟输出一次。
eSense“冥想度Meditation“指数
这个无符号的一个字节值表明用户当前的“eSense冥想度Meditation指数” ,即使用 者精神“平静度”水平或“冥想度Meditation”水平。该指数值的范围是0到100。需要注 意的是,冥想度Meditation指数反映的是使用者的精神状态,而不是其身体状态,所以,简 单地进行全身肌肉放松并不能快速地提高冥想度Meditation水平。然而,对大多数人来说, 在正常的环境下,进行身体放松通常有助于精神状态的放松。冥想度Meditation水平的提高 与大脑活动的减少有明显的关联。长期观察结果表明:闭上眼睛可以使得大脑无 需处理通过眼睛看到的景象从而降低大脑精神活动水平。所以,闭上眼睛通常是 提高冥想度Meditation值的有效方法。心烦意乱、精神恍惚、焦虑、激动不安等精神状态以 及感官刺激等都将降低冥想度Meditation指数的数值。默认情况下,数值的输出是有效的。通常一秒钟输出一次。
原始波值raw(16位)
此数值由两个字节组成,代表一个单一的原始波样品。它的值是一个从 -32768到32767之间的十六位带符号整数。数值的第一个字节代表高位,第二个 字节代表低位。要重建完整的原始波的值,只要简单地将第一个字节左移8个位,并且按位或第二个字节:
- RAW Wave Value (-bit)
- short raw = (Value[]<<) | Value[];
Value[0]是高位字节,Value[1]是低位字节。
在系统或语言中位操作不是很方便,可用以下算术运算来代替:
- raw = Value[]* + Value[];
- if( raw >= ) raw = raw - ;
在语言里raw是表示数值从-32768到32767之间的任何有符号的数据类型。 每个ThinkGear模型仅在-32768到32767之间的特定范围里记录它的原始波 信息。例如,MindSet记录的原始波大约在-2048到2047之间。 默认情况下,数值的输出是有效的。每秒钟输出512次,也就是说大约每2 毫秒一次。
ASIC_EEG_POWER 各种脑电波
这个数据值代表8种众所周知的脑电(脑波)电流强度 。这个数值在小端格式 中作为一系列八个3字节无符号整数输出。八种脑电功率是按如下顺序输出的: delta(0.5-2.75赫兹),theta(3.5-6.75赫兹),low-alpha(7.5-9.25赫兹), high-alpha(10-11.75赫兹),low-beta(13-16.75赫兹),high-beta(18-29.75 赫兹),low-gamma(31-39.75赫兹),mid-gamma(41-49.75赫兹)。这些数值没有单位并且考虑到相对数量和短暂波动,他们只有在互相比较时才有意义。
默认情况下,数值的输出是有效的。通常每秒钟输出一次。
眨眼的强度
无符号的一个字节的值记录了用户最近眨眼的强度。它的数值范围从1到 255,并且一检测到眨眼,数值就会被记录下来。这个数值表明眨眼的相对强烈程度,没有单位。
注意:这个数值当前只能通过TGCD 和TGC 的应用程序接口才可使用。它不 可直接作为任何ThinkGear硬件的输出来使用。关于TGCD,可以参考使用 TG_GetValueStatus() 和 TG_GetValue()函数的TG_DATA_BLINK_STRENGTH数据类型。
基于mindwave脑电波进行疲劳检测算法的设计(3)的更多相关文章
- 基于mindwave脑电波进行疲劳检测算法的设计(5)
时隔两个多月了,前段时间在弄Socket,就没有弄这个了.现在好了,花了几天的时间,终于又完成了一小部分了.这一小节主要讲α,β,δ,θ等等波段之间的关系.废话不多说,直接给出这几天的成果. 上一次, ...
- 基于mindwave脑电波进行疲劳检测算法的设计(1)
一.简介 脑波,又称之为脑电波,是人大脑发出的电波,非常的微弱,只能通过设备来检测.人的脑波在不同状态下,会不同,因此可以通过脑波来量化分析人的精神状态. 科学家讲脑电波分为四种,以下为详细解释 (1 ...
- 基于mindwave脑电波进行疲劳检测算法的设计(2)
上文讲到的是保证硬件的接通.接下来是用C语言在它提供的API接口进行连接. 在网盘中下载MindSet Development Tools这个开发包.这个目录下MindSet Development ...
- 基于mindwave脑电波进行疲劳检测算法的设计(4)
上一次的实验做到可以从pc端读取到MindWave传输过来的脑电波原始数据了. 我是先定义一个结构体,该结构体对应保存所有能从硬件中取到的原始数据. struct FD_DATA { int batt ...
- 基于深度学习的目标检测算法:SSD——常见的目标检测算法
from:https://blog.csdn.net/u013989576/article/details/73439202 问题引入: 目前,常见的目标检测算法,如Faster R-CNN,存在着速 ...
- 基于Shading Model(对光照变化一定不变性)的运动目标检测算法
光照模型(Shading Model)在很多论文中得到了广泛的应用,如robust and illumination invariant change detection based on linea ...
- 基于候选区域的深度学习目标检测算法R-CNN,Fast R-CNN,Faster R-CNN
参考文献 [1]Rich feature hierarchies for accurate object detection and semantic segmentation [2]Fast R-C ...
- 【计算机视觉】基于Shading Model(对光照变化一定不变性)的运动目标检测算法
光照模型(Shading Model)在很多论文中得到了广泛的应用,如robust and illumination invariant change detection based on linea ...
- 【计算机视觉】基于样本一致性的背景减除运动目标检测算法(SACON)
SACON(SAmple CONsensus)算法是基于样本一致性的运动目标检测算法.该算法通过对每个像素进行样本一致性判断来判定像素是否为背景. 算法框架图 由上图可知,该算法主要分为四个主要部分, ...
随机推荐
- 《Gradle权威指南》--Groovy基础
No1: Groovy中分号不是必须的 No2: Groovy中,单引号和双引号都可以定义一个字符串常量,不同的是单引号标记的是纯粹的字符串常量,而不是对字符串里的表达式做运算,但是双引号可以. ta ...
- 洛谷 p1044 栈 【Catalan(卡特兰数)】【经典题】
题目链接:https://www.luogu.org/problemnew/show/P1044 转载于:https://www.luogu.org/blog/QiXingZhi/solution-p ...
- Linux上的压缩与归档
非常非常非常简要的描述而已. 压缩 压缩的简要原理是通过一些算法,拿CPU的计算时间去换磁盘上存储的空间.同时还可节省网络传输中的带宽. 对于文本文件的压缩效果比较好,对二进制程序.图片等文件的压缩效 ...
- python有序字典OrderedDict()
转python创建有序字典OrderedDict # -*- coding:utf-8 -*- """ python有序字典 需导入模块collections " ...
- MyBatis学习笔记2--配置环境详解
1.MyBatis-config.xml详解 一个完整的配置文件如下所示 <configuration> <!-- <properties resource="jdb ...
- Python3练习题系列(09)——物以类聚,人以群分
目标: 用类管理同类事物 解析: 用到“class”的编程语言被称作“Object Oriented Programming(面向对象编程)”语言.首先你需要做出“东西”来,然后你“告诉”这些东西去完 ...
- Java并发程序设计(十一)设计模式与并发之生产者-消费者模式
设计模式与并发之生产者-消费者模式 生产者-消费者模式是一个经典的多线程设计模式.它为多线程间的协作提供了良好的解决方案.在生产者-消费者模式中,通常由两类线程,即若干个生产者线程和若干个消费者线程. ...
- Flask的使用
一.路由系统 1.子域名的配置 """ 可传入的参数: @app.route('/user/<username>') @app.route('/post/&l ...
- Oracle DML容错处理(2)
关于DML Error Logging效率的问题,摘自网上一篇文章,作为单独一篇说明,原文如下: DML Error Logging in Oracle 10g Database Release 2 ...
- AppleScript脚本学习记录《二》
关于AppleScript 说到AppleScript,可能涉及到三个含义: 1.AppleScript语言:就是苹果脚本的语言,用来编写运行于Mac系统的脚本. 2.AppleScript脚本:就是 ...