本文转自传感器的温度修正方法
传感器的温度修正是使用传感器时常遇到的问题,尤其是需要传感器工作在一个较宽的温度范围时,这个问题更加突出。这里描述的方法不一定是最好的,但是它比较简单,适用范围也比较广。
首先,不考虑温度的影响,在某一固定的温度下,设传感器的输入输出值可以用多项式函数表示:
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}+x\left(a_{1}+x\left(a_{2}+x\left(a_{3}+\cdots\right)\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算法。
总结,本文描述的方法比较简单、粗暴,之所以这么说是因为它不去探究温度漂移的物理本质,只是用简单的多项式函数来补偿温漂的结果。但正是因为它不依赖于某个具体的物理模型,可应用的范围才会很广。