1. 从“弯的”到“直的”:为什么GNSS定位绕不开线性化?
想象一下,你第一次用手机地图导航,站在一个陌生的十字路口,手机屏幕上那个蓝色的小圆点,就是你的位置。你有没有想过,这个位置是怎么算出来的?手机并没有长眼睛,它只是默默地接收着天上几颗卫星发来的信号。这个计算过程,本质上是在解一个复杂的数学方程。但问题来了,这个方程是“弯的”,也就是非线性的,直接求解就像让你徒手解一个九连环,非常困难。而线性化,就是那个把“九连环”暂时变成“一根直铁丝”的巧妙工具,让我们能用一套成熟、高效的方法,先找到一个近似解。
这背后的核心数学工具,就是泰勒公式。我刚开始接触GNSS算法时,也觉得泰勒展开那一串公式挺唬人的。但后来想明白了,它的思想其实特别“接地气”:用“以直代曲”。就好比你在一段非常非常短的山路上,这段路弯弯曲曲,但你完全可以把它看作是一小段笔直的斜坡。线性化干的就是这个事——在真实解(你的真实位置)附近一个很小的范围内,用一个简单的线性关系(直线)去近似代替原来复杂的非线性关系(曲线)。
在GNSS定位里,这个“弯的”方程就是伪距观测方程。简单说,卫星告诉你:“我发出信号的时间是t1”,你的接收机记录:“我收到信号的时间是t2”。信号是以光速传播的,那么用 (t2 - t1) * 光速 就能算出一个距离,这叫伪距。为什么叫“伪”距?因为它包含了很多误差:你的接收机时钟和卫星时钟不同步、信号穿过大气层会减速等等。最关键的是,这个方程里包含了接收机位置(x, y, z)这个未知数,而且未知数是以平方和开根号的形式出现的(计算两点间的几何距离),这就是非线性的根源。
直接解这个带平方根的非线性方程,数学上很棘手。所以,工程师们的策略是:先猜一个初始位置(比如上次定位的位置,或者直接猜地球中心),然后在这个猜测点附近,用泰勒公式做一阶展开,把方程“掰直”。这样,原本关于位置的非线性方程,就变成了关于位置改正量(猜测位置和真实位置之间的差值)的线性方程。解线性方程可就简单多了,就是大家大学学过的解线性方程组,有成熟且快速的算法(比如最小二乘法)。
但这里有个关键点,也是我早期调试算法时容易迷糊的地方:这个“掰直”操作只在猜测点附近才准确。如果你的初始位置猜得离真实位置十万八千里,那这个线性近似就完全失效了,算出来的改正量毫无意义。这也就引出了GNSS定位里那个核心的迭代过程:我们不是一步到位的。用初始猜测解出一个改正量,把猜测位置更新一下(加上改正量),得到一个新位置。然后把这个新位置当作新的“猜测点”,再进行一次线性化和求解。如此反复,直到两次迭代之间的位置改正量变得非常小,小到可以忽略不计。这时候,我们就认为找到了真实位置的足够好的近似。
这个过程,本质上就是在不断地“拉直”更小范围内的曲线,每一次迭代都让我们离真实解更近一步,同时,当初线性化时被我们忽略掉的那些高阶误差项(泰勒展开中二次方、三次方以上的项)也就变得越来越不重要,最终被成功“消除”。这就是线性化结合迭代,驱动高精度导航的核心逻辑。它把一个大难题,拆解成了一个个可以高效解决的小步骤。
2. 泰勒公式:那个被我们“断章取义”的神奇工具
提到泰勒公式,很多人会想起高等数学里那一长串令人头疼的求和式子。但在工程领域,尤其是在我们做GNSS算法实现的工程师眼里,大多数时候我们都在“断章取义”——只取它的第一项。这不是偷懒,而是基于工程现实的精明选择。
泰勒公式的本质,是用多项式来逼近任意一个光滑函数。多项式好啊,加减乘除就能搞定,简单明了。完整的泰勒展开式带着一阶项、二阶项、三阶项……还有一个余项,理论上项数越多,逼近得越精确。但在GNSS定位的线性化场景里,我们几乎总是毫不犹豫地只取到一阶项,后面所有高阶项连同余项,统统当作“误差”先扔掉。
为什么敢这么做?这需要理解两个关键点:“操作点”和“微小变化”。我们并不是在任意位置进行线性化,而是在一个选定的操作点(也就是我们猜测的接收机初始位置)附近进行。线性化所求的,不是位置本身,而是真实位置与这个猜测位置之间的


95

被折叠的 条评论
为什么被折叠?



