用于校准和归一化来自多个温度传感器的读数的算法

时间:2018-06-19 20:08:31

标签: c++ statistics normalization

我正在构建自定义的HVAC控制器。除其他事项外,它将在多个位置安装温度传感器。问题在于,在任何给定的瞬间,传感器对当前的空气温度都有不同的看法。

例如,现在,我得到以下读数(所有传感器都在同一位置):

  • 75.4F(SHT11)
  • 77.0F(HTU21d)
  • 77.7F(BME280)
  • 76.1F(DS18B20)
  • 76.1F(DS18B20)
  • 76.5F(DS18B20)
  • 75.7F(DS18B20)

一旦我在各个位置(例如,在冰箱内,冰箱内,在空调房的桌子上以及在阴凉的室外)用这些传感器收集了几套同时读数,以了解如何在测量(或多或少)相同的周围空气温度时,他们的个人意见有所不同,我需要以某种方式提出一种算法,以将他们的个人读数标准化为某个合理一致的共识温度。

在这种情况下,“实际”温度是“所有共识温度似乎在所有传感器中具有最佳线性一致性的温度”。

现在,有个大问题……我该怎么做?

我将使用C ++实现此功能(在Arduino上,但这时纯粹是“ C ++和算法”问题,而不是硬件问题)。

2 个答案:

答案 0 :(得分:1)

原谅我吹牛角。我在论文Array.prototype.forEach()中研究了这个问题和相关问题。参见第6章,尤其是第6.5节。

我考虑了以下模型:传感器状态(一种或多种方式的工作或故障)是变量,除了要测量的未知实际变量和已知测量值之外。通过推理传感器状态,您可以得到一些有趣的现象,如Sec中所述。 6.5,例如传感器同意,一个传感器显然发生故障,传感器互相投票,而所有人都不同意。

本文不包含Sec中传感器模型的公式。 6.5,但如果有兴趣,我想可以为您生成它们。或者,当然,您也可以派生它们。

答案 1 :(得分:0)

有几种方法可以找到“共识”

最简单的2:

  1. 简单的平均值(汇总所有温度,然后除以传感器数量)[如果异常值较大,则会增加]
  2. 中位数(先排序然后取中间的值)

有关更多信息,请查看https://en.wikipedia.org/wiki/Median#Other_median-related_concepts

对于您所说的“最佳线性一致” =>这只是简单的平均值。但我建议使用中位数-根据我的经验,这通常是更好的选择,因为它对异常值更具弹性。