C++ 计算一段时间内的平均数据包丢失

C++ 计算一段时间内的平均数据包丢失,c++,math,average,C++,Math,Average,因此,我想计算我的应用程序中随时间推移的平均数据包丢失(以数据包数为单位)(例如,在过去5秒钟内) 我有检测数据包丢失的代码,它执行以下行: playerRef->AveragePacketLossOverFiveSeconds += packetDiff; // Adds the number of packets lost to the average (a double) 以下是我目前如何随时间衰减它: double ratio = 0.0002f * m_totalTimeSp

因此,我想计算我的应用程序中随时间推移的平均数据包丢失(以数据包数为单位)(例如,在过去5秒钟内)

我有检测数据包丢失的代码,它执行以下行:

playerRef->AveragePacketLossOverFiveSeconds += packetDiff; // Adds the number of packets lost to the average (a double)
以下是我目前如何随时间衰减它:

 double ratio = 0.0002f * m_totalTimeSpentLastTick; // because I want it to be an average over the last 5 seconds 
 playerToUpdate->AveragePacketLossOverFiveSeconds -= playerToUpdate->AveragePacketLossOverFiveSeconds * ratio;     
我知道代码不完全正确。测试时,它给出了相对较好的值,但高于实际值(因为它不会随时间适当衰减)

我的问题是:有没有办法修复这个代码,这样我就不需要使用列表和其他更复杂的东西?例如,我知道我可以创建数据包丢失对象,给它们加上时间戳,将它们放入一个列表中,然后通过删除那些超过5秒的对象,然后对剩余的对象求平均值来衰减列表,但我认为有一种更简单的方法


非常感谢您的时间

你不能在内存中保留所有丢包信息+时间的fifo吗?然后,当新信息已知时,从fifo中删除任何最早超过5秒的值。你可以减少总数,因为你完全知道你想要忽略的值…因为你只想跟踪最后5秒,你必须记住从平均值中减去哪些值,所以如果你想要更准确的平均值,就需要一个滑动窗口。也许高通滤波器可能符合您的要求(窗口大小=1)。