gpt4 book ai didi

具有可变输入时间的平滑数字的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:06 26 4
gpt4 key购买 nike

我有一个应用程序,它以每 .25 到 2 秒的可变速率接受整数。

我想根据用户输入以平滑格式输出数据 3、5 或 7 秒。

如果数据始终以相同的速率传入,比方说每 0.25 秒一次,那么这就很容易了。可变利率让我感到困惑。

数据可能是这样进来的:
时间 - 数据
0.25 - 100
0.50 - 102
1.00 - 110
1.25 - 108
2.25 - 107
2.50 - 102
等...

我想在我的显示器上每 0.25 秒显示 3 秒的滚动平均值。

执行此操作的最简单形式是将每个项目放入一个带有时间戳的数组中。

array.push([0.25, 100])  
array.push([0.50, 102])
array.push([1.00, 110])
array.push([1.25, 108])

等...

然后每隔 0.25 秒我会从后往前读取数组,直到我得到的时间小于 now() - rollingAverageTime。我会总结并显示它。然后我会 .Shift() 数组的开头。

虽然这似乎不是很有效。我想知道是否有人有更好的方法来做到这一点。

最佳答案

为什么不保存起始值的时间戳,然后累加值和样本数,直到得到时间戳为 >= startingTime + rollingAverageTime 然后将累加器除以采集的样本数量?

编辑:如果你想保留样本数量,你可以这样做:

取累加器,对每个输入值求和,并将值和时间戳存储在移位寄存器中;在每个周期,您必须将最新样本的时间戳与移位寄存器中最旧的时间戳加上平滑时间进行比较;如果等于或大于,则从累加器中减去最早保存的值,从移位寄存器中删除该条目并输出累加器,除以平滑时间。如果您进行迭代,您将获得一个滚动平均值(我认为)每个周期的计算量最少:

  • 总和(增加累加器)
  • 加法和减法(比较时间戳)
  • 减法(从累加器)
  • 除法(计算平均值,用聪明的方法可以右移)

对于总共约4个代数和和一个除法(或移位)

编辑:

为了考虑到最后一个样本的时间作为加权因子,您可以除以该时间与平均时间之间的比率值,并获得已经加权的平均值,而无需除以累加器。

我添加这部分是因为它不会增加计算量,因此如果您愿意,可以很容易地实现。

关于具有可变输入时间的平滑数字的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8866176/

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