我在MATLAB中创建了类似Stroop的反应时间任务,并且查看试验结果表明我的代码可能有问题(一致性效果远大于预期)。我怀疑我可能会记录RT错误,所以任何人都可以帮我解决以下设置是否正常?
在任何给定的试验中,发生两个事件(在固定交叉之后):首先,目标刺激最多呈现3秒(或直到响应),然后参与者必须按下按钮才能开始下一次试验。记录按钮(目标和试用开始按钮)的RT。这是我的代码:
Screen('DrawTexture', mainwin, Target);
Screen('Flip', mainwin);
timeStart = GetSecs;keyIsDown=0; correct=0; rt=0;
while 1 & (GetSecs - timeStart) < 3
[keyIsDown, secs, keyCode] = KbCheck;
FlushEvents('keyDown');
if keyIsDown
nKeys = sum(keyCode);
if nKeys==1
if keyCode(Left)||keyCode(Right)||keyCode(Down)||keyCode(Up)
rt = 1000.*(GetSecs-timeStart);
keypressed=find(keyCode);
Screen('Flip', mainwin);
if ... [I removed some irrelevant ERROR feedback related code here]...
elseif keyCode(escKey)
ShowCursor; fclose(outfile); Screen('CloseAll'); return
end
keyIsDown=0; keyCode=0;
end
else
keypressed = 0; %the resp column in output is 0 if no button is pressed
end
end
if keypressed == 0 %indicates timeout errors
DrawFormattedText(mainwin, 'TOO SLOW', 'center', 'center', errorcol);
Screen('Flip', mainwin);
WaitSecs(1);
end
Screen('DrawTexture', mainwin, press5);
Screen('Flip', mainwin);
keyIsDown=0; timeSt = GetSecs;
while 1
[keyIsDown, secs, keyCode] = KbCheck;
if keyIsDown
if keyCode(MoveOn)
pause_rt = 1000.*(secs - timeSt);
break ;
elseif keyCode(escKey)
ShowCursor;
fclose(outfile);
Screen('CloseAll');
return;
end
end
end
我的问题:GetSecs命令会在每次调用时获取时间,对吧?所以GetSecs - timeStart是一种计算RT的好方法 - 但是secs - timeSt(如第二次刺激所见)也是如此,因为secs是KbCheck为buttonpress返回的时间。这两种方法大致相同(使用GetSecs - timeStart可能会略微过高估计RT),这是正确的吗?
我担心的是,NEXT试验目标的RT估计可能会受到PREVIOUS试验的第二次按下按钮RT的影响。你有没有看到这方面的证据?
答案 0 :(得分:1)
你是正确的GetSecs
每次调用它都会返回时间。但是,虽然不是导致错误的原因,但在每个窗口Flip之后调用GetSecs是不必要的,因为Flip函数返回刺激开始的估计值,作为函数的第二个输出。例如,而不是:
屏幕('Flip',mainwin); timeStart = GetSecs;
你可以使用
[〜,timeStart] =屏幕('Flip',mainwin);
我没有注意到代码中有任何明显错误,当你说RT似乎不正确,它们看起来太快还是太慢?我个人会在收集RT之后使用KbReleaseWait
等待Key释放,但FlushEvents可能在这里做了类似的事情。