资讯动态

别等定位漂移才发现:GPS干扰的识别与系统应对策略

发布时间:2026/8/28 1:23:54 来源:尧图企业网站定制
有一次我在郊区一条公路上试一套组合导航设备。车辆停在路边头顶无遮挡卫星数量显示 12 颗但地图上的定位点突然向路外漂了大概三十米然后又开始慢慢往回调。第一反应是接收机坏了第二反应是周围有没有高压线排查了一圈都正常。后来用日志里的信噪比数据才发现那个时间段内所有卫星的载噪比同步往下掉是非常典型的射频干扰特征。从那天起我再也不敢把 GNSS 定位正常当成一件理所当然的事情。GPS 干扰也就是 GPS jamming在很多人眼里是军事题材或者黑客剧情里才会出现的东西。但实际落地时会发现它离普通开发者、无人机飞手、自动驾驶团队和物流系统比想象中近得多。这篇文章不讨论任何具体事件只聊一个更实际的问题当 GPS 信号被干扰时你的定位系统会发生什么你该如何发现它又该如何让系统在干扰中不至于彻底瘫痪。1. 别只想着“信号没了”更麻烦的是“信号还在但位置错了”1.1 GPS 信号为什么天生就弱GPS 卫星距离地面大约两万公里信号到达地面时功率已经非常低。经常被引用的一个类比是GPS 信号相当于你在两万公里外看一盏几十瓦的灯泡实际收到的是极其微弱的电磁波。民用接收机之所以还能定位靠的是对伪码序列做相关运算把信号从噪声底里“捞”出来。因为信号本身就弱任何同频段、强度稍高的电磁信号都可以压制它。GPS 的民用信号在 L1 频段 1575.42MHz信号结构公开接收机必须依靠足够的信噪比来保持对卫星的跟踪。一旦附近出现一个稍强的射频源轻则让载噪比下降重则直接让接收机失锁。整个过程可能发生在几秒钟内上层应用只会看到定位精度骤降或者干脆没有定位。这也是很多人误解的地方以为干扰 GPS 需要多大的设备。实际上在接收机旁边几十米到几百米范围内一个低功率发射源就可能造成明显影响。更关键的是干扰不只是“让信号消失”这一种形式还有更隐蔽的“欺骗”。1.2 压制干扰与欺骗干扰表现完全不同从信号形态上看GPS 干扰主要分成两类。一类是压制干扰。它用同频段噪声或连续波信号把 GPS 信号淹没在噪声里。接收机无法完成捕获或跟踪表现是卫星数减少、信噪比下降、定位丢失。这一类的判断比较容易因为系统会明确地“变差”。另一类是欺骗干扰。它伪造一组看起来合法的 GPS 卫星信号让接收机锁定到错误信号上。欺骗带来的问题不是“没有定位”而是“定位错了但看起来很正常”。接收机可能继续输出格式正确的位置、速度和时间只是这些数字不是真实值。对上层系统来说这比压制干扰更危险因为没有任何一个环节会提示异常。实际工程里有个经验真实环境中的 GPS 信号叠加了噪声、多径和大气误差卫星之间的信噪比会有起伏而欺骗信号往往来自同一台发射机信号干净得像从教科书里复制出来一样各颗卫星的信噪比可能异常整齐。这个差异可以作为检测欺骗的一个入口但不是唯一的判断标准。1.3 除了恶意干扰还有一堆非故意干扰不要把 GPS 干扰都理解为恶意行为。现实中很多定位异常来自“非故意干扰”。开汽车时质量不好的射频增频器、行车记录仪、无线视频发射器都可能在工作频段附近产生杂散发射影响 GPS 接收。工地附近的大功率设备、雷达站、通信基站、甚至某些电子屏也可能在特定条件下造成信号质量下降。环境里还有多径效应、电离层闪烁、高楼遮挡等因素它们对定位结果的影响有时候和射频干扰非常相似。所以遇到定位不准先别急着给接收机判死刑也别一上来就断言“被干扰了”。先做排除要把自然因素、设备故障和射频干扰分开看。这个顺序是后续所有排查的基础。2. GPS 被干扰后连锁反应远比定位图标漂移更严重2.1 接收机内部的异常链一个常规的 GNSS 接收机从天线收到信号到最后输出定位结果要经过射频前端、基带处理、伪距测量、定位解算、完好性检查等多个环节。干扰可能发生在任意一级。射频前端可能饱和导致后级信号失真基带处理环路可能失锁导致伪距观测量出现跳变解算阶段如果采用了被污染的观测量位置和速度就可能出现离群值。这些异常不一定是同时出现的。有时候接收机还能输出定位但定位质量已经在肉眼看不到的地方变差了。NMEA 协议里有一些字段能反映这种变化。比如$GNGGA语句里的定位质量标识0 代表没有定位1 代表单点定位2 代表差分定位4 代表固定 RTK。还有$GPGSV或$GBGSV语句里每颗卫星的信噪比SNR单位是 dBHz。正常跟踪状态下大部分卫星的 SNR 在 35 到 50 之间。如果所有卫星 SNR 同步掉到 20 以下或者某一个方向上的卫星集体消失那就要高度怀疑射频干扰。2.2 上层应用会怎样被误导定位系统只是最底层。真正受影响的是建立在定位之上的各种业务逻辑。车辆导航地图上定位点连续跳动会触发路径重算可能会把一条直线路径算成绕圈无人机在自动返航时如果返航点本身是在干扰条件下刷新出来的飞机可能飞向错误坐标自动驾驶融合定位里如果 GNSS 权重没有及时调整车辆会以为自己在某一车道上实际可能已经偏移。更麻烦的是物流调度系统它只看车辆上报的坐标不会管坐标是从哪个传感器组合出来的。在航空领域GNSS 是很多基于性能导航运行的基础。当 GNSS 不可靠时飞行管理系统可能触发告警机组需要切换到传统导航方式。这一切的前提是系统能够及时发现 GNSS 数据不可信。如果干扰是压制式的系统会明显丢星如果是欺骗式的系统可能一直在输出错误数据但不触发任何告警。这正是“GPS 干扰”最值得警惕的地方。2.3 真正的风险在于“没有报错”很多系统在设计时把 GNSS 数据当成了“真值”没有做交叉验证。这是最危险的一环。假设一辆自动驾驶测试车GNSS 输出的速度是 10m/sIMU 积分得到的速度也是 9.8m/s两者接近系统认为一切正常。可如果 GNSS 受到欺骗它给出的位置已经偏离真实位置 50 米但速度变化率可能仍然平滑。只靠单一来源根本察觉不到问题因为数据内部是自洽的。所以检测 GPS 干扰不能只看“有没有定位”还要看“定位是否可信”。要让系统学会对 GNSS 数据提出疑问而不是无条件接受。3. 发现定位异常按这个顺序排查到底是不是 GPS 干扰3.1 先记录现象而不是马上换设备一旦发现定位异常第一件事不是拆设备而是记录。需要记录的信息包括现象类型定位丢失、位置漂移、速度跳变、时间跳变、卫星数变化、信噪比变化、异常发生的具体时间和地点、现场环境开阔地、高楼下、桥梁附近、工业区、当时是否有强电子设备工作。如果接收机支持日志输出务必保存原始 NMEA 数据。原始数据是事后排查最有价值的证据比“刚才好像突然飘了”这种描述可靠得多。尽量不要在异常发生时重启设备。重启会清空接收机的状态很多关键现场信息就没了。更好的做法是持续记录让异常完整地留在日志里。3.2 用 NMEA 日志判断干扰特征拿到日志后可以先做几个快速判断。第一步看定位质量标识。如果定位质量从 1 掉到 0说明接收机已经无法解算如果 1 一直存在但坐标跳变很大说明观测量可能被污染。第二步看卫星信噪比。正常跟踪时卫星 SNR 会随卫星高度角变化但整体相对稳定。如果所有卫星 SNR 在同一时间同步下降或者大部分卫星在短时间内失锁这就是射频干扰的典型特征。如果是多径或遮挡通常只会影响个别低高度角卫星不会造成全星座同步恶化。第三步看位置、速度的时间序列。如果坐标在连续输出过程中出现几十米甚至上百米的跳变然后恢复正常而且跳变的时间点和 SNR 下降的时间点吻合那基本可以确认信号质量异常。下面是一个简单的 NMEA 日志分析示例结构可以用来提取每日定位质量和平均 SNR。这里只展示思路具体字段格式需要根据你的接收机输出调整。# 示例从NMEA日志中提取 GGA 定位质量和 GSV 信噪比均值 import re def parse_nmea_log(path): quality_values [] snr_values [] with open(path, r) as f: for line in f: if line.startswith($GNGGA): parts line.split(,) # parts[6] 是定位质量标识 if len(parts) 6: quality_values.append(parts[6]) elif line.startswith($GPGSV) or line.startswith($GBGSV): parts line.split(,) # 解析每颗卫星的SNR字段需要根据不同接收机格式调整 for value in parts[9:]: try: snr int(value) if snr 0: snr_values.append(snr) except ValueError: pass return quality_values, snr_values在实际项目里我一般会先把 NMEA 日志按时间轴画出来横轴是时间纵轴是卫星数和平均 SNR。一张图往往比几十条日志更直观。如果看到卫星数骤降、平均 SNR 同步下跌就可以把定位异常归因到射频输入质量而不是解算算法问题。3.3 从环境与设备两个方向做排除如果日志判断指向干扰还需要进一步排除环境因素和设备自身因素。环境排除主要看几个点地点是不是开阔地附近有没有高楼、桥梁、隧道有没有大型雷达、基站、发射塔有没有正在施工的工地周边有没有大功率无线设备。可以把设备原地静止几天做连续记录看同一位置、同一时段的定位质量是否稳定。如果只在特定时段变差很可能存在周期性干扰源。设备排除主要看天线、馈线、接收机型号、固件版本和供电。天线到接收机之间的馈线如果破损或接触不良也可能信号质量极差。供电不稳会导致接收机内部噪声异常但通常不会表现为“所有卫星 SNR 同步下降到同一水平”这一点和射频干扰不同。更直接的验证方法是把同一台设备移动到另一个远离怀疑点的地点。如果异常消失说明原始环境大概率有问题如果异常依然存在那就要重点检查设备本身。3.4 如果真的是干扰下一步怎么办只判断出“是干扰”还不够还要决定怎么处理。如果只是临时测试换个地点、换个时段通常就够了。如果是长期运行的项目就不能靠事后人工排查了需要把干扰检测接入系统监控。比如在采集单元里实时计算平均 SNR、卫星数、定位质量当指标低于阈值时自动报警并触发融合定位里的降级逻辑。需要特别说明一点工程上发现自己周围有干扰源时不要尝试去定位、反制或破坏它。相关操作可能触及法律和安全边界。正确做法是保存日志、记录现场、向上级或专业管理机构报告。你作为系统开发者能控制的范围是自己的导航系统如何发现异常、如何降级、如何恢复而不是去对抗外部射频环境。4. 对抗 GPS 干扰真正靠谱的思路不是“挡住信号”而是“不依赖单一来源”4.1 为什么“加一个抗干扰天线”不是银弹很多人遇到干扰的第一反应是换抗干扰天线。抗干扰天线确实有用它可以通过方向图调零或自适应波束成形抑制某些方向来的干扰信号。但它不是万能的。抗干扰天线主要针对窄带和宽带压制式干扰效果受到干扰源数量、来波方向、信号强度、天线尺寸和接收机能力限制。消费级设备受成本、体积、功耗约束能塞进去的天线增益有限很难做到高端航空或军用设备那样的抗干扰水平。而且抗干扰天线通常只解决“信号被压制”的问题对欺骗干扰的缓解能力也有限。对大多数民用系统来说更普适的办法不是试图“挡住干扰”而是让整个定位系统在 GNSS 不可信时仍然能知道“自己大概在哪”并且按照安全逻辑继续运转或安全停止。这个思路比单纯堆硬件要可靠得多。4.2 多传感器融合是最常用的一条路一个常见的方案是把 GNSS 和惯性测量单元 IMU 做融合。IMU 能提供短时间内的相对位置和姿态变化但会随时间漂移。GNSS 能提供绝对位置但容易被干扰。两者组合在一起可以在 GNSS 丢失后的一段时间内维持相对可用的定位输出。松耦合是一种较容易落地的做法GNSS 输出位置和速度IMU 输出加速度和角速度通过卡尔曼滤波器融合成一个位置估计。当 GNSS 受到干扰时滤波器可以降低 GNSS 测量权重主要依赖 IMU 预测短时间内位置。紧耦合则更进一步直接在伪距级别上融合复杂度和计算量都更高但鲁棒性也更强。实际项目里我建议先做松耦合不要一上来就追求紧耦合。先把问题跑通确认 IMU 标定、时间同步、坐标系对齐、滤波器调试都正常。然后模拟 GNSS 中断场景记录系统在中断 1 秒、5 秒、30 秒后分别漂移多少。这样你就知道自己的降级能力边界在哪里。除了 IMU还可以使用轮速传感器、视觉里程计、激光雷达匹配、气压计、磁力计等作为辅助。不同场景适合不同组合车辆可以用轮速IMU无人机可以用 IMU视觉室内机器人可以用激光雷达IMU。核心目标只有一个不要把所有鸡蛋放在 GNSS 一个篮子里。4.3 在系统层面加入完好性监测和降级逻辑抗干扰不是接收机单点的事应该体现在系统设计里。接收机自身通常有一些完好性监测手段比如 RAIM利用冗余卫星观测量检测出错的卫星。但接收机内部只能判断“卫星有没有问题”很难判断“环境有没有针对我的信号做欺骗”。上层系统还需要自己的判分逻辑。可以设计一个“GNSS 数据可信度评分”模块输入包括定位质量标识、卫星数、平均 SNR、位置跳变幅度、速度一致性、GNSS/IMU 偏差等。当评分低于阈值时系统自动降级自动驾驶从“车道级定位”降级到“道路级定位”或者直接提醒驾驶员接管。无人机从自动返航模式切换为悬停模式等待操作员确认。车辆导航从自动规划路线变成提示“定位弱请到开阔处”。物流系统不再把当前坐标当作精确停靠依据改用视觉或地磁等辅助手段。降级逻辑必须在任务开始前设计好不能等到干扰发生时才临时写规则。在真实项目里规则越简单越容易验证。推荐先写死几个阈值跑一段时间看误报率再调参。不要一上来就引用一个复杂的机器学习模型除非你有足够多的干扰样本。4.4 操作层面的备份方案除了软件层面的多源融合操作流程也要有备份。任务前检查卫星数、SNR 和定位模式如果环境不理想先不要启动关键任务。任务中持续监控定位质量指标设置好报警阈值。任务后保存原始日志对异常航段做复盘记录干扰疑似区域和时间形成风险地图。如果业务允许还可以准备非 GNSS 导航备份。固定路线上的 AGV 可以使用磁条或反射板码头港口有视觉引导无人机在短距离任务里可以依赖视觉特征匹配。这些备份不一定保证同样的精度但至少能让系统在 GNSS 失效时不至于完全失控。5. 把 GPS 干扰当成一种默认存在的风险而不是一次偶然故障5.1 先定义容忍度再谈方案不同的定位任务对误差的容忍度完全不同。设计系统之前先问自己一个问题我的任务在 GNSS 失效多长时间、定位误差多大范围内还可以接受下面是一个常见场景判断表可以作为设计参考场景典型容忍误差GNSS失效时可接受行为建议的备份方式车辆导航米级误差10米内通常可用提示重算路径等待恢复惯性地图路网约束无人机自动返航相对起点误差在数米内先悬停或切换视觉定位再决策IMU视觉里程计自动驾驶车道级定位厘米级到亚米级降级至道路级必要时靠边停车RTKIMU视觉融合航空运行与进近高完好性和高连续性要求切换到传统导航方式重新选择运行路径惯性导航地面导航设施物流跟踪与调度几十米到百米级继续按范围推算等待定位恢复基站位置/里程估算这个表不是让你直接抄而是提醒你思考“失效时系统应该做什么”。如果这个问题都没想清楚后面的抗干扰方案都可能白做。5.2 可复用的五步设计清单把 GPS 干扰当成默认风险来管理可以按照下面五步来走。第一步明确运行环境的电磁风险等级。你的设备主要工作在开阔农村、城市密集区、工业区、机场周边还是山区不同环境里射频干扰概率和自然信号遮挡程度完全不同。第二步采集基线数据。在至少一周的正常运行里记录每个时段的卫星数、平均 SNR、定位精度、位置跳变频率。这些数据会告诉你“正常”长什么样没有基线就谈不上异常检测。第三步设计异常检测机制。不要单独依赖接收机状态要把 GNSS 数据和其他传感器做交叉验证。关键指标是什么阈值是多少报警后通知谁都要定义清楚。第四步设计降级链。从最优信号到最差信号设计一层一层往下降的路径。比如 GNSSRTK → GNSS 单点 → GNSSIMU 松耦合 → 仅 IMU 短时保持 → 安全停止。每一层都要有触发条件和退出条件。第五步持续复盘干扰事件。每次发生定位异常都要形成记录包括时间、地点、影响时长、设备状态、日志文件。积累足够多之后很多规律会浮现出来比如某些区域 14 点到 16 点容易出问题某些路线在特定条件下偏差大。这些规律是任何参数手册都给不了你的。5.3 个人开发者能做什么如果你只是一个人维护一个开源项目或者在做毕业设计也不需要一开始就上昂贵方案。可以从日志做起。所有定位项目哪怕是一个简单的 Arduino GPS 数据采集器都保存原始 NMEA 数据。用 Python 做一个离线分析脚本统计每天的信噪比和定位质量变化。一旦发生异常你能拿出数据来说明原因这是非常宝贵的工程习惯。手机上也有很多 GNSS 测试应用能显示当前能看到的卫星和 SNR可以作为快速排查工具。对于个人开发者来说学会看 SNR 可能比会调一个融合滤波器更重要。因为很多定位问题的根因都在信号接收那一层。5.4 长期视角GPS/GNSS 干扰不会因为你的设备贵就绕开你。相反随着城市电磁环境越来越复杂遭遇干扰的概率大概率会继续增加。未来的竞争不是看谁的接收机更抗干扰而是看谁的整套系统能在信号不完美时依然做出正确判断。真正决定系统安全性的不是某一个传感器有多强而是当所有传感器都不完美时系统能不能意识到自己的局限能不能给出一个可预期的降级行为。这个理念比任何一颗具体芯片都重要。回到开头那个漂移的定位点。后来我确认了来路但真正留给我的是一个习惯每一条定位日志都保存每一次异常都记录每一个降级决策都要有明确逻辑。当下一次定位图标乱跳时先别急着换手机先把它当成一次数据异常然后一步步排除。这个习惯往往比任何抗干扰硬件都便宜也比任何单一定位方案都可靠。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价