溫 菲,岳金星
(1.哈爾濱商業大學外語學院,哈爾濱 150028; 2.哈爾濱工業大學 語言文學學院,哈爾濱 150001)
?
基于MATLAB的神經科學工具包Cogent及其編程實現
溫 菲1,岳金星2
(1.哈爾濱商業大學外語學院,哈爾濱 150028; 2.哈爾濱工業大學 語言文學學院,哈爾濱 150001)
神經科學研究中,高質量實驗數據的采集依賴于時間精度高、功能強大的編程工具,從而精準的呈現刺激材料和收集受試的反應。Cogent便是這樣一款基于MATLAB平臺的神經科學實驗工具包。該工具包誕生于倫敦大學學院,可呈現并編寫聽覺、視覺以及動畫刺激材料,以應用于行為、腦電、功能磁共振成像等神經科學實驗中。Cogent程序編寫的核心有兩個,第一,需要了解Cogent在呈現不同類型刺激時的特殊句法;其二,成功的編程還在于理解程序腳本、緩存分配和數據文件之間的分配與調用關系。由于Cogent編程語法接近自然語言,十分容易上手,非常適合不同背景的神經科學研究人員使用。
神經科學;MATLAB工具包;編程;刺激呈現
在神經科學研究中,通用實驗編程工具種類繁多,既有像E-Prime,Presentation,Inquisit等付費商業軟件,亦有如DMDX等免費的開放程序[1-2]。隨著數學計算工具MATLAB (The MathWorks Inc.) 的不斷普及,基于該平臺編寫的實驗工具包為神經科學實驗帶來了便利,例如呈現刺激常用的編程工具包Psychtoolbox[3]。基于MATLAB的工具包具有免費,精度高,可擴展性和研究適應性強等特點。本文介紹另一種面世時間不長,面向實驗編寫的MATLAB工具包,Cogent。
Cogent工具包誕生于英國倫敦大學學院,由于Cogent通過更加易懂的獨立語法調用MATLAB的底層函數[4],這極大降低了使用的難度[5]。Cogent以卓越三的視覺圖形刺激處理而著稱,亦可以呈現文字和聽覺刺激,并能夠精準地收集受試的反應時間。
Cogent分為三個層次結構[4]。底層結構包括MATLAB、Window操作系統和DirectX工具;中間結構包括以.dll為后綴的低級函數以及MATLAB接口,面向編程人員和高級用戶;最上層為Cogent高級函數包,面向普通用戶,用戶只需要將指令寫入一個m文件(MATLAB腳本文件),執行即可。
1.Cogent的安裝
在倫敦大學學院神經生物學實驗室的網站上(www.vislab.ac.uk/cogent.php)研究人員可以免費下載Cogent。解壓縮Cogent壓縮包之后會在與壓縮包同名的文件夾中出現3個子文件夾,分別是:Documents,Samples,Toolbox。在Documents文件夾中包括所有和Cogent有關的使用手冊;Samples文件夾中是經過嚴格測試可運行的代碼,供研究人員編程時參考;Toolbox中主要包括Cogent各函數的MATLAB腳本。在MATLAB環境下,用“Set Path”加載Cogent中各文件夾目錄至MATLAB路徑之后,即可運行含有Cogent函數的程序腳本。
2.Cogent程序編寫基本原則
一個可以運行的Cogent實驗程序包括Cogent程序代碼、刺激材料和數據文件。Cogent代碼規定實驗如何運行(例如一個詞呈現時間的長短);數據文件(可以為txt格式或dat格式)是程序代碼和刺激材料的中介,實驗運行中,Cogent通過讀取數據文件,決定呈現何種刺激;數據文件通常由兩列構成,第一列是想要呈現的刺激(如一個詞)或刺激的文件名(刺激需加單引號),第二列則是為該種刺激分配的編號。
一段完整的Cogent程序代碼包括三部分:配置語句、實驗起始提示語句和實驗運行語句,三部分缺一不可。
基礎的配置語句有config_display,config_sound, config_keyboard, config_mouse,等。這些配置語句告知Cogent在隨后的實驗中所需要配置的屏幕顯示、聲音播放、輸入設備的參數。
下面以屏幕顯示配置命令config_display為例,介紹研究人員如何根據實驗需要,進行參數設置。在config_display之后添加括號,并為其所包括的8個參數賦值,不同參數間用逗號分開。例如config_display(1,1,[0 0 0],[1 1 1],‘Helvetica’,50,4,0);表示實驗中屏幕為全屏模式,分辨率為640*480,背景為純黑,前景為純白,字體為“Helvetica”,字號為50,分配緩存數為4,顯示每個像點最大像素值。
配置數據文件,同樣必不可少。若數據文件存放路徑與MATLAB環境中的當前目錄相同,則通過命令config_data(‘文件名.dat’)即可配置數據文件,無須添加額外的路徑信息。
在配置語句之后需要用start_cogent提示計算機開始執行cogent實驗代碼,與之相對的是在腳本的最后,需要用stop_cogent語句提示計算機停止程序運行。
在開始和結束提示語句的中間,寫入實驗運行語句。該部分主要包括編寫背景對象、編寫刺激對象和編寫受試反應收集。背景對象主要指實驗過程中呈現相對穩定的對象,例如實驗指導語、屏幕中央注視點“+”號等。針對背景對象編寫代碼最重要的原則是,先將對象放入相應的緩存單元,然后再將其呈現。例如下邊這段代碼可以實現在屏幕上先呈現“+”號,再呈現“&”號,然后再呈現“+”號。
但是,如果之后需要使用相同編號的緩存單位呈現不同的刺激,需要及時將該單位清空,以防止對象重疊呈現。在上例中可以用clearpict(n)命令,其中n代表要清空的緩存單位號(例如1或2)。
與該邏輯相同,呈現實驗刺激時,需要經歷刺激的提取、載入和呈現三個步驟。第一步提取刺激。由于刺激呈現往往需要參考數據文件,因此,通常首先用getdata(r,c)語句讀取數據文件中的內容,括號中r定義的是讀取數據文件中矩陣的行數,c對應的是列數。如果刺激來自文件,載入文件的同時應分配給其相應的緩存單位。用loadpict( ‘文件名.擴展名’,n)命令載入圖片文件,用loadsound( ‘文件名.wav’,n)載入聲音文件,文本刺激用preparestring( ‘文本’,n)語句載入,n代表編程人員為其分配的緩存單位編號。第一步與第二步的順序根據實驗需要可以做相應的調整。第三步呈現刺激。視覺刺激通過drawpict(n)來呈現。聲音刺激通過playsound(n)和waitsound(n)的命令組合來呈現,前者指示Cogent播放緩存n中的聲音刺激,waitsound(n)表示直到緩存n中的聲音刺激播放完畢再進行其他操作。
1.呈現文字刺激
在以語言為對象的神經科學研究中,文字刺激的呈現必不可少,下邊結合Cogent自帶的范例1介紹關鍵語句(程序代碼中的%號后面的文字是對代碼語句的解釋說明)。
config_display; %采用缺省參數配置屏幕呈現
config_data('sample1.dat'); %從sample1.dat中讀入數據
start_cogent; for i=1:countdatarows
word = getdata(i,1); % word=表示賦值給word。
clearpict(1);
preparestring(word, 1);
drawpict(1); %此時刺激呈現在屏幕上。
wait(1000);
來自于阿美或自他承包商,有能力、經驗和資格識別腳手架安全風險,驗證腳手架是否符合阿美相關標準要求,同時記錄腳手架檢查及驗收結果。腳手架檢查工程師也必須經過阿美認證,其證書有效期也是三年
drawpict(2);
wait(1000);
end %當for循環在i所有可能的取值運算結束后,在此結束for循環,程序繼續向下運行。
drawpict(2);
stop_cogent;
上述代碼第四行for i=1:countdatarows中是一個for循環語句,表示i的值從1開始取,“:” 表示“直到”,例如1:3表示1,2,3;countdatarows為Cogent語句,表示返回數據文件中的行數,如果數據文件中有3行數據,則返回3。for循環語句將在i每取一個值的情況下運行一次,每次運行至end再重i的另一個取值開始運行。當運行完i所有的取值后,for循環結束,并開始執行end之后的代碼。
2.反應時數據的收集
在神經科學實驗中,反應時間對于研究至關重要。用Cogent可以通過編寫簡單的代碼,精確地收集到這個指標。收集到的數據將被存儲在與代碼同名但擴展名為.res的結果文檔中,受試反應的錄入情況將完整地記錄在擴展名為.log,文件名為‘Cogent-YYYY-MM-DD-HH-MM-SS.log' 的日志文檔中,其中“YYYY-MM-DD-HH-MM-SS”分別以實驗結束時的“年-月-日-小時-分鐘-秒”來命名。為了生成這兩個重要文件,需要在配置命令中添加針對結果文件和日志文件的配置語句。下面結合范例7,介紹具體代碼。該范例中,在文字刺激后,受試需按鍵盤錄入反應。代碼實現的功能為呈現刺激,記錄不同試驗(英文為trial,指實驗中允許完成一次測量的實驗單元)中受試的按鍵,并計算反應時。實驗結束后,日志文檔和結果文檔既可以直接在MATLAB中讀取,也可以通過Windows操作系統自帶的記事本打開,檢查結果十分方便。
config_display(0);%0表示在窗口而非全屏模式下顯示
config_data( 'sample7.dat' );
config_log; %配置日志文檔
config_results('sample7.res'); %配置結果文檔
config_keyboard; %配置鍵盤
start_cogent;
preparestring('+',2); %將注視點‘+’載入緩存2中央
for i=1:countdatarows
code=getdata(i,1); %在數據文件第i行第1列提取編碼信息存入變量code
word=getdata( ,2); %在數據文件第i行第2列提取文字刺激存入變量word
logstring(code); %將編碼信息寫入日志文檔
logstring(word); %將文字刺激寫入日志文檔
clearpict(1);
preparestring(word,1);
drawpict(2);
wait(1500);
drawpict(1);
t0=time; %記錄文字刺激呈現時間點,并賦值給變量t0
logstring( t0 ); %將當前時間點信息寫入日志文檔
clearkeys; %清除所有鍵盤錄入信息
waituntil(t0+500); %文字刺激呈現后持續(等待)500毫秒
drawpict(3);
waituntil(t0+1000); %清屏,直到文字刺激呈現后1000毫秒
readkeys; %讀入所有鍵盤輸入信息
logkeys; %將鍵盤輸入信息寫入日志文檔。以下代碼的功能是檢查鍵盤錄入并計算反應時
[key,t,n]=getkeydown; %getkeydown命令檢查鍵盤輸入并計算反應時
if n==0 % if-else語句的起始條件,通過“==”做邏輯判別,表示“當沒有鍵盤輸入時”
response=0; %鍵盤錄入信息沒有,記為0
rt=0; %反應時間無法計算,記為0
elseif n==1 %嵌套if語句,意義為:當出現一個鍵盤輸入時
response=key(1); %鍵盤錄入信息記為key(1)的值
rt=t(1)-t0; %反應時為鍵入反應的時間點與刺激呈現開始時間點之差
else %if-else語句的其他條件,即其余情況(如同時按下多個)按鍵
response=0; %鍵盤錄入信息記為0
rt=0; %反應時記為0
end %if-else語句結束
addresults(word, response, rt); %將文字刺激,按鍵信息,反應時寫入結果文檔
end %for循環結束
stop_cogent;
Cogent工具包具有免費、精度高、編程上手容易、結果檢查便利等特點,與其他實驗軟件相比,Cogent在功能與操作上與商業軟件Presentation相當[2];與免費軟件DMDX相比[6],其功能更為全面,查看結果更容易。
但是,Cogent僅在Window2000操作系統,MATLAB 6.0和6.1環境下經過完整的測試[4]。與早期的E-Prime相似[7],Cogent不支持漢字顯示,呈現漢字時需將其轉換成為圖片格式。考慮到其諸多優點,對于編程經驗不多的學生和研究人員來說,Cogent無疑是一個很好的選擇。
[1]宮大志,李壽欣.多種心理學實驗生成工具的比較分析[J].實驗室研究與探索,2008,27(10).
[2]馮成志,賈鳳琴.心理學實驗軟件Presentation的應用[J].實驗室研究與探索,2009,28(4).
[3]MATLAB[EB/OL].Natick,Massachusetts:The MathWorks Inc.,2012.
[4]Cooper, R, Yule, P. COGENT: An environment for the development of cognitive models[A].In Schmid,U.,Krems, J. F., & Wysotzki, F.(eds.) A Cognitive Science Approach to Reasoning, Learning and Discovery[C], Pabst Science Publishers,Lengerich,Germany.1997:55-82.
[5]Laboratory of Neurobiology[EB/OL].http://www.vislab.ucl.ac.uk/cogent.php,2012.
[6]更柳娜,張鵬.DMDX心理學教學平臺及其應用[J].現代遠距離教育,2009,(121).
[7]陳慶榮,單艷紅,鄧鑄.E-Prime實驗系統及其在心理學中的應用[J].實驗室研究與探索,2006,25(12).
[責任編輯:趙天睿]
2015-11-20
教育部基金資助項目(12YJCZH262)
溫菲(1980-),女,黑龍江哈爾濱人,講師,主要從事神經語言學、教學法研究;岳金星(1982-),男,吉林長春人,講師,博士,主要從事言語的神經基礎研究。
TP31
A
1008-7966(2016)01-0154-03