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

Mik*_*owe 7 c++ embedded battery

读取嵌入式设备中的电池电压.但是,实际电压根据系统负载而变化很大.我们需要一种降低电压波动的方法来显示最佳值.

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

在阅读平滑算法时,似乎b样条,内核滤波器或其他一些平滑算法是理想的.但是,我找不到一个简单的例子,它不使用mathcad中的numpy或内部函数或类似的东西.

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

TIA迈克

pot*_*toe 7

嗯,如果没有具体的情况,就很难说清楚你需要什么.例如,您的传感器采样率是多少,以及您尝试去除的传感器波动和噪声如何表征?

但是,如果您已经实施了移动平均线,我可能会建议尝试移动中位数.(最后n个样本的中位数,而不是平均值.)这样可以减少输出中正常情况下大的短期畸变的影响.

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

Y = Y[n-1] + A * (X - Y[n-1])
Run Code Online (Sandbox Code Playgroud)

(Y当前输出在哪里,Y[n-1]是最后计算的输出,X是您最新的传感器读数.)

A实际上是低通滤波器的时间常数,但它是离散时间,所以它取决于采样率.具体而言,A = dt / tau其中dt以秒为单位的采样周期,并且tau是大致analagous到连续时间的时间常数.