如何使循环运行得更快-Matlab中的Psychtoolbox

时间:2018-09-04 05:35:44

标签: matlab loops psychtoolbox

我使用Psychtoolbox创建了一个MATLAB代码进行实验。 一切都按我的预期工作,但似乎实验的初始加载时间太长。该任务是一个简单的是/否响应任务,无论目标单词(“ probe”)是否出现在前一组单词刺激中。

我将基本的介绍文字作为图像,然后等待任何按键开始实验,但是在任何按键之后实际上需要大约40秒才能开始第一次试用。我想让它正常工作。它应该在击键后立即开始其第一次试用。

我使用GetSecs()在代码中的多个位置检查了时间停止,这与我在下面附加的for循环之前的加载刺激或实验的初始设置无关。

为了使事情看起来更简单,我将一些变量更改为我使用的实际数字。我可以保证这不是因为刺激大小太大,因为它只有1500个单词。一旦for循环启动,它运行就很顺利,但是实际开始第一次试用需要40秒钟,因此我认为这与for循环中的特定功能或构建方式有关。

请让我知道是否有任何内容过于含糊或不清楚。我会尽力使内容阅读得更好。

编辑:我最小化了代码,仅保留Psychtoolbox中使用的函数名称。我保留了在循环之间使用的函数,以让您知道它们是否会引起任何延迟。如果未安装Psychtoolbox,将无法运行此程序,因此我想您可以简要检查一下代码的结构。

for trial = 1:250
    for i = 1:6 
        DrawFormattedText();
        Screen();
        WaitSecs(0.5);
    end
    DrawFormattedText();      
    flipTime = Screen();
    WaitSecs(0.5);
    DrawFormattedText();
    flipTime = Screen();
    rt = 0;
    resp = 0;
        while GetSecs - flipTime < 3
            clear keyCode;
            RestrictKeysForKbCheck();
            [keyIsDown,secs,keyCode] = KbCheck;
            respTime = GetSecs;
            pressedKeys = find(keyCode);
            % ESC key quits the experiment
            if keyCode(KbName('ESCAPE')) == 1
                clear all
                close all
                sca
                return
            end
            % Check for response keys
            if ~isempty(pressedKeys)
                for i = 1:2
                    if KbName(i) == pressedKeys(1)
                        resp = i;
                        rt = respTime - flipTime;
                    end
                end
            end
            % Exit loop once a response is recorded
            if rt > 0
                break;
            end
        end
    if rt == 0 || rt > 3 % 3 second limit for subjects to react to the probe stimuli
       DrawFormattedText(); 
       Screen();
       WaitSecs(1);
    end
    Screen();
    vbl = Screen();
    WaitSecs(1);
    % Record the trial data into output data matrix
    respMat{1, trial} = trial;
    respMat{2, trial} = resp;
    respMat{3, trial} = rt;
end

0 个答案:

没有答案