传感器的温度修正算法
来源:互联网 发布:java代理模式怎么回事 编辑:程序博客网 时间:2024/04/28 16:40
传感器的温度修正是使用传感器时常遇到的问题,尤其是需要传感器工作在一个较宽的温度范围时,这个问题更加突出。这里描述的方法是我在使用某型压力传感器时厂家提供的,这种方法不一定是最好的,但是它比较简单,适用范围也比较广。我在几种不同类型的传感器上应用了这个方法,效果还不错。因此,写这篇小文与大家交流。
首先,不考虑温度的影响,在某一固定的温度下,设传感器的输入输出值可以用多项式函数表示:
这里x 是传感器的输出(比如电压值或直接就是数字量),y 是传感器所测量的物理量的真实值。实际上,只要传感器的响应可以表示为单调连续函数,就可以利用多项式函数来逼近到任意精度,因此,一般情况下上面的式子是可以成立的。ai可以根据实验数据利用最小二乘拟合(LMS)的方法计算出来,唯一需要注意的是对于N次多项式,至少需要N+1个数据点才可以计算出。实际应用中,N的取值不宜过大,一般取为4以下就足够了,而数据点则是多多益善。
上面的式子可以写成矩阵的形式:
然后考虑温度的影响,不同温度下,上面公式中ai的 会发生变化。也就是说ai是温度t 的函数。类似的,也可以用多项式函数来逼近:
最终输出则可以表示为:
只要将这里的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的转置。其他的方法还有奇异值分解一类的数值算法。想详细研究这个问题的话可以参考各种版本的数值分析课本。
总结,本文描述的方法比较简单、粗暴,之所以这么说是因为它不去探究温度漂移的物理本质,只是用简单的多项式函数来补偿温漂的结果。但就是因为它不依赖于某个具体的物理模型,可应用的范围才会很广。
- 传感器的温度修正算法
- 三轴正交型传感器的正交性修正算法
- 基于 Arduino 的温度+湿度传感器
- 温度、湿度传感器dht11
- 修正的KMP算法
- 获取传感器温度-cpu 温度篇
- 获取传感器温度-硬盘温度篇
- Arduino的传感器使用教程1:PM2.5、温度和大气压传感器
- 简单介绍一下用加速度传感器修正角速度传感器(陀螺仪)累计误差的原理
- Android 中支持的几种传感器(加速度、陀螺仪、亮度、地磁、方向、压力、近程、温度)
- 树莓派通过DHT11温湿度传感器获得当前的温度和湿度
- 【Arduino】使用LM35传感器实时测量温度
- 一元四次方程的简单修正算法
- Tangent算法的缺陷及修正办法
- 修正的LARS算法和lasso
- 基于黄金分割的修正Powell算法
- 算法提高 温度转换
- 温度控制的PID算法的C语言程序
- SQL判断某列中是否包含中文字符或者英文字符
- Hashmap遍历的两种方式
- 树状数组
- cocos2d引擎V2.0
- UVaOJ 10004 - Bicoloring
- 传感器的温度修正算法
- 第八天——无线网络覆盖
- 日报_2012_07_07
- Aptana Studio 3下安装NodeJS调试插件
- DLL与LIB的区别和用法
- ASP.NET MVC3 入门指南之数据验证
- 并查集
- .NET中的字典(Hashtable)
- .NET中的字典(Hashtable)续集