线性滤波与预测问题的新方法
在噪声中追踪真相:把每一次预测,与下一个并不完美的测量,融合起来。
你的手机知道你在哪儿,靠的既不是全然相信地图,也不是全然相信 GPS——它把「你应该在哪儿」的预测,与每一次「你看起来在哪儿」的带噪读数,融合在一起。
核心想法
假设你想知道某个一直在变的量——一架飞机在哪儿、一枚火箭爬升得多快——可你拿到的每一个测量,都被噪声弄花了。你可以干脆相信最新那个读数,但它在抖;你也可以不理读数、只信「事情应该如何」的预测,但预测会漂。卡尔曼滤波两样都不选,又两样都要:每一刻,它先做一个预测,再取一个测量,最后落在两者的加权融合上。
巧妙的正是这个权重。传感器可靠,就多靠测量;测量很吵,就多靠预测——而该如何拿捏,滤波器会依据「自己当前有多不确定」自动算出来。然后它更新这份不确定,再向前滚动一步。就这么一小段循环,反复地跑,便把一串糟糕的测量,化作一个稳稳变好的估计。
它是如何诞生的
到 1950 年代,把噪声从信号里滤掉的数学,其实已经有了:诺伯特·维纳与安德雷·柯尔莫哥洛夫在战时为高射炮瞄准而建起了它(wiener-1948)。但他们的方法,要求信号的统计性质永不改变、要用上数据的全部历史、还要解一道棘手的积分;它很美,却对一架运动每秒都在变的飞行器几乎无从下手。
鲁道夫·卡尔曼,一位生于匈牙利、在巴尔的摩一家小研究所工作的工程师,把问题重新框定。他不再在「跨越全部时间的频率」里打转,而是用系统的状态——位置、速度,凡是要紧的量——来描述它,让它一步步向前行进。滤波于是变成了一段计算机能实时跑起来的简单递推。控制论的主流起初将信将疑,论文几乎被拒;然后,1960 年,卡尔曼把它讲给了 NASA 艾姆斯的斯坦利·施密特听,后者一眼就看出:它能把阿波罗导航到月球——这套方法的前途,就此定下。
它为何重要
它把「最优估计」变成了你真能算出来的东西——在当年并不强大的机器上,为那些会动、会变的系统而算。正因如此,它才从期刊里挣脱出来,去到一切「实时决策要骑在噪声数据上」的地方:航天器、飞机、轮船,乃至最终你口袋里的 GPS 芯片与运动传感器。很少有方程,做过这么多默默无闻的活儿。
一个可以想象的画面
想象你在浓雾里开车,速度表还不太靠谱。你心里一直存着一个关于「我在哪儿、开多快」的持续感觉,并据此预测一秒后会到哪儿。每隔一会儿,一块路牌从雾里冒出来——那是一次带噪的测量。你不全信路牌,也不全信自己的猜测;你取个折中,朝当前更信得过的那一边靠一点,然后带着更清晰的位置感继续开。这个一边走、一边自我修正的融合,就是卡尔曼滤波。
它的位置
卡尔曼滤波,是维纳战时滤波(wiener-1948)的递归继承者,也与贝叶斯(bayes-1763)同气连枝——每一次测量都在更新一个信念——只是被改写成了面向运动目标、面向实时计算机的样子。往下游走,它是现代导航的引擎,也是今天概率时间序列模型与机器人传感器融合的一块基石。当一辆自动驾驶汽车,把许多噪声信号融成对世界的一个估计时,它脚下踩着的,正是这条 1960 年的循环。