概述
本文转自传感器的温度修正方法
传感器的温度修正是使用传感器时常遇到的问题,尤其是需要传感器工作在一个较宽的温度范围时,这个问题更加突出。这里描述的方法不一定是最好的,但是它比较简单,适用范围也比较广。
首先,不考虑温度的影响,在某一固定的温度下,设传感器的输入输出值可以用多项式函数表示:
y = ∑ i = 0 N a i x i = a 0 + a 1 x + a 2 x 2 + ⋯ + a N x N y=sum_{i=0}^{N} a_{i} x^{i}=a_{0}+a_{1} x+a_{2} x^{2}+cdots+a_{N} x^{N} y=i=0∑Naixi=a0+a1x+a2x2+⋯+aNxN
这里 x x x是传感器的输出, y y y是传感器所测量的物理量的真实值。实际上,只要传感器的响应可以表示为单调连续函数,就可以利用多项式函数来逼近到任意精度,因此,一般情况下上面的式子是可以成立的。 a i a_i ai可以根据实验数据利用最小二乘拟合( L M S LMS LMS)的方法计算出来。实际应用中,N的取值不宜过大,一般取为4以下就足够了,而数据点则是越多越好。
然后考虑温度的影响,不同温度下,上面公式中 a i a_i ai的会发生变化。也就是说 a i a_i ai是温度 t t t的函数。类似的,这两者之间的关系也可以用多项式函数来逼近:
a i ( t ) = ∑ j = 0 M b j i t j = b 0 i + b 1 i t + b 2 i t 2 + ⋯ + b M i t M a_{i}(t)=sum_{j=0}^{M} b_{j i} t^{j}=b_{0 i}+b_{1 i} t+b_{2 i} t^{2}+cdots+b_{M i} t^{M} ai(t)=j=0∑Mbjitj=b0i+b1it+b2it2+⋯+bMitM
通过之前博文介绍过的最小二乘法的一般计算步骤,通过构建齐次线性方程组,我们可以求出最优的 b j i b_{ji} bji。(求 i i i次最小二乘解)
接下来便可以进行温度修正工作了,将上述公式表示为矩阵形式则有:
T = ( 1 t ⋯ t M ) mathbf{T}=left( begin{array}{llll}{1} & {t} & {cdots} & {t^{M}}end{array}right) T=(1t⋯tM)
B = ( b 00 b 01 ⋯ b 0 N b 10 b 11 ⋯ b 1 N ⋮ ⋮ ⋱ ⋮ b M 0 b M 1 ⋯ b M N ) mathbf{B}=left( begin{array}{cccc}{b_{00}} & {b_{01}} & {cdots} & {b_{0 N}} \ {b_{10}} & {b_{11}} & {cdots} & {b_{1 N}} \ {vdots} & {vdots} & {ddots} & {vdots} \ {b_{M 0}} & {b_{M 1}} & {cdots} & {b_{M N}}end{array}right) B=⎝⎜⎜⎜⎛b00b10⋮bM0b01b11⋮bM1⋯⋯⋱⋯b0Nb1N⋮bMN⎠⎟⎟⎟⎞
A = ( 1 t ⋯ t M ) ⋅ ( b 00 b 01 ⋯ b 0 N b 10 b 11 ⋯ b 1 N ⋮ ⋮ ⋱ ⋮ b M 0 b M 1 ⋯ b M N ) = T ⋅ B mathbf{A}=left( begin{array}{cccc}{1} & {t} & {cdots} & {t^{M}}end{array}right) cdot left( begin{array}{cccc}{b_{00}} & {b_{01}} & {cdots} & {b_{0 N}} \ {b_{10}} & {b_{11}} & {cdots} & {b_{1 N}} \ {vdots} & {vdots} & {ddots} & {vdots} \ {b_{M 0}} & {b_{M 1}} & {cdots} & {b_{M N}}end{array}right)=mathbf{T} cdot mathbf{B} A=(1t⋯tM)⋅⎝⎜⎜⎜⎛b00b10⋮bM0b01b11⋮bM1⋯⋯⋱⋯b0Nb1N⋮bMN⎠⎟⎟⎟⎞=T⋅B
y = T ⋅ B ⋅ X y=mathbf{T} cdot mathbf{B} cdot mathbf{X} y=T⋅B⋅X
写为矩阵形式后的表达式非常的简洁,同时也易于在程序中实现。下面再多说一句,多项式函数可以通过一个小小的变形来减少乘法的次数。
y = ∑ i = 0 N a i x i = a 0 + a 1 x + a 2 x 2 + ⋯ + a N x N = a 0 + x ( a 1 + x ( a 2 + x ( a 3 + ⋯   ) ) ) begin{aligned} y &=sum_{i=0}^{N} a_{i} x^{i}=a_{0}+a_{1} x+a_{2} x^{2}+cdots+a_{N} x^{N} \ &=a_{0}+xleft(a_{1}+xleft(a_{2}+xleft(a_{3}+cdotsright)right)right) end{aligned} y=i=0∑Naixi=a0+a1x+a2x2+⋯+aNxN=a0+x(a1+x(a2+x(a3+⋯)))
这种方法称之为多项式的 H o r n e r Horner Horner算法。
总结,本文描述的方法比较简单、粗暴,之所以这么说是因为它不去探究温度漂移的物理本质,只是用简单的多项式函数来补偿温漂的结果。但正是因为它不依赖于某个具体的物理模型,可应用的范围才会很广。
最后
以上就是有魅力金针菇为你收集整理的传感器的温度漂移修正算法的全部内容,希望文章能够帮你解决传感器的温度漂移修正算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复