ptb是以“双缓冲模型”来实现刺激的描述,衔接与呈现的:前景中呈现当前刺激,同时在后景中绘制新的刺激,然后通过“Flip”命令将新刺激翻转到前景中,同时清空后景以备之后的新绘制。如此循环,便实现了刺激的呈现。
对于新刺激呈现时机的控制,是这样子实现的
假定计算机的刷新率是60hz,也就是说每秒会刷新60次,那么每两帧之间的间隔则为1/60=16.67ms。也就是说刷屏周期为16.67ms。

在matlab中通过 ifi = Screen('GetFlipInterval', win);语句获取刷屏周期。
在执行“Flip”命令时,用vbl = Screen('Flip', win);获取此时“Flip”动作完成的时间点,并赋值给VBL
当绘制好新的刺激并执行翻转命令时,(假定在刺激呈现后的1s内呈现另一个新的刺激),
Screen('Flip', win, vbl + (1 / ifi - 0.5) * ifi); 这表示在vbl后的(1 / ifi - 0.5) * ifi时翻转,1 / ifi表示第 "1 / ifi + 1" 帧之后执行翻转动作。
减 0.5 是因为执行程序需要时间,写成 " 1/ifi +1 "的话,程序有可能稍微滞后一些,这样就错过了那一帧的翻转,就变成了更之后的一帧进行翻转,这会带来误差。
为了避免这样的误差,如果需要在哪一帧翻转,就提前半帧执行动作,这样就可以保证它一定会在那一帧进行翻转。这半帧可以理解为缓冲期
但是程序内部,它不是按照帧来完成动作的,它仍然是按照计时的。所以需要将帧转换成为时间。
也可以表示为vbl+1-0.5*ifi,与上述同理。这里的“1”表示在vbl的1s执行命令,而0.5*ifi表示缓冲期。如果是在vbl后的5s执行翻转,那么改为vbl+5-0.5*ifi即可
参考链接:https://www.jianshu.com/p/b8987f91486e https://www.jianshu.com/p/7e961d6c5813
浙公网安备 33010602011771号