基於mindwave腦電波進行疲勞檢測算法的設計(3)


  這一節我將講解thinkgear.h 里面的函數和宏定義。這一些都可以在MindSet Development Tools\ThinkGear Communications Driver\docs\html\index.html 這個路徑中找到並打開。是使用doxygen軟件生成的API幫助文檔。
  下面我將做一下簡單的翻譯。其實最主要的功勞還是google翻譯(^v^)?

  這些是API

 1 THINKGEAR_API int TG_GetDriverVersion ()  2  獲取當前TGCD庫的版本  3 
 4 THINKGEAR_API int TG_GetNewConnectionId ()  5  返回一個控制ID,是一個整數。該ID是ThinkGear的連接對象。  6 
 7 /////////////////////下面的函數要用到TG_GetNewConnectionId ////////////////////////////////
 8 THINKGEAR_API int     TG_SetStreamLog (int connectionId, const char *filename)  9  做為一個ThinkGear的連接,將對它進行串行數據流字節的讀取,它將自動記錄這些字節數據到一個日志文件中。 10 THINKGEAR_API int     TG_SetDataLog (int connectionId, const char *filename) 11  作為一個ThinkGear連接器讀取並解析來自它的串行數據流的數據包,它將記錄數據解析到一個日志文件。 12 THINKGEAR_API int     TG_EnableBlinkDetection (int connectionId, int enable) 13  啟用或禁止眨眼檢測 14 THINKGEAR_API int     TG_Connect (int connectionId, const char *serialPortName, int serialBaudrate, int serialDataFormat) 15  連接一個ThinkGear連接,通過給定的ConnectionId,在串行通信(COM)端口,以便與ThinkGear模塊進行通信。 16 THINKGEAR_API void     TG_FreeConnection (int connectionId) 17  釋放與給定的ThinkGear連接相關聯的所有內存。 18 /////////////////////////////////////////////////////////////////////////////////////////// 19 
20 
21 /////////////////////下面的函數要用到TG_Connect ////////////////////////////////
22 THINKGEAR_API int     TG_ReadPackets (int connectionId, int numPackets) 23  嘗試使用ThinkGear連接,通過指定的ConnectionId,讀取串口數據流的numPackets。 24 THINKGEAR_API int     TG_GetValueStatus (int connectionId, int dataType) 25  如果數據類型是由最近一次調用TG_ReadPackets后更新的。那么將返回非零。 26 THINKGEAR_API float     TG_GetValue (int connectionId, int dataType) 27  通過指定dataType類型(該參數的取值為define的那些TG_DATA_開頭的常量)將返回指定類型所取到的值。 28 THINKGEAR_API int     TG_SendByte (int connectionId, int b) 29  通過ThinkGear連接器(大概是為了某個ThinkGear模塊)發送一個字節。 30 THINKGEAR_API int     TG_SetBaudrate (int connectionId, int serialBaudrate) 31  指定connectionid和串口波特率,然后嘗試改變波特率。 32 THINKGEAR_API int     TG_SetDataFormat (int connectionId, int serialDataFormat) 33  給出connectionid和串口數據格式,進而改變所使用的ThinkGear連接的數據包解析格式。 34 THINKGEAR_API void     TG_Disconnect (int connectionId) 35  指定ID,從串行通信端口斷開ThinkGear連接。 36 ///////////////////////////////////////////////////////////////////////////////////////////
37 
38 
39 
40 THINKGEAR_API int     TG_WriteStreamLog (int connectionId, int insertTimestamp, const char *msg) 41 THINKGEAR_API int     TG_WriteDataLog (int connectionId, int insertTimestamp, const char *msg) 42 THINKGEAR_API int     TG_EnableLowPassFilter (int connectionId, int rawSamplingRate) 43  作為一個ThinkGear連接讀取並解析原始腦電值(通過TG_ReadPackets函數),對原始波形數據,驅動程序會自動套用30Hz的低通濾波器。 44 THINKGEAR_API int     TG_EnableAutoRead (int connectionId, int enable) 45      啟用或禁用后台自動讀取連接。

  這些是宏定義:

 1 #define     THINKGEAR_API   __declspec( dllimport ) //棧調用方式
 2 #define     WINVER   0x0501
 3 #define     TG_MAX_CONNECTION_HANDLES   128
 4  Maximum number of Connections that can be requested before being required to free one.  5 ////////////////波特率 TG_Connect() 和TG_SetBaudrate()這兩個函數會用到///////////////////////
 6 #define     TG_BAUD_1200   1200
 7 #define     TG_BAUD_2400   2400
 8 #define     TG_BAUD_4800   4800
 9 #define     TG_BAUD_9600   9600
10 #define     TG_BAUD_57600   57600
11 #define     TG_BAUD_115200   115200
12 
13 ////////////////數據格式////////////////////////////////
14 #define     TG_STREAM_PACKETS   0
15 #define     TG_STREAM_5VRAW   1
16 #define     TG_STREAM_FILE_PACKETS   2
17 
18 ////////////////獲取哪一種數據類型 TG_GetValue()這個函數會用到////////////////////
19 #define     TG_DATA_BATTERY   0 //應該是電量吧
20 #define     TG_DATA_POOR_SIGNAL   1 //連接質量
21 #define     TG_DATA_ATTENTION   2 //專注度
22 #define     TG_DATA_MEDITATION   3 //冥想度
23 #define     TG_DATA_RAW   4 //原始數據
24 #define     TG_DATA_DELTA   5 //δ波段
25 #define     TG_DATA_THETA   6 //θ腦波
26 #define     TG_DATA_ALPHA1   7 //α腦波
27 #define     TG_DATA_ALPHA2   8 //α腦波
28 #define     TG_DATA_BETA1   9 //β腦波
29 #define     TG_DATA_BETA2   10 //β腦波
30 #define     TG_DATA_GAMMA1   11 //γ腦波
31 #define     TG_DATA_GAMMA2   12 //γ腦波
32 #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 (16-bit)
short raw = (Value[0]<<8) | Value[1];

  Value[0]是高位字節,Value[1]是低位字節。
  在系統或語言中位操作不是很方便,可用以下算術運算來代替:

raw = Value[0]*256 + Value[1];
if( raw >= 32768 ) raw = raw - 65536;

  在語言里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數據類型。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM