我正在努力使程序尽可能准确地运行,同时保持固定的帧速率。你是怎么做到的?
正式地,我在b
中有一些参数[0,1]
,我可以设置它来确定我的计算的准确程度(其中0表示最不准确,0.5表示相当准确,1表示非常准确)。这个越高,我将获得更低的帧速率。
然而,存在“滞后”,在更改此参数后,帧速率在d
毫秒之后才会更改,其中d
可能会发生变化且未知。
有没有办法以防止“摆动”的方式更改此参数?问题是,如果我遇到低帧速率,如果我增加参数然后再次测量,它只会略高,所以我需要增加它,然后帧速率太慢,所以我需要减少参数,我得到这种振荡行为。有办法防止这种情况吗?我需要尽可能地做出反应,因为改变太慢会导致帧率不正确太长时间。
答案 0 :(得分:1)
看起来你需要一个自适应反馈阻尼器。尝试电路类比:)
我首先尝试获取有关电路输入信号和响应性如何的更多信息。因此,我首先使算法更新b
而不是所需的值,但先前的值加或减(根据需要朝向所需的值)一个小的固定增量,比如说而是.01
(忽略现在的草率响应时间)。在这样做的同时,我会收集并绘制/分析所需的" b
值,寻找:
最终目标是能够以两种模式获得操作参数:
high-speed tracking
模式(也是系统的初始模式)normal tracking
模式在high-speed tracking
模式下,b
值更新可以是:
b
模式后更新。这有助于减少滞后。high-speed tracking
值更新的影响可能无法完全反映在当前帧速率中这一事实{1}}。阻尼有助于防止振荡,但代价是可能增加滞后(总是相互矛盾的要求)。对于光滑的形状,阻尼系数会更高,对于尖尖的形状,阻尼系数会更小。当b
之前的值与其期望值之间的差值低于某个d
时,可以从high-speed tracking
模式切换到normal tracking
模式(最终维持最少数量的连续样本)。 b
最初将根据上面收集的信息和/或凭经验确定。
在mode change threshold value
模式下,mode change threshold value
之前的值与其期望值之间的差值仍然低于normal tracking
,并且被忽略(无b
更新)或更新是使用所需的值或一些平均值 - 微小的过程校正,保持帧速率几乎恒定,没有阻尼,没有滞后,没有振荡。
当处于mode change threshold value
模式时,b
之前的值与其期望值之间的增量高于normal tracking
系统再次切换到b
模式
我还会尝试大致了解mode change threshold value
响应时间的样子。为此,我将算法更改为仅在每次迭代时使用期望值不更新high-speed tracking
,但每次d
次迭代(甚至可能重试)对于几个b
值)。这应该表明通常n
值变化需要多少采样周期才能变得完全有效,并应反映在阻尼系数中:更改生效所需的时间越长,阻尼应该越强,以防止振荡
当然,这只是一般的想法,可能需要进行大量的实验性试验/调整迭代才能达到满意的解决方案。