补偿滞后的正反馈

时间:2016-06-10 17:51:20

标签: optimization controller automation

我正在努力使程序尽可能准确地运行,同时保持固定的帧速率。你是怎么做到的?

正式地,我在b中有一些参数[0,1],我可以设置它来确定我的计算的准确程度(其中0表示最不准确,0.5表示相当准确,1表示非常准确)。这个越高,我将获得更低的帧速率。

然而,存在“滞后”,在更改此参数后,帧速率在d毫秒之后才会更改,其中d可能会发生变化且未知。

有没有办法以防止“摆动”的方式更改此参数?问题是,如果我遇到低帧速率,如果我增加参数然后再次测量,它只会略高,所以我需要增加它,然后帧速率太慢,所以我需要减少参数,我得到这种振荡行为。有办法防止这种情况吗?我需要尽可能地做出反应,因为改变太慢会导致帧率不正确太长时间。

1 个答案:

答案 0 :(得分:1)

看起来你需要一个自适应反馈阻尼器。尝试电路类比:)

我首先尝试获取有关电路输入信号和响应性如何的更多信息。因此,我首先使算法更新b 而不是所需的值,但先前的值加或减(根据需要朝向所需的值)一个小的固定增量,比如说而是.01(忽略现在的草率响应时间)。在这样做的同时,我会收集并绘制/分析所需的" b值,寻找:

  • 变化的一般形状:平滑或宁静" steppy"或者"尖刻的"? (尖刺需要更强的阻尼来防止振荡,陡峭的需要更弱的阻尼来防止滞后)
  • 从样本到样本的值的最大/典型/最小变化
  • 从样本到样本的值变化的分布(我计划算法对典型范围内的变化做出最佳反应,比如20-80%的范围,并考虑更高的变化或振荡的可接受滞后对于低于该值的值)

最终目标是能够以两种模式获得操作参数:

  • high-speed tracking模式(也是系统的初始模式)
  • normal tracking模式

high-speed tracking模式下,b值更新可以是:

  • 没有减弱 - 更新值是完整的期望值 - 仅当更改形状尖刻且仅在第1个{ {1}}进入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值变化需要多少采样周期才能变得完全有效,并应反映在阻尼系数中:更改生效所需的时间越长,阻尼应该越强,以防止振荡

当然,这只是一般的想法,可能需要进行大量的实验性试验/调整迭代才能达到满意的解决方案。