Eprime时间问题Word格式.docx
《Eprime时间问题Word格式.docx》由会员分享,可在线阅读,更多相关《Eprime时间问题Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
高级>
监视器,你可以看到屏幕刷新频率60赫兹。
但是,我们看到的是生产厂商报告的屏幕刷新率为60赫兹。
而实际上真正的屏幕刷新率不一定就是60Hz。
在e-prime中可以测电脑屏幕的实际刷新频率。
在e-prime收集的数据文件的logs中查看Display.RefreshRate的值就是电脑屏幕的实际刷新频率。
下面是一些测试数据:
那么时间精确度和屏幕刷新频率有什么关系呢?
当然有啦!
存在下面的公式:
(Thereportedrefreshrate)/(theactualrefreshrate)=(actualtime)/(expectedtime)
举一个例子,如果一台电脑报告的屏幕刷新率为60Hz,而实际为75.3Hz。
当这台电脑的屏幕刷新了60次,根据报告的刷新频率(60Hz),电脑显示所用时间为1000ms,而实际上只有797ms。
所以说影响时间精确度第一个问题就是电脑的屏幕刷新率不准确。
e-prime自动检测屏幕实际刷新率,在每一个run开始的时候,并把实际刷新频率记录到数据中,实验者可以进行检查。
当然在编写实验程序的时候,需要把e-prime中显示系统的屏幕分辨率和颜色质量设置为与电脑屏幕是一样的。
具体操作可以参照e-prime使用指南。
二、刺激呈现时间偏离设定值
在用程序呈现刺激的时候,尽管我们设置一个刺激呈现时间为800ms,但是偶尔却达到了1000ms。
这种偏离是偶然的,你不知道什么时候它会发生。
这是为什么呢?
我们首先要知道,控制电脑的是我们的系统,而不是我们。
电脑常常在运行着多个进程,当系统内存资源不足的时候,操作系统会优先让一些进程先运行,而让其他一些程序暂停,而且这种情况我们不知道什么时候会发生,这就产生了上面的随机偏离。
下面的图很好的描述了这一点。
最下面的白色线条,表示我们设定刺激呈现时间是200ms,但是在第一个session和第二个session中,都随机出现了峰值,这就是系统让e-prime暂停运行,从而导致了某一次刺激呈现时间的延长。
另外一个问题可能大家也注意到了,除了那些偶然的峰值以外,实际的呈现时间总是在300ms左右,而不是设定的200ms,这又是为什么呢?
原因在于,程序调用图片是需要时间准备的。
在这个例子中,程序调用图片需要的准备时间为100ms左右。
所以这里有两个问题,第一就是系统的偶然“堵塞”,会导致程序的暂停,从而使呈现时间出现偏离。
第二就是程序调用图片或者刺激是需要准备时间的。
如果连续中间没有间隔地呈现图片,每张图片呈现200ms,我们会发现实际上中间会有100ms的准备时间,也就是说一张图片的呈现需要用300ms。
e-prime怎么解决这个问题的呢?
首先e-prime中可以通过在程序的最开始添加inline语句实现。
即告诉系统,e-prime是优先执行的进行,不受任何其他程序的影响。
在系统中,优先等级有三个:
0,1,3。
0是最高等级,3是一般等级。
如果我们希望e-prime的优先等级为0,则在inline中添加如下语句:
SetOSThreadPriority0
但是一般而言,我们都不会把e-prime的优先级设置为0。
而是在实验的时候关掉其他程序。
第二问题e-prime通过PreReleaseTimingDiagram来解决。
下图很好的说明了这个方法。
就是在呈现当前刺激的时候,e-prime在后台开始准备下一个刺激的呈现。
在下图中,准备刺激所要30ms,所以如果PrePelease值为0,即不需要提前准备下一个刺激的呈现,那么刺激呈现之间就会有30ms的间隔。
当PrePelease值设置为30ms(大于30ms也可)时,即当前刺激还在呈现的时候,提前30ms在后台准备下一个刺激的呈现。
在刺激属性窗口的duration/input项目中,有一个PreRelease值需要设置,默认为0。
在具体的实验中要根据刺激呈现的准备时间为准。
一般而言PreRelease值设置为150-200ms就可以满足大部分刺激呈现的要求。
这个值的设定的时候有一个问题需要注意,就是当前刺激紧跟反馈的时候。
由于反馈的呈现需要提取当前刺激的反应信息,如果让反馈显示提前准备,有可能被试还没有作出反应,无法提取被试的反应信息,从而做出被试没有反应的反馈。
所以当下一个呈现是反馈的时候,一般设置PreRelease为0.
三、刺激呈现时间与屏幕刷新周期的关系
前面已经提到过,如果刷新频率不正确,会导致时间偏差。
其实屏幕刷新周期与时间精确度也有关系。
屏幕刷新周期(therefreshcycle),就是屏幕从这一次刷新到下一次刷新所需要的时间。
首先要明白屏幕上显示的图像是有一个一个的像素组成的。
分辨率为1024*768的屏幕,是说屏幕上有1024*768像素矩阵,1024列,768行(verticaldisplayline)。
屏幕显示是从左上角开始从左到右一个一个像素的显示,显示完一行,再从左到右开始显示下一行,一直到右下角。
也就说,一个在屏幕左上角的刺激比屏幕右下角的刺激更早显示出来(大约一个周期14ms),只是我们的肉眼没有办法分辨而已。
屏幕刷新之后(显示完后),需要完成一个verticalblankevent(这个我也不是很理解,原句在这里:
thetimethattheelectronicgunonthemonitormovesfromthebottomrightofthedisplaytothetopleftofthescreenrestarttherefresh,我个人理解为可能类似于准备下一次显示需要完成的一个事件,这个事件类似于用一个电子枪从屏幕的右下角开始进行扫描到左上角,与屏幕显示的方向相反。
所需的时间3ms左右)。
规定屏幕周期从verticalblankevent开始,到屏幕从左上角到右下角的显示完成结束。
如下图:
刺激显示的时间是屏幕刷新周期的整数倍。
举一个例子,假设屏幕刷新周期是13.67ms,设置刺激的呈现时间为200ms,那么我们看到的刺激呈现时间可能有两个值:
191.3ms(14*13.67ms)或者205.0ms(15*13.67ms)。
在e-prime中,我们默认刺激显示要和下一次屏幕刷新周期同步。
也就是说,与erticalblankevent同步。
如果目前不同步,e-prime会等待下一次erticalblankevent,然后开始呈现刺激。
即如果目前屏幕才刷新一半,而我设置刺激立即显示。
实际上刺激不会立即计时和显示,而是在下一次屏幕刷新开始计时并显示。
这样就可能导致时间的偏离和累计偏离。
e-prime提供了多个时间模式解决这个问题:
EventModeTiming、CumulativeModeTiming、CustomModeTiming。
EventModeTiming,这个模式下,能保证单个刺激的呈现时间,但会有一定的时间漂移,并且最后累积下来,导致实验时间偏移。
CumulativeModeTiming能,这个模式下,能保证整个trial的时间没有偏移,但是单个刺激的呈现会出现调整。
下面的图很好的展示了EventModeTiming和CumulativeModeTiming的区别。
大家可以根据具体的实验要求去设置。
在属性对话框的duration/input中进行设置。
CustomModeTiming,这个模式需要我们自己写代码了。
如:
Probe.CustomOnsetTime=Clock.Read+5000
Probe.CustomOffsetTime=Probe.CustomOnsetTime+100
具体怎么写要参看e-prime的basichelp,掌握基本的函数、命令、句法。
四、对所有数据进行记录和检查
这一点主要是针对那些非常关注时间精确度的实验了。
实验者可以记录每个刺激呈现开始的时间和结束的时间,然后进行分析。
看中间有没有时间偏差,然后对数据进行校正,或者剔除。
这主要决定于实验对时间精确度的需求。
e-prime操作实例1
在开始编写实验程序之前,我们要想好自变量是什么,因变量是什么。
下面举例。
1.go/nogo任务
e-prime编程要从最小的一个trial开始。
对于一个trial,可能是gotrial也可能是nogotrial。
Gotrial中,被试看到go的cue(自变量)的时候按“/”键。
所以要想好用什么刺激作为go的cue。
需要记录被试的反应、反应时、正确率(因变量)。
Nogotrial中,被试看到nogo的cue的时候不按键。
所以要准备nogo的cue。
在nogotrial中记录被试的反应(按键与否)和正确率(因变量)。
本实验采用一个7.5cm*2.5cm的长方形作为条件刺激。
当长方形竖着为条件1,横着的时候为条件2。
条件1和条件2各占50%.
条件1的时候,图形变成蓝色是nogotrial,占20%,图形变成绿色就是gotrial,占80%。
条件2的时候,图形变成蓝色是nogotria,占80%,图形变成绿色就是gotrial,占20%.
这样,一共有四种组合,随机呈现。
一般而言,对于一个trial,首先要在屏幕中心呈现一个注视点(fixation)。
接下来就是呈现提示信息(cue/prime,自变量),然后是刺激(stimulus,自变量),反馈(feedback)。
而我们需要记录的被试的按键反应(response)、反应时(reactiontime)、正确率。
所以需要告诉程序什么是正确反应(correctresponse),让计算机判断被试反应是否正确,从而计算整个实验的正确率。
当然并不是每一个实验都有反馈(feedback)、都有提示信息(cue/prime),要根据自己的实验设计具体设置。
有的实验设计中每一个trial都包括对trialtype的提示信息(自变量)。
在这里go/no-go任务需要反馈(feedback)、都有提示信息(cue/prime)、trialtype的提示信息。
需要注意的是,注视点后直接呈现刺激有时候显得很突兀。
所以在注视点到呈现刺激的中间,我们常常加入一段很短的空白屏,使实验看起来更加流畅而不突兀。
这样就可以设计出在单一的一个trial中需要呈现的刺激有哪些,并用一个table整理出来。
每一行代表一个trial。
很多trial连续呈现就形成一个block了。
fixation
blank
condition
Cue/Trialtype
Correctresponse
+
vertical
Blue
/
Horizontal
Green
…
e-prime操作实例2
Postedby艾草on2009年9月3日星期四
e-prime、gonogo2comments
弄清楚每一个trial中需要呈现的刺激序列后,就要开始思考是否需要练习的trial,需要练习多少个trial。
正式实验的时候,需要多少个trial,分成几个block来实现。
本次的Gonogo任务正式实验需要200个trial,放在一个block中。
条件1(长方形立着,长(2.5cm)*高7.5cm)和条件2(长方形躺着,长(7.5cm)*高(2.5cm))分别为100个trial,如下表。
Condition
形状
Trialtype
颜色
Trial数
1
长(2.5cm)*高7.5cm)
Go
green
80
Nogo
blue
20
2
长(7.5cm)*高(2.5cm)
所以我需要准备一个list,包含了200个trial的所需的刺激材料,每个trial一行。
到目前为止,对实验的理论设计部分就已经完成。
现在要具体操作了。
稍作休息……
首先用ppt做物料,这个前面已经说过,这里不细说了。
现在我已经准备好了如下的图片材料,e-prime支持bmp格式的(e-prime1.1只支持bmp格式的,e-prime2.0支持其它格式的图片):
Introduction.bmp‘因为不支持中文文本,所以把中文指导语做成了图片。
Ver.bmp‘条件1的长方形:
长(2.5cm)*高7.5cm),立着,内没有填充颜色。
Ver_go.bmp‘条件1的长方形,内填充颜色为绿色,提示为gotrialtype。
Ver_nogo.bmp‘条件1的长方形,内填充颜色为蓝色,提示为nogotrialtype。
Hor.bmp‘条件2的长方形:
长(7.5cm)*高(2.5cm),躺着,内没有填充颜色。
Hor_go.bmp‘条件2的长方形,内填充颜色为绿色,提示为gotrialtype。
Hor_nogo.bmp‘条件2的长方形,内填充颜色为蓝色,提示为nogotrialtype。
Corr.bmp‘正确反应的反馈信息,由于不支持中文,所以也做成了图片。
Incorr.bmp‘错误反应的反馈信息。
Start.bmp‘练习后,进入正式实验。
Goodby.bmp‘实验完成,结束语。
有了上面的这些物料后,就开始打开e-prime>
s-studio,打开一个空白实验(blankexperiment):
在structure窗口中,双击SessionProc,右边窗口中打开一个左端绿色,右端红色的时间轴:
我们可以把要呈现的物体(object)从左到右排列在这条线上,并设置每个物体(object)的呈现时间、呈现位置等。
前面已经介绍过需要把e-prime的分辨率设置到与屏幕分辨率一样,这里不在赘述。
基于前面的实验设计,我们首先要给被试呈现的是一个指导语(introduction),并且用图片的形式进行呈现。
所以就用鼠标从toolbox窗口drag一个ImageDispaly放到SessionPro的轴上。
并且把ImageDisplay的名字改为Introduction。
指导语之后,就是练习。
所以从toolbox窗口drag一个list放到Introduction后。
Listobject用来存放练习所需的trial。
所以重命名为praclist。
练习完后就进入正式实验,鼠标从toolbox窗口drag一个ImageDispaly放到praclist后,提醒被试马上就要开始正式实验了。
所以重命名为start。
从toolbox窗口drag一个list放到start后,这个list用来存放正式实验所需的trial。
所以重命名为blocklist。
因为这个实验只有一个block,所以这个block完之后,正式实验也就结束了。
然后要呈现一个结束语,所以从toolbox窗口drag一个ImageDispaly放到blocklistt后,重命名为goodby。
最后,SessionProc的时间轴、结构窗口如下:
这就是gonogo实验的最顶上一层。
从这里可以看出,当我们在构思一个实验的时候,是从一个trial水平开始,从最底层开始建构,到block水平,到整个实验水平(sessionlevel)。
而在用e-prime编写实验的时候,却是从整个实验最顶层开始,到block水平,再到trial水平。
现在我们开始设置SessionProc上每一个object的属性。
双击introduction,点击左上角的属性图标(如下图),打开一个Properties:
introduction的属性设置框。
在这个设置框中可以对introduction的所有属性进行设置。
点击”general”,点击filename后面的文件夹,浏览到introduction.bmp所在的文件夹,选中introduction.bmp。
或者直接在filename后面的输入框中输入路径和文件名:
D:
\experiment_program\go_no_go\introduction.bmp。
然后还有AlignHorizontal和AlignVertical都设置成center,意思是让坐标原点在屏幕中间。
BackColor设置屏幕的背景颜色,一般是白色或者黑色(当图片有屏幕那么大时,这个就失效了,因为无论白色还是黑色都被图片遮住了)。
其它默认就好了。
点击”Frame”,这是显示框的大小和位置的。
如果需要满屏占据,在Size后Width和Height都设置成100%就可以了。
Positon选择center,其它都默认好了。
这样图片就满屏显示在屏幕上了。
点击“Duration/Input”,设置图片呈现时间和反应输入。
Duration根据需要设置不同的呈现时间,这里由于是指导语,需要被试自行控制是否理解。
所以Duration设置为infinite,也可以在里面填写-1,同样是infinite的意思。
DataLogging设置需要记录什么数据,由于这里是指导语,不需要记录反应时,也没有正确率什么的,所以设置为none。
Timingmode和PrePelease设置为Event和0,这是默认值。
InputMasks设置允许的反应键和正确反应键。
这里选择keyboad键盘输入。
Allowable是允许的反应键,这里设置为SPACE空格键,注意需要大写并且用大括号。
Correct设置正确反应键。
这里不记录任何数据,所以无需设置这一项。
后面的Timelimit是允许按键反应的时间,即在多长时间内按键有效,这里设置为图片的呈现时间sameasduration。
EndAction是被试按键后,程序的动作,设置为Terminate,即被试按键后,图片就结束,进入下一个呈现画面。
其他保持默认就好了。
Sync、Logging、note保持默认就好了。
然后点击OK。
Introduction.bmp图片就已经load到程序中了。
按照同样的方法设置好start和goodby。
接下来就是设置praclist。
明天再说吧....