gpt4 book ai didi

c++ - 如何平滑数字数据的变化率?

转载 作者:行者123 更新时间:2023-11-30 03:14:48 29 4
gpt4 key购买 nike

我是一名大学生,我是新来的。我的作业一直有问题,我必须计算汽车的速度。我已经完成了正确的算法(使用 1/60 秒计时器)和公式,只是我在显示速度数字时遇到问题。输出数据在1秒内变化非常快(是的,它会在1s内变化非常频繁,因为我使用了1/60s定时器)。有什么方法可以平滑该输出中的变化率吗?

我试着四舍五入这个数字,但变化的速度仍然很快。

    //For example Car1 object is moving along the x axis
//My method to calculate the speed with a 1/60s timer
//every 1/60s timeout:

if(distanceToggler == true ){
vDistance[0] = car->getCarPos().x();
}
else {
vDistance[1] = car->getCarPos().x();
}
//if Ture assign to vDistance[0] else assign to vDistance[1]

distanceToggler = !distanceToggler;

if ( (vDistance[1] - vDistance[0]) >= 0 ){
defaultSetting.editCurrentCarSpeed( (vDistance[1]-vDistance[0]) / (0.6f) );
}
currentCarSpeed = (vDistance[0]-vDistance[1]) / (0.6f);

最佳答案

平滑频繁出现的噪声值的一种简单方法是保持一种运行平均值,并且仅根据每个新值的百分比对其进行调整:

const float smooth_factor = 0.05f;

// Assume the first sample is correct (alternatively you could initialize to 0)
float smooth_v;
std::cin >> smooth_v;

// Read samples and output filtered samples
for(float v; std::cin >> v; )
{
smooth_v = (1.0f - smooth_factor) * smooth_v + smooth_factor * v;
std::cout << smooth_v << std::endl;
}

smooth_factor 越小,“平滑”值响应新数据的变化就越慢。您可以将此值调整为适合您的应用程序的值。

这是采用未加权窗口平均值的快速替代方法(尽管可以在恒定时间内计算此类平均值),尽管它略有不同,因为每个历史值都有一些影响(随时间减少)。

关于c++ - 如何平滑数字数据的变化率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57504725/

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