天天看點

關于使用gtec采集腦電資料的時間對準問題(matlab timer)

對于我使用的64位的gUSBamp裝置,采集腦電的時候,提供的demo的方法是

  1. 每隔一段時間取一次資料
  2. 從開始取資料取多少個資料點結束。

我使用的是psychtoolbox進行範式的編寫和呈現,因為單個trial執行任務的時間比較長(超出了緩沖區的大小,也就沒辦法使用方法2),想要呈現範式的同時進行資料的采集,想到的方法是使用timer

timer函數是matlab提供的定時器函數,可以定義每隔多長時間執行一次目标函數,這樣的話便可以進行同步的資料采集。

問題1:timer是并行的還是打斷目前matlab函數執行的

進行了一個測試,采集一定時間的資料,時間是使用pause函數定義的,pause函數是停止matlab程式的執行,但是發現最後的資料确實是定義的時間左右的資料,是以應該是并行的,至少在采集資料的時候,資料一定是連續的(采集之後繪制原始資料也确實是連續的)

問題2:timer函數如何使用

使用的時候需要注意,其中的變量必須是全局變量,在使用timer之前在代碼中定義全局變量,同時也要在timer的目标函數中定義全局變量

問題3:開始時間如何對準

要想得到時間戳,腦電信号有一個序列,根據采樣率可以推測時間,隻要定義另外一個範式的時間序列,對準開始時間之後,便能夠對準範式和腦電信号。

腦電信号的0點是腦電資料開始往緩沖區讀取的時刻,是以在startAcquisition之後定義範式時間序列的0點即可,這樣得到的腦電信号序列和時間序列就是對準的

問題4:發現最後的資料少了一些是怎麼回事

  1. 假設目标函數的執行周期是t,timer的執行周期是T,t一般是小于T的,讀取的資料是T時間内的資料,和t無關,這樣的話,如果是在執行完目前的目标函數之後的t~T時間内停止了計時器,腦電資料便少了
  2. 另外一個原因是waitsecs函數的問題,我是使用for循環定義的範式trial,在每個循環的最後是休息幾秒,但是執行的時候發現,無論定義多少個trial,都會丢失固定時間的腦電資料,原因便是最後的waitsecs函數的問題(一定是,因為把其他的waitsecs以及文字聲音提示等等一個一個注釋掉之後,還是丢失那麼長的資料,隻有注釋掉最後的waitsecs之後,資料不少了),解決辦法是将waitsecs函數替換為pause函數,範式效果是一樣的,但是腦電資料準确啦!!!(其實不管也行,因為确定的是,丢的資料是最後執行完之後休息的資料,其實也就無所謂了)

繼續閱讀