На первой итерации тайминг в поле для психоанализа Matlabs отключен. - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть следующая простая функция для отображения пересечения фиксации в течение 500 мс.

function [duration] = showFixationCross(w,ITI,fixation)
%% This function draws the fixation cross to the middle of screen and shows it for a set duration.

    for i = 1:1:ITI % 4 frames for a total of 67.7 ms
        Screen('DrawLines', w, fixation.coordinates,fixation.lineWidthInPixels, [0 0 0],fixation.center, 2);

        if i == 1 % take time of the onset of the first flip
           [startTime]=Screen('Flip', w);
        elseif i == ITI % and time of onset of the last flip
            [endTime] = Screen('Flip', w);
        else
            Screen('Flip', w);
        end   
    end

    % the endTime is THE BEGINNING of the last flip. Thus, we need to add one frame
    oneFrame = 0.0166;
    duration = (endTime - startTime) + oneFrame;

end 

Как видно, я измеряю время, когда крест фиксации представлен на экране. Чтобы быть уверенным, я запускал функцию пару раз подряд, чтобы увидеть, насколько точным является время. Для этого я использовал следующее:

frame = 0.500/30;
rep = 15; % repetitions to run

fixationDur = [];
for i = 1:1:rep % run the function a couple of times and save the timing. 
    duration = showFixationCross(w,ITI,fixation);
    fixationDur = [fixationDur,duration];
end

% plot the timing 
plot(fixationDur)
hold on
ylim([ITI*frame-0.01,ITI*frame+0.01]) % set ylime to +/- 10 ms.
% add two lines with +/- 1 ms
plot([0,rep],[ITI*frame-0.001,ITI*frame-0.001])
plot([0,rep],[ITI*frame+0.001,ITI*frame+0.001])

Если я запускаю этот фрагмент кода несколько раз, я получаю изображение примерно так:

enter image description here

Как видите, время для итераций очень хорошее, но иногда (?!) Время для первого выполнения довольно далеко.

Что может быть причиной этого, казалось бы, случайного эффекта времени?

...