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

目前,我们正在使用滚动/移动平均值。但是,在最近的15个读数中,结果仍然波动太大。

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

有人知道一个简单易用的功能可以帮助解决这个问题吗?这是一个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/

10-11 18:23