读取嵌入式设备中的电池电压。但是,实际电压取决于系统负载而有很大变化。我们需要一种减少电压波动以显示最佳值的方法。
目前,我们正在使用滚动/移动平均值。但是,在最近的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/