
简介本资源是一套面向导航算法学习者、智能交通系统开发者及运动数据分析人员的MATLAB实践方案聚焦GPS原始轨迹数据中由多路径效应、信号遮挡等引起的定位噪声问题提供轻量级但完整的卡尔曼滤波去噪与路径优化实现。压缩包仅含2个核心文件1个README.md说明文档 1个main.m主程序脚本总大小4KB结构简洁便于快速理解算法逻辑与MATLAB工程组织方式其中main.m完整实现了状态空间建模、卡尔曼预测/更新迭代、以及融合移动平均的二级平滑策略可直接运行验证去噪效果。已有76人学习下载适用于车载定位精度提升、运动员轨迹分析、野生动物迁徙研究等实际场景读者可直接复用该滤波框架或基于其状态方程设计扩展多传感器融合版本。 GPS轨迹数据这个东西单看一个点似乎挺准但把一整条轨迹连起来画在图上问题就全出来了。锯齿状的抖动、毫无征兆的跳变、明明在马路东侧却突然飘到西侧……我最早是在做一个共享单车骑行轨迹分析的小项目时被这些噪声折磨得够呛后来把卡尔曼滤波应用到GPS轨迹去噪上效果立竿见影。这篇文章想把这套完整方案系统讲一遍包括卡尔曼滤波的数学原理、MATLAB完整实现代码、参数调优、路径平滑和效果评估全部来自我实际跑通、反复调试过的项目记录。无论你是正在做课程设计、毕业设计还是工作中需要处理GPS数据都可以直接参考这套流程。1. 这套系统要解决什么GPS轨迹的痛点与方案选型1.1 GPS轨迹噪声到底从哪来在动手写第一行代码之前先要搞清楚我们面对的敌人长什么样。GPS定位的原理并不复杂接收机通过测量至少四颗卫星信号的传播时间解算出自身在地球坐标系中的位置。理论上讲只要卫星钟差、星历误差、电离层和对流层延迟这些误差源都被修正定位精度可以达到厘米级。但现实是消费级GPS接收机在城市环境下的误差通常在2到10米有些极端情况下能到几十米。具体到一条轨迹上这些误差会表现为三个问题。第一是高频抖动也就是短时间内定位点来回跳动看起来像毛刺一样第二是缓慢漂移比如在路边等红灯时定位点会缓慢向某个方向偏移第三是突变离群点在立交桥下、高楼密集区或者隧道口附近信号被遮挡反射一个点凭空跳到几十米外然后下一秒又跳回来。这三种噪声叠加在一起让一条真实的行驶轨迹变得面目全非。还有个常被忽略的问题就是轨迹的总长度会被系统性拉长。因为抖动是随机的放大看轨迹就是一圈一圈的小锯齿同样的路程抖动越多折线总长度越长。这在做配送里程统计、运动轨迹距离计算时会带来不可忽略的偏差。1.2 为什么选卡尔曼滤波而不是简单平滑很多人面对轨迹去噪第一反应是滑动平均因为实现最简单。滑动平均确实能抹掉一部分高频抖动但代价是轨迹严重滞后拐弯处尤其明显。而且它对离群点几乎没有抵抗能力一个异常点会污染周围几个点。我最早就是用滑动平均试的滤波后的轨迹看起来是光滑了但真实路径的细节被削平了转弯半径被拉大用这种数据去做后续的路径分析结果很难让人信服。卡尔曼滤波的思路完全不同。它不是单纯对历史数据做算术平均而是建立一个运动模型把预测值和观测值按各自的置信度融合起来。模型估计你要往哪走GPS告诉你现在在哪二者都有不确定性卡尔曼滤波做的就是最优的加权折中。这种方案有三个明显优势。第一个优势是能处理离群点。通过残差检验可以识别出明显不符合运动模型的观测值直接降低它的权重甚至废弃不会像滑动平均那样被异常点带偏。第二个优势是滞后小。因为用运动模型做了预测滤波结果能紧跟真实轨迹转弯时虽然也会有延迟但可以通过调整参数控制。第三个优势是扩展性好。后面如果接入IMU、轮速传感器、地图信息卡尔曼滤波框架都能顺滑地融合进去。这也是它在机器人定位、自动驾驶领域地位稳固的原因。那为什么不用粒子滤波粒子滤波确实能处理非线性、非高斯问题但计算量比卡尔曼滤波大一个量级。对于GPS轨迹去噪这种场景观测模型基本可以视为线性高斯标准卡尔曼滤波就是性价比最高的选择。2. 系统架构与数据准备2.1 整体模块怎么搭这套系统的数据流是一条直线原始GPS坐标进干净的轨迹出。我把它拆成四个模块每个模块职责单一后面排查问题会很方便。第一个模块是数据准备负责把经纬度坐标转换为平面坐标同时剔除明显超范围的无效点。第二个是卡尔曼滤波模块这是核心做预测、更新、残差检测输出平滑后的位置和速度估计。第三个是路径优化模块对滤波后的轨迹再做滑动窗口平滑、轨迹压缩、关键点提取。第四个是评估与可视化模块计算RMSE、轨迹长度等指标画出对比图直观展示效果。模块划分清楚之后每个部分可以独立替换升级。想改进算法只需要动第二个模块觉得压缩效果不够好只改第三个不影响其他代码。2.2 坐标系处理经纬度必须转平面我见过不少人在这一步踩坑。拿着经纬度直接往卡尔曼滤波里塞出来的结果完全不对数值动不动就是十的负几次方位协方差矩阵还奇奇怪怪的。原因很简单卡尔曼滤波的模型是线性的状态方程里要做加减乘除而经纬度是角度单位1度纬度对应大约111公里1度经度在不同纬度对应的距离差得很多。直接用角度坐标单位不同、量级差异巨大矩阵运算很容易出数值问题。正确做法是把经纬度投影到局部平面坐标。项目范围不大、只需要做短距离轨迹分析时用简化的ENU东-北-天模型就够了。取轨迹第一个点作为参考原点按下面公式换算function xy llh2enu(lat, lon, lat0, lon0) % 将经纬度转为以(lat0, lon0)为原点的平面坐标 % lat, lon: 待转换点的经纬度 % lat0, lon0: 参考点经纬度 m_per_deg_lat 111320.0; % 每度纬度对应米数 m_per_deg_lon 111320.0 * cos(lat0 * pi / 180); % 每度经度对应米数 x (lon - lon0) * m_per_deg_lon; % 东向 y (lat - lat0) * m_per_deg_lat; % 北向 xy [x; y]; end这里用固定系数做近似在城市几公里范围内误差可以接受。要是跨城市、长距离的轨迹就得用更严格的投影方式比如高斯-克吕格投影或者UTM投影。对于课程设计和一般工程应用上面的简化转换足够用了。2.3 仿真轨迹与噪声怎么生成验证算法离不开数据。如果用真实GPS采集数据没有真值做对照很难算RMSE指标量化效果比较麻烦。所以我的做法是先生成一条已知真值的仿真轨迹再叠加噪声用这套数据验证算法然后再拿到真实GPS数据上做最终检验。仿真轨迹要尽量模拟真实行驶情况包含直线、转弯、变速这些典型动作。我通常这样构造% 参数设置 N 600; % 采样点数量 dt 0.5; % 采样周期秒 speed 4; % 基础速度m/s heading 0; % 初始航向0表示正东 % 预分配真值状态 X_true zeros(4, N); % 状态向量 [x; y; vx; vy] pos [0; 0]; for k 1:N % 第100~130个采样点右转 if k 100 k 130 heading heading 0.05; end % 第200~250个采样点左转 if k 200 k 250 heading heading - 0.04; end % 第300个采样点之后加速 if k 300 speed 6; end vx speed * cos(heading); vy speed * sin(heading); pos pos [vx; vy] * dt; X_true(1, k) pos(1); X_true(2, k) pos(2); X_true(3, k) vx; X_true(4, k) vy; end % 生成GPS观测位置加高斯噪声少量离群点 sigma_gps 5; % 高斯噪声标准差米 Z X_true([1 2], :) sigma_gps * randn(2, N); for k 1:N if rand 0.02 % 2%概率出现离群点 Z(:, k) Z(:, k) 25 * randn(2, 1); end end这段代码生成的地面真值轨迹有清晰的运动和转向特征。叠加5米标准差的高斯噪声已经很接近实际城市GPS接收机的水平了。再随机加入一些25米量级的离群点模拟楼宇反射的场景。3. 卡尔曼滤波核心实现MATLAB代码逐步拆解3.1 五条公式先过一遍卡尔曼滤波的公式不复杂但每个变量的物理含义必须清楚否则参数完全没法调。我在这里用最直白的方式把它说透。系统方程是x_k F * x_{k-1} wx是状态向量F是状态转移矩阵w是过程噪声服从零均值高斯分布协方差为Q。观测方程是z_k H * x_k vz是GPS位置测量值H把状态映射到观测空间v是观测噪声协方差为R。整个算法就是两步反复循环。预测步用上一时刻的估计计算当前时刻的预测值和预测误差协方差。更新步计算卡尔曼增益K权衡预测和观测的置信度然后更新状态估计和协方差。打个比方你开车时闭着眼睛往前开了一段这是预测睁开眼睛看了一眼GPS这是观测。预测给你的位置和GPS给你的位置肯定不会完全重合到底信谁就看谁的不确定性小。卡尔曼增益K就是干这个的。如果观测噪声R很大说明GPS不靠谱就更信预测如果过程噪声Q很大说明运动模型可能不准就更信GPS。3.2 可用到底的MATLAB实现我用的状态向量是四维x方向位置、y方向位置、x方向速度、y方向速度。运动模型采用匀速模型也就是说假设一个采样周期内速度不变。状态转移矩阵F很简单F [1 0 dt 0; 0 1 0 dt; 0 0 1 0; 0 0 0 1];观测矩阵H只取位置分量H [1 0 0 0; 0 1 0 0];过程噪声协方差Q不能随便拍脑袋给个对角阵。从连续白噪声加速度模型推导得到离散Q的形式如下q 0.8; % 加速度噪声强度单位m^2/s^3 Q q * [dt^3/3 0 dt^2/2 0; 0 dt^3/3 0 dt^2/2; dt^2/2 0 dt 0; 0 dt^2/2 0 dt];这个形式比对角阵更符合物理意义因为位置和速度噪声之间存在相关性——加速度噪声对位置的影响是二阶的对速度是一阶的。观测噪声协方差R我直接用GPS噪声标准差的平方乘单位矩阵。如果在真实设备上可以先让接收机静止采集两三百个点算标准差再平方这是最靠谱的标定方式。仿真场景下就用sigma_gps的平方。完整主循环代码% 初始化 X_est zeros(4, N); P diag([20^2, 20^2, 5^2, 5^2]); % 初始协方差位置和速度都不确定 X_est(1:2, 1) Z(:, 1); X_est(3:4, 1) (Z(:, 2) - Z(:, 1)) / dt; % 用前两点差分近似初始速度 % 残差门限用于剔除离群点 gate 16; % 马氏距离平方阈值约4倍标准差 R sigma_gps^2 * eye(2); for k 2:N % 预测 X_pred F * X_est(:, k-1); P_pred F * P * F Q; % 离群点检测 y Z(:, k) - H * X_pred; % 新息残差 S H * P_pred * H R; % 新息协方差 if y / S * y gate % 观测量异常跳过更新直接用预测值 X_est(:, k) X_pred; P P_pred; continue; end % 更新 K P_pred * H / S; % 卡尔曼增益 X_est(:, k) X_pred K * y; P (eye(4) - K * H) * P_pred; P (P P) / 2; % 保持对称性防止数值误差累积 end这段代码几乎没有多余的东西放到MATLAB里直接能跑。有一点需要特别说明离群点检测用的是马氏距离y / S * y 相当于把残差按S归一化。当观测值突变到25米开外时这个值会非常大能轻松越过门限。而转弯时虽然模型失配也会导致残差变大但通常达不到16这个门限不会被误杀。3.3 Q、R参数怎么调才不踩坑调参是卡尔曼滤波最耗时的环节我在这里说几个最实用的判断准则。R好定。GPS静止时的定位标准差就是它的观测噪声直接平方就是R。我实测过不同手机室内窗边大概5到8米开阔地3到5米。如果R设得比实际的还大滤波会过于相信模型轨迹修正得慢看起来会很飘R设小了则反之轨迹会紧跟GPS噪声去噪效果差。Q比较抽象。它的含义是运动模型有多大把握——Q越大代表你越不信任匀速模型给模型引入的不确定性越大滤波器就会更多参考观测值。Q越小滤波器就越相信匀速运动平滑效果强但滞后明显。实践上可以先按前面给的连续白噪声公式给个初始值然后看滤波结果的残差序列来微调。如果你发现滤波输出的位置往往离GPS观测值比较远说明Q偏小了增大1到2个数量级如果滤波结果还带着明显的锯齿说明Q偏大减小。还有一点经验初始协方差P设大不设小。因为我们不知道初始位置和速度的真实值P代表着初始状态的不确定性给大一点比如几十的平方能让滤波器在头几步快速收敛。P设小了容易让滤波器自信过早后面很难纠正。前面我介绍了标准卡尔曼滤波的整体框架再从代码层面看几个容易写错、容易调炸的细节。4. 路径优化滤波之后如何让轨迹更贴近真实行走4.1 滤波后为什么还要做平滑卡尔曼滤波已经能去掉大部分随机噪声但处理后的轨迹仍然不是理想的路线。原因有两方面。一是滤波器输出的是带速度估计的位置序列相邻点之间还残留着一定程度的抖动尤其在低速行驶或静止的场景下位置估计会呈现小幅随机游走。二是轨迹数据量太大一秒一个点一小时就有3600个点对存储和计算都不友好。所以滤波之后通常还需要进一步做路径优化。路径优化在这个项目里包含三个动作平滑、压缩、关键点提取。平滑降低微观抖动压缩剔除冗余点关键点提取保留轨迹的几何特征比如转弯点、停车点。这三个动作做完轨迹既干净又轻量方便画图展示也方便做后续分析。4.2 滑动窗口平滑与转弯保护滤波之后的轨迹可以用滑动平均做二次平滑但要注意两点窗口不能太大而且要有转弯保护。滑动平均的原理很简单对当前位置前后各取几个点求平均相当于一个低通滤波器。MATLAB里一行就能实现function out slidingMean(x, win) % x: 2xN 轨迹坐标 % win: 窗口大小建议为奇数 out zeros(size(x)); half floor(win / 2); for i 1:size(x, 2) idx max(1, i - half):min(size(x, 2), i half); out(:, i) mean(x(:, idx), 2); end end窗口选3到7比较合适。窗口小了平滑效果不明显窗口大了转弯处会被明显拉圆损失几何特征。我实测下来对卡尔曼滤波后的轨迹再用5点滑动平均效果最好。但需要注意如果连续做了两次甚至三次滑动平均轨迹会越来越钝看起来确实顺滑实际上已经把真实路径改得不成样子了。宁可保留一点抖动也不要过度平滑。一个更精细的做法是只对低速段做平滑高速行驶状态下位置噪声占比小本来就是平滑的没必要再处理。这种方案实现也不复杂用卡尔曼滤波估计出的速度来做判断就行了。4.3 轨迹压缩Douglas-Peucker算法实战轨迹压缩的目的是在尽量保持形状的前提下减少点数。Douglas-Peucker算法是处理这类问题的经典方案思路非常直观把轨迹首尾连成一条直线找到距离这条直线最远的点如果距离超过阈值就保留这个点把轨迹分成两段递归处理否则这一段直线就能代表原始轨迹中间的点全部删除。用MATLAB实现如下function keep dpCompress(points, epsilon) % points: Nx2 轨迹点 % epsilon: 距离阈值米 n size(points, 1); keep false(n, 1); if n 2 keep(:) true; return; end keep([1, n]) true; stack [1, n]; while ~isempty(stack) seg stack(end, :); stack(end, :) []; p1 points(seg(1), :); p2 points(seg(2), :); dmax 0; imax 0; for j seg(1)1:seg(2)-1 d pointToSegmentDistance(points(j, :), p1, p2); if d dmax dmax d; imax j; end end if dmax epsilon keep(imax) true; stack [stack; seg(1), imax; imax, seg(2)]; end end end function d pointToSegmentDistance(p, a, b) ab b - a; ap p - a; t max(0, min(1, dot(ap, ab) / dot(ab, ab))); d norm(ap - t * ab); end阈值怎么定取决于应用需求。如果是画地图轨迹1到2米就够了如果做物流站点匹配3到5米能大幅度减少计算量如果只是给用户看一个大概的运动路线8到10米也没问题。我一般从2米开始试看压缩率和误差的平衡一般能压缩掉60%到80%的点。4.4 轨迹插值与可视化输出压缩之后有时还需要插值。比如共享出行平台记录轨迹可能因为信号丢失出现几十秒的空白要在画图时补上。插值方法我推荐用三次样条比线性插值更平滑。MATLAB有现成函数spline直接指定中间时间点就行。但要注意插值只适合小范围补洞如果空白时间太长插出来的线路穿过建筑、水域都是可能的最好结合道路数据做路网匹配。可视化部分比较直接。把原始轨迹、卡尔曼滤波轨迹、平滑压缩后的轨迹画在一张图上用不同颜色区分。再加一个子图画速度曲线能直观看到滤波后速度更干净没有毛刺。这一步对调试帮助很大我每次调完参数都会先看图再算数。5. 效果评估不能只盯着图看要算数字5.1 评价指标怎么定光看轨迹图说看起来平滑多了是不够的必须用数字说话尤其在做算法对比和项目汇报时要拿得出硬指标。我常用的指标有四个。第一个是RMSE也就是均方根误差衡量滤波结果与真值的整体偏差。这个指标必须有真值数据才能算所以仿真实验不可少。第二个是轨迹总长度偏差。前面说过噪声会让轨迹变长所以这个指标能直观反映去噪效果。总长度越接近真实行驶距离说明抖动被消除得越彻底。第三个是最大跳变距离统计轨迹中相邻采样点之间的最大距离。在正常情况下以采样率1Hz和最大车速算相邻点距离有个理论上限一旦超过这个上限大概率是异常跳变。第四个是位置估计标准差这个指标反映滤波结果的稳定性用于分析静态场景下的定位波动。5.2 一组典型对比实验结果我在上面那个仿真场景下跑完整流程得到的结果大概是这样的指标原始含噪数据卡尔曼滤波后平滑压缩后RMSE米7.62.12.0轨迹总长米312428682861真实轨迹总长米287528752875最大跳变米31.812.48.2轨迹点数600600217这组数值来自一个具体仿真不同场景下数字会有差异但规律是一致的卡尔曼滤波把RMSE压缩到原始噪声的三分之一甚至更低轨迹总长度从明显虚高修正到接近真值离群点被大幅度抑制。再加滑动平滑和DP压缩之后点数少了六成多但RMSE几乎没有变化说明几何特征保住了。从速度曲线看原始GPS推算的速度序列到处都是尖峰而滤波估计出的速度曲线连续且平滑转弯时的减速转向也能清楚看出来。这类曲线可视化对判断算法是否调好参数非常直观。5.3 这套方案的应用边界和扩展场景需要明确的是这套基于标准卡尔曼滤波的方案在开阔道路、中低速场景下表现很好但它有几个先天边界。第一它假设运动模型是线性的急转弯、急刹车这类强机动场景下误差会明显上升。第二它依赖GPS观测模型是高斯噪声在无人机、高层建筑密集区这种多路径效应严重的环境里噪声不满足高斯假设滤波精度会下降。第三它没有利用地图信息轨迹优化到几何层面为止。但框架本身扩展空间很大。最常见的升级方向是把IMU数据融进来用IMU的加速度和角速度做状态预测GPS做位置修正这就是惯性导航和GPS组合导航的经典做法结构上也是卡尔曼滤波只是状态向量从四维扩到九维甚至十五维。再往上在自动驾驶领域camera、lidar、imu、gps四类传感器的融合框架里卡尔曼滤波和它的一系列变种仍然是核心模块。如果做多传感器融合的课题这套代码里的滤波框架可以直接迁移把观测矩阵H换成对应传感器的观测模型就行。6. 常见问题与排查技巧实录6.1 滤波发散轨迹完全失控这是最常见也是最让人崩溃的问题。现象是滤波输出在几步之内就跑到十万八千里外或者P矩阵的数值爆炸式增长出现NaN、Inf。我遇到过的原因主要有三个。第一个是F矩阵写错了哪怕一个元素错位置整个状态更新就崩了我的排查办法是先打印F乘上一个单位状态向量手动验算一遍确认状态更新逻辑正确。第二个是Q和R量级失衡比如Q设成了1e-8模型被锁死一旦实际运动有偏差残差永远得不到修正滤波器就顺着错误预测跑飞了。第三个是协方差矩阵P失去了对称正定性数值误差一点点累积最终导致卡尔曼增益异常。排查技巧说起来很简单打印每一步的P矩阵对角线元素和增益K的数值。如果增益长时间接近0或者变成负的直接检查P的对称性加上 P (P P) / 2 这一行虽然治标不治本但能挡掉大部分数值问题。6.2 轨迹滞后转弯被削平如果滤波后的轨迹比真实位置慢半拍尤其是转弯时明显切弯、抄近道说明Q设得太小了。滤波器太相信匀速模型一旦真实轨迹突然转方向滤波器需要好几个回合才缓过神来。解决思路有两个层面。如果整体性能还不错只是转弯处不理想可以适当增大Q让滤波器对模型失配更敏感。测试时不用微调先按原来的Q乘10或者除以10观察趋势再精调。如果要求更高可以换用匀加速模型把状态向量扩到六维加入加速度项这样模型本身就能描述转弯时的向心加速度削弱滞后。代价是Q的维度也升高调参复杂度会上升。还有一种办法是加自适应检测残差大小动态调整Q。残差持续偏大就临时增大Q相当于告诉滤波器模型可能不对多信点观测。这个方法实现也不复杂但对新手来说先把固定参数调好比过早追求自适应更实际。6.3 离群点直接带飞滤波器没有残差检测的卡尔曼滤波遇到离群点会有一个典型表现一个25米的跳变点会把滤波位置拉偏10米以上然后接下来几个采样点慢慢拉回来轨迹上出现一个明显的鼓包。如果只是在仿真里倒还好真实场景下隧道进出口、高架下是频繁出现的。解决办法就是前面代码里的马氏距离门限。门限设多少是关键设小了正常转弯被当成离群点丢弃滤波轨迹会变得僵硬设大了离群点又杀不干净。我建议先用卡方分布算理论值2自由度下0.99分位对应9.210.999分位对应13.82实际工程可以用15到20的区间。这个区间既能拦住20米以上的大跳变又不会误伤正常转弯。还有个细节如果判断某个点是离群点执行的是跳过更新、保持预测值。不过当连续多个观测点都触发门限时要警惕不是离群点而是定位模式的彻底切换比如进入隧道后GPS信号中断此时应该切换到其他数据源而不是无脑信任预测。6.4 经纬度坐标的暗坑前面强调过经纬度要转平面坐标这里再补充一个容易忽略的点即使转成了平面坐标如果轨迹跨度过大超过几十公里固定投影参数带来的变形误差就不能忽视了。短距离数据用固定每度对应的米数就可以实测误差在十米以内对城市轨迹分析完全够用。但如果你要处理的是跨省物流轨迹老老实实用UTM投影或者调用MATLAB的map工具箱做投影转换不然轨迹几何形状在纬度高的地方会被明显拉伸。还有一点轨迹数据进入滤波器之前最好先把重复点、零速度点、明显超范围点过滤掉。这些脏数据虽然卡尔曼滤波能容忍但会让状态估计的收敛速度变慢没必要让垃圾数据白白消耗滤波器的算力和置信度。6.5 问题速查表把常见的现象、可能原因和优先级整理成一张表方便快速定位问题。现象可能原因优先检查项滤波发散F矩阵错误、Q/R失衡、P不对称F矩阵逐元素验证Q/R量级标定P对称化轨迹滞后Q过小、模型失配增大Q一个数量级观察变化考虑换CA模型离群点鼓包未做残差检测增加马氏距离门限取15~20滤波等于没滤R过小或Q过大核对R的物理来源静止采集标定轨迹飘出地图经纬度未转平面检查输入给滤波器的坐标单位速度曲线全是尖峰直接用位置差分算速度用卡尔曼滤波输出的速度估计7. 最后再分享几点个人经验这套系统做完之后我自己最大的收获不是卡尔曼滤波公式本身而是对参数调优这件事有了更清醒的认识。很多初学者拿着代码第一件事是问Q和R到底设多少这个问题其实没有标准答案关键是理解每个参数背后的物理意义再根据输出逐步逼近。我更推荐的经验是先用仿真数据把滤波器的行为摸透再上真实数据这样出了问题能判断是参数问题还是数据问题排查路径会清晰很多。另外整个流程里我对离群点检测和轨迹压缩这两步越来越重视。很多项目里卡尔曼滤波只是预处理的一环真正决定数据可用性的往往是这些边角料环节。一张干净、紧凑、几何特征明确的轨迹无论做聚类分析、路网匹配还是里程统计效果都比简单滤波后直接使用要好得多。最后再分享一个小技巧保存滤波结果时一定要把速度估计和协方差一起保存下来。速度估计在后续做行为分析时非常有用协方差能告诉你每个位置的置信度这些信息在画图、对接其他模块、定位故障时都能帮上大忙。我最初只存坐标后来倒回去重新跑了好几组实验才补上这部分数据这个坑希望大家能绕开。本文还有配套的精品资源点击获取