【问题标题】:Using KbCheck and GetSecs to record reaction time in a conflict task in MATLAB (Psychtoolbox)使用 KbCheck 和 GetSecs 在 MATLAB 中记录冲突任务中的反应时间(Psychtoolbox)
【发布时间】:2017-10-31 10:50:57
【问题描述】:

我在 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 返回按钮按下的时间。这两种方法在很大程度上是等效的(使用 GetSecs - timeStart 可能会稍微高估 RT),对吗?

我担心的是,NEXT 试验中目标的 RT 估计值可能会受到 PREVIOUS 试验的第二个按钮 RT 的影响。你看到任何证据吗?

【问题讨论】:

    标签: matlab psychtoolbox


    【解决方案1】:

    GetSecs 在调用时返回时间是正确的。但是,尽管不是导致错误的原因,但不需要在每个窗口 Flip 之后调用 GetSecs,因为 Flip 函数返回刺激开始的估计值,作为函数的第二个输出。因此,例如,而不是:

    Screen('Flip', mainwin); timeStart = GetSecs;

    你可以使用

    [~, timeStart] = Screen('Flip', mainwin);

    我没有注意到代码中有任何明显错误,当您说 RT 看起来不正确时,它们看起来是太快还是太慢?我个人会在收集 RT 后使用KbReleaseWait 等到 Key 被释放,但也许 FlushEvents 在这里做类似的事情。

    【讨论】:

    • 感谢您的建议!问题有点复杂,因为 RT 本身看起来不错,但不同试验类型(冲突与非冲突)之间的 RT 差异相当大 - 比文献中的大 - 我在想也许我混淆了一些东西在同一试验中为不同事件记录两个单独的 RT。
    猜你喜欢
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多