传感器的温度修正算法

来源:互联网 发布:java代理模式怎么回事 编辑:程序博客网 时间:2024/04/28 16:40

 传感器的温度修正是使用传感器时常遇到的问题,尤其是需要传感器工作在一个较宽的温度范围时,这个问题更加突出。这里描述的方法是我在使用某型压力传感器时厂家提供的,这种方法不一定是最好的,但是它比较简单,适用范围也比较广。我在几种不同类型的传感器上应用了这个方法,效果还不错。因此,写这篇小文与大家交流。


首先,不考虑温度的影响,在某一固定的温度下,设传感器的输入输出值可以用多项式函数表示:

这里是传感器的输出(比如电压值或直接就是数字量),是传感器所测量的物理量的真实值。实际上,只要传感器的响应可以表示为单调连续函数,就可以利用多项式函数来逼近到任意精度,因此,一般情况下上面的式子是可以成立的。ai可以根据实验数据利用最小二乘拟合(LMS)的方法计算出来,唯一需要注意的是对于N次多项式,至少需要N+1个数据点才可以计算出。实际应用中,N的取值不宜过大,一般取为4以下就足够了,而数据点则是多多益善。

上面的式子可以写成矩阵的形式:

 

 

然后考虑温度的影响,不同温度下,上面公式中ai的 会发生变化。也就是说ai是温度的函数。类似的,也可以用多项式函数来逼近:

最终输出则可以表示为:

只要将这里的bij 确定下来就可以完成温度修正工作了,同样,上面的公式也可以表示为矩阵形式。

写为矩阵形式后的表达式非常的简洁,同时也易于在程序中实现。下面再多说一句,多项式函数可以通过一个小小的变型来减少乘法的次数。

这种方法称之为多项式的Horner 算法,也被称为秦九韶算法(虽然知道这个名称的人不多)。

上面的计算都是假设bji已经求出来了,但还都没有说明如何计算bji。下面将讨论这个问题。最直观的方式就是在一系列不同温度下,用最小二乘拟合的方法计算出一系列的多项式系数ai(t)ai(t)M次多项式函数,因此我们至少要计算出M+1个不同温度下的系数,也就是说要至少先进行M+1次多项式拟合。然后根据ai(t)拟合出bji,很显然,这里又需要进行N+1次多项式拟合。前后两次总共要进行至少M+N+2 次的多项式拟合才能求出所有的系数。

另一种方法是直接去求所有的bji。将所有的bji排成一个列向量:

定义一个辅助矩阵:

上述公式中的下标是标注的是第几次的测量值,xp表示第p个测量值。

则传感器的经过温度修正后的测量值为:

而传感器测量量的真实值为:

则我们的目标就是求b使得矢量 y-z 最小,这个最小如果是在2-范数的意义下的最小则是最小二乘拟合。这也就等效于求下列线性代数方程的最小二乘意义下的最优解。

这个方程的解法很多,比如说转换成下面的普通的线性代数方程:

上式中FT是F的转置。其他的方法还有奇异值分解一类的数值算法。想详细研究这个问题的话可以参考各种版本的数值分析课本。

总结,本文描述的方法比较简单、粗暴,之所以这么说是因为它不去探究温度漂移的物理本质,只是用简单的多项式函数来补偿温漂的结果。但就是因为它不依赖于某个具体的物理模型,可应用的范围才会很广。