首页 文章

psychtoolbox精确计时不在设定帧翻转

提问于
浏览
0

我在使用psychtoolbox和准确计时方面遇到了问题 . 我按照网站上的教程和PsychDocumentation中的PTBTutorial-ECVP2013.pdf编写了我的代码 . 但它仍然不能正常工作 . 它需要更长的时间(1或2秒)翻转(超过20秒) . 所以我想我在某个地方犯了一个严重的错误,但我找不到它 . 你能帮我解决一下我的代码吗?

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

%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

1 回答

  • 0

    看起来你可能正在使用'iframe'循环迭代屏幕框架?屏幕('翻转')命令将等待在适当的时间呈现刺激,不需要'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
    

相关问题