心理工具箱 精确的定时不会在设定的帧处翻转



我在心理工具箱和准确计时方面遇到了问题。我按照网站上的教程和PsychDocument中的PTBTutorial-ECVP2013.pdf编写了代码。但它不知何故仍然无法正常工作。翻转(超过 20 秒)所需的时间比应有的(1 或 2 秒)要长得多。所以我想我在某个地方犯了一个严重的错误,但我找不到它。你能帮我写代码吗?

无论如何,这就是我的代码的样子。

%Number of seconds to wait (ns)
nsS = 2; %sentences
nsW = 1; %words
nsDot = 7;
nsWait= 3;
%Number of frames to wait (wf) before flipping 
wfS = round(nsS/ifi);
wfW = round(nsW/ifi);
wfDot = round(nsDot/ifi);
wfWait = round(nsWait/ifi);
vbl=Screen('Flip', window);

for i = 1:10 %1:exp.ntrials
sentence = ...; %load sentences
word = ...% load words;
for iframe = 1:300
%draw fixation cross
if iframe <= 60
DrawFormattedText(window, '+','center','center', white);
vbl =Screen('Flip', window, vbl + (wfW-0.5)*ifi);
%draw sentence
elseif iframe <= 180
DrawFormattedText(window, sentence,'center','center', white);
vbl = Screen('Flip', window, vbl + (wfS-0.5)*ifi);
%blank screen
elseif iframe <= 240
Screen('FillRect', window, black);
vbl = Screen('Flip', window, vbl + (wfW-0.5)*ifi);
%Draw word
elseif iframe <=300
DrawFormattedText(window, word,'center','center', white);
vbl = Screen('Flip', window,vbl + (wfW-0.5)*ifi);
end
end
%Draw dot
for frames = 1:wfDot
Screen('DrawDots', window, [xCenter yCenter], 10, white, [], 2);
vbl=Screen('Flip', window, vbl+(wfDot-0.5)*ifi);%, vbl+(wfDot-0.5)*ifi);
%WaitSecs(7);
end
...
end  

看起来您可能正在使用"iframe"循环来迭代屏幕框架?Screen('Flip')命令将等待在适当的时间呈现刺激,不需要'iframe'循环,这是导致您的问题的原因。下面包含一个从您的代码修改的示例(我不得不添加一些在您的示例中未定义的内容)。将代码包装在 try/catch 语句中不是必需的,但出现错误时自动关闭屏幕很方便。

try
window = Screen('OpenWindow', 0, 0);
ifi = Screen('GetFlipInterval', window);
%Number of seconds to wait (ns)
nsS = 2; %sentences
nsW = 1; %words
nsDot = 7;
nsWait= 3;
%Number of frames to wait (wf) before flipping
wfS = round(nsS/ifi);
wfW = round(nsW/ifi);
wfDot = round(nsDot/ifi);
wfWait = round(nsWait/ifi);
vbl=Screen('Flip', window);
black = 0;
white = 255;
for i = 1:10 %1:exp.ntrials
sentence = 'sentence here';
word = 'word here';
DrawFormattedText(window, '+','center','center', white);
vbl =Screen('Flip', window, vbl + (wfW-0.5)*ifi);
%draw sentence
DrawFormattedText(window, sentence,'center','center', white);
vbl = Screen('Flip', window, vbl + (wfS-0.5)*ifi);
%blank screen
Screen('FillRect', window, black);
vbl = Screen('Flip', window, vbl + (wfW-0.5)*ifi);
%Draw word
DrawFormattedText(window, word,'center','center', white);
vbl = Screen('Flip', window,vbl + (wfW-0.5)*ifi);
end
sca;
catch
% close the screen on errors
sca;
end

相关内容

  • 没有找到相关文章

最新更新