当需要测量的物理量为矢量时,我们需要使用三个正交放置的传感器来分别测量物理量的各个分量,以此来合成一个完整的矢量。如果我们对测量精度要求非常高,就不能仅仅只是对单个传感器进行修正,还要考虑三个传感器的敏感轴是否严格的正交。很多时候我们需要仔细的调整三个传感器的正交关系,但是将三个传感器调整到完全正交是很难的,并且许多时候,由于设计等原因,这种机械上的调校是无法进行的。这时,软件修正就成了必不可少的步骤,软件修正大多数时候也比机械上的调校更简单。
这里介绍一种基本的软件修正方法。它对大多数类型的传感器都可以使用。首先,假设单独的每个传感器的测量的值都是准确的,这可以通过预先对每个传感器进行标定来完成。
这里设三个传感器的测量值分别是 x1,x2,x3。这三个值可以合成一个列向量X:
而传感器所在位置的真实物理量可以用矢量Y来表示:
所谓软件修正算法,就是找到从 X到 Y 的映射。由解析几何知识我们知道X到 Y 的映射可以通过一个线性变换C来表示:
写到这里其实方法就很明了了,我们只需要求得这个转换矩阵C就一切都解决了。
转换矩阵C如何求,当然是通过大量的测量数据来拟合。实验数据的获得很重要,最好能有个比较精密的三轴转台,这样转各个角度都比较方便。没有也没关系,但至少要能把装配好的传感器组沿三个已知的方向放置,并且这三个方向要摆放的很精确。通常,我们选的这三个方向是相互正交的,这三个方向上物理量的真实值就是上面式子中的y1、y2、y3,换句话说这三个方向是三个传感器的名义上的取向,虽然这三个传感器可能全都摆歪了。具体如何采集数据就不详细描述了,由于未知参数有9个,至少要采集9组数据才行,条件允许的话当然是数据越多越好。
下面说说如何对采集到的数据进行拟合。通常我们遇到的最小二乘拟合问题的待拟合的函数都可以表示为:
这里x1,…,xN是函数的自变量,c1,…,cM是待拟合的参数。我们可以将自变量和待拟合参数简写为向量,这样表达式能够简化:
所谓最小二乘拟合就是求的使的下面函数g(C)为最小值时C的值,其中Xi 和 yi 为测量值,这里设共有P 组测量值:
这个问题已经有成熟的算法,各种常见的数学软件,比如 Matlab、Mathematica、scilab、Lingo 等都有现成的程序包来完成这个计算。我们现在的问题难点在于 y 也是个向量,这就需要我们对上面的方法进行一点简单的变形。简单的说,我们实际上是有三个待拟合函数的,因此g(C)也要做相应的改变:
经过这样转化后就成了一个普通的最优化问题(函数求极值)了,各种数学软件都可以方便的计算出结果。
这里再多说几句,我个人喜欢使用 gnuplot,gnuplot中有个 fit 命令,也可以完成多元函数拟合。Gnuplot的 fit 命令采用非线性最小二乘 (NLLS) Marquardt-Levenberg算法,拟合能力非常强悍,只要拟合参数的初值给的别太离谱,基本都能够收敛到最优解上。fit命令具体的用法可以参考gnuplot的帮助文件。这里只讲讲如何处理 y是多个值的问题,方法很简单,就是通过多引入一个自变量,将多值函数改造成普通的函数:
改造后的fc(X,i)就成了普通的多元函数了,可以用常规的多元函数拟合方法来处理。
如果将三个传感器单独的校正和正交性校正一起进行,可以这样来:
这里需要注意的是如果a1,a2,a3成为未知数,c11,c22,c33就可以作为已知量了,比如设c11=c22=c33=1,因为这里的六个未知数只有三个是独立的。因此,实际上只增加了三个未知数。
如果将上面的方法和温度修正一起考虑的话可以这样处理:
上面式子中的t是温度,这里的温度修正算法比较简单,主要是为了尽量少引入未知的参数。后面的计算就没什么不同的了。