gpt4 book ai didi

matlab - 解释 PsychToolBox 教程中的一行代码

转载 作者:行者123 更新时间:2023-12-02 17:26:59 30 4
gpt4 key购买 nike

我正在学习 PsychToolBox 并引用本教程。 http://peterscarfe.com/movingdotgriddemo.html

有这一行:

vbl  = Screen('Flip', window, vbl + (waitframes - 0.5) * ifi); 

我想不通。有人可以向我解释一下吗?特别是 vbl + (waitframes - 0.5) * ifi) 部分。谢谢!

最佳答案

Alex 所说的一切都是正确的;我只是为 -0.5 添加一个解释(我没有足够的声誉来评论他的回答)

回顾一下:在每个循环/帧中,您翻转屏幕缓冲区并在 vbl 变量中获取翻转时间。在下一个循环中,您根据上一个翻转计时下一个翻转,即 vbl + [some number of seconds]。因此,您的代码行既使用了函数调用中 vbl 的先前值,又将其设置为函数返回的新值。 vbl 会滚​​动更新。 vbl 是“垂直消隐”时间,这是对显示器实际刷新时间的非常准确的估计*,因此将帧与此对齐是个好主意。

问题是距离上一个 vbl 多远才能进行下一个翻转。正如 Alex 所说,ifi 是刷新之间的时间,或 1/[以赫兹为单位的显示器刷新率]。让我们暂时忽略 waitframes 并假设您想要在每次监视器刷新时打开,即 waitframes = 1

然后你的代码行简化为

vbl  = Screen('Flip', window, vbl + ifi/2);

所以我们要求在下次刷新之前翻转半个 ifi。 为什么不要求在下一次刷新时翻转,即 vbl + ifi因为该总和是浮点计算,可能包含小的舍入误差。 Screen('Flip') 只能在下一次监视器刷新时交换屏幕缓冲区,那么如果总和中的错误略微过冲会怎样?然后你只是要求翻转时间略微超出你实际想要的显示器刷新,而 PTB 必须等待几乎整个 ifi 才能真正翻转**。

因此我们要求在所需的监视器刷新之前有一定的翻转时间(小于 ifi)- ifi/2 是合理的。我们实际上是在说“在 vbl+ifi/2 之后尽快进行下一次翻转”,同时知道 Screen('Flip') 实际上不能在之前进行刷新,并且安全地知道我们有 ifi/2 余地来吸收时序计算中的小错误。

waitframes 的算法留给读者作为练习。

*假设 PTB 已正确设置以与您的硬件配合良好 - 请注意这些警告消息!

**更糟糕的是,这可能不会出现在 PTB 的错误中,例如丢失的帧数,因为 PTB 已经实现了您的要求:从您指定的时间开始在下一次监视器刷新时翻转缓冲区。在那种情况下,如果您在运行时碰巧发现了它,您就会知道您的实验滞后并且出现了不合时宜的刺激的唯一方法!

关于matlab - 解释 PsychToolBox 教程中的一行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38014908/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com