天天看點

brainproduct recorder 遠端采集腦電波實時資料RDA子產品的網絡結構圖:打開RDA 服務端:配置用戶端data block的封包格式RDA的四類Message 格式程式設計采集資料

brainproduct 是一家專門提供腦電圖采集、放大、記錄、分析 服務的德國廠商。其recoder 系列産品十分厲害,在臨床中使用的十分廣泛。recoder運作起來就是類似于這個樣子:

brainproduct recorder 遠端采集腦電波實時資料RDA子產品的網絡結構圖:打開RDA 服務端:配置用戶端data block的封包格式RDA的四類Message 格式程式設計采集資料

但是,對于我們程式開發人員來說,我們希望能夠采集可操作的實時的腦波資料。可操作是指我們希望直接得到裝置采集過來的實時原始資料,基于這些原始資料,我們可以做進一步的分析 比如使用人工神經網絡對EGG進行模組化等等。而剛好 recoder系列産品又帶了一個remote data access (RDA)子產品,可以支援遠端的實時資料通路。美滋滋~~~

RDA子產品的網絡結構圖:

brainproduct recorder 遠端采集腦電波實時資料RDA子產品的網絡結構圖:打開RDA 服務端:配置用戶端data block的封包格式RDA的四類Message 格式程式設計采集資料

如上圖所示,安裝了Recorder記錄軟體的計算機就是一個RDA的服務端,RDA 用戶端提供TCP/IP協定來通路服務端,讀取實時資料。用戶端可以使用 python,C,C++,matlab等主流語言來編寫。

其實服務端就是維護了一個原生的TCP socket,然後我們在用戶端編寫socket程式 去通路 服務端就可以了。

打開RDA 服務端:

在recoder 軟體裡面,找到Configuration(配置)菜單, 點選子菜單 Preferences ,然後再preferences的對話面闆選擇remote data Access 欄目,點選那個enable remote data access 一下。效果如下圖:

brainproduct recorder 遠端采集腦電波實時資料RDA子產品的網絡結構圖:打開RDA 服務端:配置用戶端data block的封包格式RDA的四類Message 格式程式設計采集資料

打開服務端後,會打開兩個服務端口:51234和51244。第一個端口用于發送16位的資料,第二個端口使用者發送32位的資料。

配置用戶端

配置好服務端後,接下來我們就要在用戶端編寫代碼去通路服務端的51234端口或51244端口。

首先我們需要與服務端建立一個TCP連接配接, 使用标準的socket即可完成。

例如:

con=socket(AF_INET,SOCK_STREAM)
con.connect("192.168.1.190",)
           

其中192.168.1.190是剛剛配置好的服務端的主機IP位址,該主機需要打開RDA子產品才行。

連接配接好以後,用戶端就會等待服務端發來的資料,每個資料叫做一個data block。用戶端不需要發任何資料到服務端。

下面我們介紹 服務端發來的data block的封包格式。

data block的封包格式

每一個data block都是以下面這種格式布局的:

brainproduct recorder 遠端采集腦電波實時資料RDA子產品的網絡結構圖:打開RDA 服務端:配置用戶端data block的封包格式RDA的四類Message 格式程式設計采集資料

首先是一個Header 頭部區域,裡面描述了後面實際資料的類型,長度,辨別符。

Header主要包含三個字段:

  1. guid ,一個128比特的常數,用于唯一辨別該data block
  2. nSize, 描述了整個data block的大小。(1位元組為機關)
  3. nType,資料類型,描述後面data的是哪一類資料。

nType可以取四個值:

nType取值 含義 備注
1 RDA_MessageStart 啟動消息
2 RDA_MessageData(for 16bit) 資料消息(從服務端51234端口發出)
3 RDA_MessageStop 停止消息
4 RDA_MessageData(for 32bit) 資料消息(從服務端51244端口發出)

RDA的四類Message 格式

RDA_MessageStart消息

啟動消息是在服務端切換到監聽模式,同時有用戶端登入進來的時候發送的。

RDA_MessageStart消息

主要包含如下資訊:

nChannels:通道數目

dSamplingInterval:信号采用間隔,機關是uS,微秒。

sChannelNames:各個通道的名稱,每個通道名稱沒有”\0”隔開

dResolutions:各個通道的精度(機關是uV)

RDA_MessageData消息

所有連接配接到服務端51234端口的用戶端都會接受到這個消息。該消息的内容如下:

nBlock :從伺服器開始監聽,目前塊的塊号。

nPoints:本資料塊資料點或者采樣點的個數

nMarkers:本資料塊中marker的個數

nData[]:實際的資料點,每個資料點是16位元組的有符号整數。

Markers[]:RDA_Marker類型的數組,每個RDA_Marker的結構:

nSize:本marker的位元組大小

nPosition:本marker對應的資料塊在nData[]中的起點位置,從0開始。

nPoints:本marker覆寫的采樣點個數

nChannel:本marker和那個Channel進行綁定

nTypeDesc:描述性文本,無終結符”\0”

RDA_MessageStop

該消息隻有Header,沒有資料段,表示監聽結束

RDA_MessageData32

和RDA_MessageData類似,唯一的差別在于:

RDA_MessageData32的采樣點的資料字段将RDA_MessageData的nData[]替代為fData[],fData的每個元素是32位的 float資料。

這四類資料看起來就像下面這樣的:

brainproduct recorder 遠端采集腦電波實時資料RDA子產品的網絡結構圖:打開RDA 服務端:配置用戶端data block的封包格式RDA的四類Message 格式程式設計采集資料

程式設計采集資料

未完待續 (^▽^)

繼續閱讀