
在GNSS这条路走得越深越会发现一个规律不管你做的是接收机基带、高精度算法还是拿着手机做定位优化最后都会栽到同一个底层问题上——信号体制。高级篇前面几章把误差源和坐标系梳理了一遍这一章04 信号体制要从4.1节开始把各个系统的信号特征拎出来逐项对比。为什么要这么较真因为频率、码率、调制方式、电文结构这些参数直接决定了接收机能不能捕获、能不能跟踪、能不能测准也决定了不同系统在抗干扰、抗多路径上的表现。我最早用u-blox模块时只看NMEA的GGA觉得定位精度差不多就完事了后来做RTK固定率测试才意识到L5/B2a这些新信号在遮挡环境下带来的载噪比提升比算法调参管用得多。这一篇我把GPS、BDS、GLONASS、Galileo四个系统的民用信号特征全部梳理了一遍并结合天线选型、Android手机实测、常见故障排查来聊。正文里涉及到的频率、码率、带宽、调制方式等参数基本都来自ICD文档和公开资料你可以放心当参考手册用。搞懂这些之后再看接收机内部的捕获跟踪策略、PVT解算模块就不会再觉得是个黑盒。1. 信号体制不是“背参数”它是定位结果的源头1.1 为什么高级篇要单独讲信号特征很多初学者看GNSS习惯先看定位算法、最小二乘、卡尔曼滤波觉得信号体制就是一堆频率数字背下来就行。但实际干活的时候你会发现所有观测量都是从信号里提取出来的信号结构不一样伪距精度、载波相位稳定性、多路径抑制能力全都不一样。举个例子GPS L1 C/A码码率是1.023 Mcps每个码片宽度约293米理论上伪距噪声能做到码片宽度的1%左右而L5信号的码率是10.23 Mcps码片宽度约29.3米伪距噪声天然就低一个量级。这就是为什么双频、三频接收机在同样环境下的定位结果更稳。另一个原因和互操作有关。现代接收机很少只看单一系统GPS、BDS、Galileo、GLONASS在射频前端混在一起信号特征决定了你如何分配带宽、如何设计滤波器、如何处理不同系统间的互干扰。比如GPS L1和BDS B1C、Galileo E1都落在1575.42 MHz这个频点成了民用GNSS的“黄金频段”但三个系统的调制方式和码率并不完全相同接收机要把它们区分开来靠的就是对信号特征的精确建模。如果把信号体制搞混捕获相关峰、跟踪环路、电文解调都会出现莫名其妙的bug。信号特征还会影响天线设计。你现在去买一个GNSS天线很多商家会标“GPS L1/L2/L5 BDS B1/B2/B3 GLONASS Galileo”但你真正要看的是频率覆盖范围、带内平坦度、轴比、相位中心稳定性。这些参数脱离信号体制根本没法谈。比如只支持B1I和L1的天线放到现在支持B1C的板卡上很可能因为带宽不够导致相关峰变形。所以4.1节这个标题看起来只是“剖析信号特征”其实是在给你后面所有硬件选型和软件调优打地基。1.2 先看懂民用信号的一张总表在深入每个系统之前先给一张对照表把目前常见的民用信号放在一起看。这张表我整理了很多版本最后留下的是最常用、最容易在真机上观测到的部分。系统信号中心频率 (MHz)码率 (Mcps)调制方式主要用途GPSL1 C/A1575.421.023BPSK-R(1)标准定位、捕获辅助GPSL1C1575.421.023BOC(1,1) 数据/导频现代化民用信号GPSL2C1227.601.023BPSK-R(1)双频电离层修正GPSL51176.4510.23BPSK-R(10)生命安全、高精度BDSB1I1561.0982.046BPSK-R(2)北斗二号/三号BDSB1C1575.421.023BOC(1,1)/QMBOC北斗三号互操作BDSB2a1176.4510.23BPSK-R(10)北斗三号高精度BDSB3I1268.5210.23BPSK-R(10)北斗三号增强GLONASSL1 OF1602.00 k×0.56250.511BPSK-R(1)标准定位GLONASSL2 OF1246.00 k×0.43750.511BPSK-R(1)双频定位GalileoE11575.421.023BOC(1,1)/CBOC民用互操作GalileoE5a1176.4510.23QPSK-R(10)高精度GalileoE5b1207.1410.23QPSK-R(10)增强服务GalileoE61278.755.115BPSK-R(5)商用高精度表格里的调制方式写法已经简化实际ICD里还有子载波相位、导频分量组合等细节后面再展开。看到这张表你应该有一个感觉频率只有那么几个但码率差别很大调制方式也很不一样。正是这些差异决定了接收机内部要准备多少条相关器通路、用什么样的环路带宽、在什么场景下优先选择哪个信号。2. 四大系统信号特征逐一拆解2.1 GPS从L1 C/A到L1C/L5升级到底改了啥GPS是目前信号体制最复杂、也最“层叠”的系统。老一代的L1 C/A大家都熟中心频率1575.42 MHz码率1.023 Mcps数据速率50 bps用BPSK-R(1)调制。它在很长一段时间里是唯一免费开放的民用信号接收机设计也围绕它优化。但它的短板很明显码率低导致测距精度一般没有导频分量弱信号下较难跟踪而且只有一个民用频点没法直接做双频电离层修正。所以GPS后来推了L2C、L5和L1C。L2C采用了时分复用结构包含CM和CL两种码CM码上调制电文CL码没有电文专门用来增强跟踪灵敏度。L2C虽然没有改变载波频率但它的码结构比L1 C/A更适合长积分在城市峡谷里的表现会有提升。L5则是全新的频点中心频率1176.45 MHz码率直接提高到10.23 Mcps还带了两个分量I5数据和Q5导频并且有更强的抗干扰设计信号功率也更高。L1C则是为了和其他系统互操作而设计的采用BOC(1,1)调制数据分量和导频分量分开导频分量没有电文这非常有利于弱信号接收。从接收机角度理解GPS信号特征关键是看“信号分量”这个设计变化。老一代L1 C/A只有一个载波上调制电文接收机要同时依赖电文同步和数据解调信号弱到一定程度就没法工作。而L5和L1C把导频分量单独拎出来接收机可以在不知道电文比特的情况下长时间相干积分载噪比门槛能压低好几个dB。我实测过同一款手机在室内窗边GPS L1 C/A载噪比在20 dBHz附近就不稳定而同一时刻GPS L5还能稳定锁定在23 dBHz左右。虽然看起来只差3个dB但对定位连续性来说是完全不同的体验。2.2 BDSB1I/B1C/B2a/B3I新老信号并存的设计逻辑北斗的信号体制可能是国内工程师最需要仔细看的因为BDS同时运营着老一代和新一代信号。B1I是北斗二号就开始播发的信号中心频率1561.098 MHz码率2.046 Mcps比GPS L1 C/A高了一倍因此伪距噪声理论上更低。很多老款北斗模块都只支持B1I在开阔环境下表现其实不差。但它的问题在于调制方式是BPSK-R(2)频谱占得比较宽和其他系统的频段重叠不如B1C那么友好。北斗三号推出了B1C和B2a。B1C中心频率和GPS L1C、Galileo E1一样在1575.42 MHz这个位置选得非常聪明接收机可以用同一个射频通道同时处理GPS/BDS/Galileo的L1/E1/B1C信号。B1C的数据分量用BOC(1,1)导频分量用QMBOC(6,1,4/33)BOC(1,1)和BOC(6,1)的功率比是4:1这样一类设计频谱上既兼容BOC(1,1)又有高频分量提升测距能力。B2a则和GPS L5、Galileo E5a共用频点1176.45 MHz码率10.23 Mcps调制方式也是BPSK-R(10)和L5几乎一致。这种“刻意对齐”的频点和调制方式最大好处是接收机硬件可以共用通道基带处理也能用同一套相关器。这里要提醒一点BDS还有一个B3I频点中心频率1268.52 MHz码率10.23 Mcps。B3I的频点和GPS L2、Galileo E6靠得比较近但又不完全一样因此在射频前端滤波器的设计上需要留意带外抑制。很多三频板卡选择“L1 L2 L5”组合但如果要兼容北斗三号则要重点考虑B1C、B2a、B3I这三个频率。市面上一些“全频点”天线实际在B3I频点的增益可能偏软用户往往要到实际跑数据才会发现。2.3 GLONASSFDMA这一个特征让接收机厂商又爱又恨GLONASS现在的民用信号和GPS/BDS/Galileo最大的区别在于频分多址FDMA。GPS所有卫星都用同一个L1频率靠扩频码区分卫星GLONASS的L1 OF信号则每颗卫星用不同的载波频率中心频率1602 MHz频率间隔0.5625 MHz。卫星编号k的范围是-7到6所以整个频段跨度大约在1592.0625 MHz到1605.375 MHz之间。L2 OF频段也是同理中心频率1246 MHz频率间隔0.4375 MHz。FDMA带来的结果是好坏参半。坏处很明显接收机射频前端为了覆盖GLONASS L1整个频带需要更宽的带宽这本就增加了带内噪声不同频率上的信号传播特性略有差异通道间要做偏差校正而且GLONASS L1的码率只有0.511 Mcps比GPS C/A还低测距精度天然吃亏。好处则是抗窄带干扰能力更强因为每颗卫星“躲”在不同的频率上一个窄带干扰通常只会压制某一颗或几颗卫星不会像CDMA系统那样一压压一片。另外还有一个容易被忽略的点GLONASS现在也播发码分多址CDMA信号比如L3频点但开放程度和普及率还不高大多数消费级接收机仍然以FDMA信号为主。如果你做多系统融合定位GLONASS的伪距观测量和GPS/北斗相比在噪声上偏大加权时要适当降低GLONASS的权重。很多PPP/RTK软件里默认给GLONASS一个额外噪声项原因就在这里。2.4 GalileoE1/E5/E6的高质量设计顺带聊聊互操作Galileo的信号体制在四系统里算是“后发优势”最强的尤其是E1和E5。E1的中心频率1575.42 MHz调制方式采用CBOCComposite Binary Offset Carrier本质上是BOC(1,1)和BOC(6,1)的组合根据功率比形成不同的频谱形状。它同时包含E1-B数据分量和E1-C导频分量接收机对导频分量做无数据跟踪灵敏度和稳定性都很高。E5则是更夸张的设计把E5a和E5b组合成一个带宽很宽的AltBOC信号中心频率1191.795 MHz总带宽超过50 MHz可以实现非常高的测距精度。不过实际消费级接收机通常只处理E5a或者E5b的单个分量并不会去解全带宽AltBOC因为那样对ADC采样率和功耗要求太高。你在Android手机上看到的Galileo E5a就是1176.45 MHz的这个信号码率和L5/B2a接近测距特性也差不多。E6频点位于1278.75 MHz码率5.115 Mcps主要承载商用高精度服务普通用户很少能直接拿到这个频点的数据但Galileo的E6信号设计和GPS L2C有相似之处都是数据导频结构适合做双频/三频解算。互操作是Galileo的一个隐藏亮点。因为E1和GPS L1C、BDS B1C共用频率并采用相似的BOC调制接收机基带可以用一条通路同时处理三个系统。也正是这种互操作需求使得“L1/E1/B1C”在现代基带芯片里成了标配。如果只支持L1 C/A而不支持BOC信号在新一代信号面前基本等于半残。3. 信号特征背后的参数不看懂后面全白搭3.1 频率、码率、带宽如何决定你的测量精度很多人在选型时只看“支持几频”却不看码率和带宽这是误区。频率决定了能不能收到信号码率和带宽决定了测距精度。伪距测量本质上是测量扩频码的相位延迟码率越高码片越窄相关峰越尖测量噪声越低。举个例子GPS L1 C/A码率1.023 Mcps码片宽度约293米L5码率10.23 Mcps码片宽度约29.3米。在相同的环路带宽和载噪比下L5伪距噪声比L1 C/A低约10倍。这就是为什么高精度接收机都抢着用L5/B2a/E5a。带宽的影响体现在热噪声和码跟踪精度上。接收机的射频前端带宽越宽进入基带的噪声越多但码相关峰的过零点斜率也越陡。实际设计要在抗干扰和测距精度之间折中窄带前端能滤掉干扰但码跟踪误差变大宽带前端码精度好但容易受到带外信号饱和。天线也一样如果你在L5频点上天线带宽不够看到的L5载噪比会明显偏低这时候再好的接收机也发挥不出来。我见过一个案例用户抱怨某款板卡L5观测噪声大最后查出来是配套天线在1176 MHz附近增益掉了3 dB换天线之后问题立刻消失。电离层修正也是频点选择的核心原因。双频接收机通过两个频率上的伪距差可以估计出电离层延迟而频率间隔越大估计精度相对越好。GPS L1和L5之间间隔约399 MHzL1和L2之间间隔约348 MHz。北斗的B1I和B2a之间间隔约385 MHz和B1C与B2a组合一样。实际用起来双频消电离层组合的噪声会被放大频点间隔越小放大系数越大。因此现在新信号都尽量把两个民用频点拉开就是为了在高精度解算中留出更多余量。3.2 BPSK与BOC调制方式影响的不只是频谱很多人把BPSK和BOC当成同一类东西实际上它们在接收机里的表现差异很大。BPSK-R是最直接的扩频调制码片在时域上是一个矩形脉冲频谱主瓣宽度约等于两倍码率。GPS L1 C/A的BPSK-R(1)主瓣宽度约2.046 MHzL5的BPSK-R(10)主瓣宽度约20.46 MHz。BOC调制则在BPSK的基础上加了一个方波子载波频谱被“劈开”成两个主瓣分别位于中心频率两侧。BOC(1,1)的子载波频率为1.023 MHz两个主瓣中心离中心频率约1.023 MHz整体占用带宽和BPSK-R(1)差不多但频谱互不重叠更容易实现不同信号共存。BOC有个经典问题捕获时相关峰有“多峰”现象特别是在BOC(6,1)这种高阶子载波上如果接收机只用传统BPSK相关器很容易锁到旁瓣上形成假锁。这就需要基带设计专门的BOC无模糊捕获算法比如Bump-Jump或者在捕获阶段用BPSK-like假设先在主瓣和副瓣之间做判断。你在Android上直接看卫星信号时不会感知到这些但用软件接收机自己写捕获代码时BOC信号的副峰能把你折磨到怀疑人生。还有一个重要影响是导频分量。现代信号普遍把数据分量和导频分量分开导频分量上不调制电文接收机可以长时间相干积分。BOC信号在导频分量上的设计对弱信号跟踪和载波相位测量都非常有利。Galileo E1-C、GPS L1C导频、BDS B1C导频都是这样的结构。你在测试时留意一下如果某颗卫星的信号强度在20 dBHz附近还能持续锁定多半是在跟踪导频分量而不是数据分量。3.3 数据速率、电文设计与捕获跟踪的取舍信号特征里还有一个容易被忽略的参数导航电文的数据速率。GPS L1 C/A是50 bpsBDS B1I是50 bpsGalileo E1-B是250 bpsB1C的数据分量速率是100 bpsL5是50 bps。数据速率高意味着播发一个完整星历所需时间短冷启动更快但数据速率高也意味着每比特能量低电文解调需要更高的载噪比。因此现代信号通常把低速率的必要星历放在一个信道上把高速率的增强信息放在另一个信道上甚至用导频分量专门维持跟踪。捕获的速度不光取决于电文速率还取决于码长和码周期。GPS L1 C/A码长度1023个码片周期1毫秒捕获时可以靠短相关累积快速搜到。现代新信号很多采用了更长的码比如L5 I码周期1毫秒Q码周期20毫秒B1C导频码周期10毫秒。长码的好处是互相关低、抗远近效应好缺点是捕获搜索空间变大。接收机厂商通常会用“先捕获短码再精化跟踪”的两步策略这也是为什么新信号在冷启动时未必比老信号快。从实际运维角度看数据速率和电文结构影响最大的场景是RTK初始化。RTK需要从基准站拿到差分改正数流动站要能稳定解调星历。如果卫星信号弱高速率电文的误码率会明显上升可能导致星历不完整从而影响首次固定时间。有一回我做城市峡谷测试同一台接收机固定率忽高忽低后来发现是某颗卫星B1C数据分量解调失败星历一直没有更新最终通过剔除该卫星解决。这个经历让我意识到理解每个信号的电文设计比盲目堆卫星数量更重要。4. 实操从天线到Android亲手观测信号特征4.1 天线选型如何匹配不同系统信号信号特征落到实际场景第一个绕不开的硬件就是天线。GNSS天线需要覆盖所有你关心的频点同时要有足够带宽。以常见的“L1L2L5”多频天线为例它要覆盖1150 MHz到1300 MHz这个范围还要保证在1575.42 MHz附近也有稳定增益。如果你做北斗三代就必须额外关注B1C所在的1575.42 MHz以及B2a所在的1176.45 MHz这两个频点和GPS L1/L5几乎重合所以兼容性相对容易。但B1I在1561.098 MHzB3I在1268.52 MHz与GPS的频点不完全重叠天线设计就需要更宽的带宽或额外的陷波否则这些频点上的增益可能会有波动。实际测试中我会用频谱仪或接收机自带的C/N0扫描来判断天线质量。把天线固定在一个开阔位置分别记录GPS L1、L5BDS B1I、B2aGLONASS L1等信号的载噪比均值。正常情况下同一颗卫星在不同频点上的C/N0应该接近最多差2-3个dB如果某个频点比其他频点低很多优先怀疑天线在那里的增益不够或者馈线接头阻抗不连续。有源天线的低噪声放大器LNA增益一般在25-35 dB增益太高会引入非线性太低则弥补不了馈线损耗选择时要结合线长和接收机灵敏度判断。还有一个关于天线相位中心的问题。不同频点的相位中心并不完全重合天线设计不好时L1和L5的相位中心偏差可能达到厘米级。对普通导航来说无所谓但对精密测量和PPP来说就是大问题。采购天线时最好选择厂家明确给出相位中心偏差PCO/PCV参数的产品并且在实际使用中定期做天线相位校正。很多人只盯着“全频段”三个字忽略了相位一致性等到做基线解算时才发现系统误差。4.2 在Android上用GnssLogger查看各系统信号特征现在的Android手机已经成了非常方便的信号特征观测工具不需要额外买板卡就能看到GPS、BDS、GLONASS、Galileo甚至QZSS的信号数据。最常用的App是Google官方的GnssLogger它可以在“已使用位置信息”的开关里拉到原始GnssMeasurement。下载安装后打开测量记录就能看到每一颗卫星的载波频率、载噪比C/N0、伪距、多路径指示器、信号类型等字段。以Android 12及以上系统为例GnssLogger里每行测量数据会有constellationType和carrierFrequencyHz两个关键字段。constellationType里1代表GPS2代表BDS3代表GLONASS4代表QZSS5代表Galileo。carrierFrequencyHz则是具体的载波频率比如1575.42e6L1/E1/B1C、1176.45e6L5/E5a/B2a、1561.098e6B1I等。通过查看这些字段你能直观地判断手机在某一时刻实际接收到了哪些信号。很多手机为了省电可能不会开启所有频点比如只报L1而不报L5这时候不要急着怪硬件先检查手机是否开启了“高精度定位”或“GNSS辅助”选项。实际观测C/N0是很有意思的事。把手机放在窗户边你会看到GPS L1的C/N0从30到45 dBHz不等L5相对会低一些因为手机天线在低频段的效率通常不如高频段。BDS B1I的信号往往比较强因为北斗卫星在亚太地区本身的仰角分布比较好。Galileo E1和E5a如果同时可见你会发现E5a的C/N0比E1低2-4 dB这是正常现象不代表信号差。通过这种方式能把纸面上的信号特征和现实中的电磁环境联系起来。5. 实战排查信号特征相关的高频问题速查5.1 手机/模组搜不到新信号先别怪硬件经常有人问我我的手机支持L5为什么在同一个地方只能看到L1看不到L5这通常不是硬件故障而是几个常见原因。第一手机系统策略会动态开关频点电量低或温度高时会关闭L5接收第二当前所在位置的L5卫星仰角太低或者被建筑遮挡手机基带认为不值得上报第三某些手机虽然标注支持L5但APP没有正确请求原始测量数据需要打开GnssLogger里的所有开关。还有一点容易被忽略L5信号在穿透遮挡时比L1衰减更明显所以室内或高架桥下优先看到L1是正常的。如果你用的是外接GNSS模组搜不到新信号还要检查固件版本和配置。很多模组默认开启的卫星系统只有GPS和BDS需要手动打开Galileo和GLONASS并且选择信号类型。比如u-blox F9P要用u-center配置“L1L2”如果要接收L5/B2a还需要确认固件支持并开启对应频段。配置完成后用TCXO测试信号再看“Satellite”页面里的频率指示能很快定位问题。核心思路是先从配置和策略层面排查再怀疑硬件。5.2 GLONASS频点偏移引起的“锁定漂移”GLONASS的FDMA信号有一个非常典型的工程坑不同卫星的载波频率不同接收机在做通道校准时必须计算每颗卫星的多普勒频偏和频率偏差。如果接收机在初始化时错误地假设了某颗卫星的频点就可能导致伪距偏差表现为定位结果整体向一侧漂移。这个现象在高动态场景下更明显因为多普勒变化叠加在FDMA频差上跟踪环路如果带宽不够很容易失锁。排查时先检查观测量文件里的GLONASS频率通道号一般以“频道号”表示范围是0到20对应k-7到6。然后对比同一颗卫星L1 OF和L2 OF的伪距一致性如果两个频点之间的电离层修正后残差很大基本可以推断是频点计算错误。还有一种常见情况是接收机本振频率设置不准确导致所有GLONASS卫星的系统偏差一致。手动校准通道偏差参数或者升级到支持CDMA GLONASS信号的固件通常能缓解。5.3 BOC信号跟踪的“假锁”与环路失锁BOC信号的多峰特性在特定场景下会让接收机锁到副峰上。副峰锁定的表现是卫星持续“可见”载噪比也不低但伪距发生明显跳变甚至出现几十厘米到几米的阶跃。这个问题在GPS L1C、Galileo E1、BDS B1C这类BOC信号上都会出现尤其在天线有遮挡或者信号反射严重时副峰更容易被当成主峰。解决手段有两类。一类是接收机算法层面的采用Bump-Jump技术同时用Early和Late相关器检测主峰与副峰的幅度差当检测到峰值跳变时强制牵引回主峰。另一类是天线和安装层面的尽量保证天线相位中心位置没有强反射体天线下方加装抑径板能让多路径分量减少BOC信号的相关峰质量也会好很多。如果你在写自己的接收机软件遇到“假锁”问题建议在鉴相器输出端增加峰峰检测逻辑而不是盲目缩小环路带宽。5.4 多路径环境下怎么用信号特征判断可用性多路径是所有GNSS信号特征在工程中最让人头疼的问题。由于反射信号路径更长伪距会出现滞后载波相位也会发生畸变。现代接收机在输出观测量时通常会附带一个multipath indicator或“多路径估计”通道状态比如Android GnssLogger里的multipathIndicator字段0表示不存在、1表示存在、2表示未检测。拿到这个标志后你可以在后处理中过滤掉多路径严重的卫星而不是把所有卫星一锅炖。除了看软件标志也可以直接从C/N0和伪距变化率来判断。多路径信号往往伴随C/N0的快速波动以及伪距一阶差分出现高频抖动。你把同一颗卫星的C/N0时间序列画出来正常情况下应该平滑如果出现无规律的几dB起伏大概率是有反射信号。此时可以把该卫星从定位解算里剔除或者给它的观测权重设低。参考站环境下还可以用双差残差来识别多路径。总之信号特征里蕴含的信息远不止“能不能收到”还包括“收得好不好”“数据可不可信”。我在实际项目中最喜欢用的一个判断技巧是把L1/L5双频的伪距做差看电离层残差是否在合理范围内。如果L1和L5的伪距差出现缓慢漂移多半是硬件偏差如果出现剧烈跳变多半是信号被遮挡或者多路径影响。通过这种方式能快速定位是信号体制问题还是环境问题很多时候能帮你省下一下午的调试时间。信号特征这套东西越到后面越会发现它不是用来应付考试的而是解决实际定位问题的一把钥匙。