gpt4 book ai didi

c++ - 用于电池电压显示的平滑功能可减少嵌入式系统中的尖峰

转载 作者:可可西里 更新时间:2023-11-01 18:28:47 27 4
gpt4 key购买 nike

读取嵌入式设备中的电池电压。但是,实际电压会因系统负载而有很大差异。我们需要一种方法来减少电压的波动,以显示最佳值。

目前,我们使用的是滚动/移动平均线。然而,在过去的 15 个读数中,结果仍然波动太大。

在阅读有关平滑算法的文章时,b 样条、核滤波器或其他一些平滑算法似乎是理想的选择。但是,我找不到一个不使用 numpy 或 mathcad 或其他类似函数中的内在函数的简单示例。

有人知道可以帮助解决此问题的易于实现的功能吗?这是一个 C++ 项目(使用 Qt 4.5),只有最少的库。我更愿意留在整数域(以毫伏为单位显示 3300-4200 之间的电压)。

TIA迈克

最佳答案

嗯,如果没有具体情况,很难说出您需要什么。例如,您的传感器采样率是多少,您尝试消除的传感器波动和噪声的特征如何?

但是,如果您已经实现了移动平均线,我可能建议您尝试使用移动中位数。 (最后 n 个样本的中位数,而不是平均值。)这往往会减少输出中与正常值相比较大的短期偏差的影响。

如果您能找到有效的参数,对于 CPU 和内存要求,最好使用某种形式的离散时间低通滤波器。这些很容易实现,只需要知道以前的输出值和当前输入来计算当前输出。例如:

Y = Y[n-1] + A * (X - Y[n-1])

(其中 Y 是当前输出,Y[n-1] 是最后计算的输出,X 是您最新的传感器阅读。)

A 实际上是低通滤波器的时间常数,但它是离散时间,因此取决于采样率。具体来说,A = dt/tau,其中 dt 是以秒为单位的采样周期,tau 大致类似于连续时间常数.

关于c++ - 用于电池电压显示的平滑功能可减少嵌入式系统中的尖峰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5516641/

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