该程序从一个以伏特为单位测量电压的传感器接收数据。
整数值以伏特为单位。那些。如果我们将 1.9v 应用到输入,我们在输出上得到值 1。如果我们将 2v 应用到输入,那么我们已经得到了 2。
传感器有自己的噪声(+/- 0.1 伏),它加起来就是测量值。
这会给接近整数值的输入电压带来问题。例如,如果输入电压为 2v,那么实际上将测量 1.9..2.1 的电压(添加噪声),读数将在 1 和 2 之间跳跃。(尽管预期为常数 2)。
图中,当输入信号远离整数值的边界时,蓝线是一个选项,并且噪声(线的粗糙度)不会改变结果。当输入信号在边界时,红线是一个选项。
最终用户需要显示一个不变的、不变的值。
做了什么:
- 多次测量的平均值没有帮助,因为 平均值也在一个方向或另一个方向上跳舞
- 仅当输入变化超过 1 时才更改最终读数,这会有所帮助,然后会丢失准确性并添加“反冲”
还有哪些其他解决方案,将模拟值转换为数字值的类似问题通常称为(谷歌)。
(数字简化,实际略有不同,本质不变)
恐怕您对此无能为力,如果您的舍入精度为 1,那么很明显,当您在精度边界处跳转时,结果也会跳转......的确,即使事实上传感器以整数计数,您可以以小数形式输出平均值,则不会有大的跳跃。
终于这样做了。
进行一定数量的测量,我们得到总值(小数)。这可以让您在一定程度上消除噪音,但现在简单地对结果进行四舍五入还为时过早,因为。在整数的边界上,最终值仍然会跳跃。
此外,根据先前的最终读数,将 0.2 的偏移量添加到获得的平均值(小数)上。之后,金额四舍五入并发给最终用户。
因此,为了“切换”到下一个整数值,输入信号必须至少改变 0.2v,这比噪声要大。
谷歌搜索“滞后”。因此,熨斗上的恒温器大约可以工作(它不会一直发出咔哒声,而是仅在温度变化很大时才会切换)。
为什么不圆整?例如,对于从零到一的范围,高于 0.707 的所有值都舍入为 1,而低于 0.707 的所有值都舍入为零。你有一个更大的范围,数字会略有不同,但没关系。