У меня есть следующая простая функция для отображения пересечения фиксации в течение 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](https://i.stack.imgur.com/zGpwd.png)
Как видите, время для итераций очень хорошее, но иногда (?!) Время для первого выполнения довольно далеко.
Что может быть причиной этого, казалось бы, случайного эффекта времени?