☰
GLONASS信号处理全链路解析:从FDMA体制到频间偏差校正
2026/10/17 1:35:07 网站建设 项目流程

GLONASS信号处理的教程和资料,不像GPS那样遍地都是。很多人上手多系统接收机时,默认把GPS那套捕获、跟踪、观测量提取的流程照搬过来,结果在GLONASS这条链路上栽跟头——首星捕获慢、环路失锁、伪距跳变、定位精度始终差几十米。问题根源往往就一个字:频。GLONASS是目前主流GNSS里唯一把**频分多址(FDMA)**作为主力信号体制的系统,每颗卫星独占一个载波频率,这个设计贯穿了从射频前端到定位解算的每一个环节,也让它的信号处理流程比GPS整整多出一维。这篇文章我按实际调试接收机的经验,把GLONASS从天线输入到位置输出的完整处理链路梳理一遍,重点讲清那些和GPS/北斗不同的关键步骤,以及每个环节最容易踩的坑,适合正在做多系统接收机、或者想独立评估GLONASS信号的工程师和研究生参考。

1. GLONASS信号体制:为什么说它是一套"非主流"设计

1.1 FDMA与CDMA的本质差异

先看最底层。GPS、北斗、Galileo都采用码分多址(CDMA):所有卫星共用同一个载波频率,靠不同的伪随机码区分。GLONASS的传统信号则采用频分多址(FDMA):每颗卫星不仅有不同的伪码,还占有一个独立的载波频率。

在L1频段,GLONASS的中心频率为1602 MHz,相邻卫星间的频率间隔是0.5625 MHz,频道号k的范围是-7到+6。某颗卫星的实际载波频率就是:

f_L1 = 1602 + 0.5625 × k (MHz)

类似地,L2频段的表达式为1246 + 0.4375 × k MHz。也就是说,当你捕获一颗GLONASS卫星前,它的中心频率本身就是一个未知量。这跟GPS那种"所有卫星都是1575.42 MHz"的假设完全不同,也是后面所有处理差异的第一源头。

1.2 码率与导航电文:参数看着相似,物理含义差一倍

GLONASS的民用C/A码码长是511 chip,码率0.511 Mcps,码周期正好1毫秒。而GPS的C/A码码长1023 chip,码率1.023 Mcps,码周期同样是1毫秒。看似只是码长和码率同时减半,但在工程上有一层容易被忽略的含义:一个码片(chip)的持续时间变长了。

GPS一个chip约0.978微秒,GLONASS一个chip约1.957微秒。在做接收机跟踪环路时,相关器间距通常以chip为单位设置,比如0.5 chip、1 chip。同样的间距值,对应到时间轴上GLONASS比GPS宽了一倍。这不是说GLONASS码环更好或更差,而是意味着码环的伪距噪声性能、对多径的敏感度都会发生变化。后面在跟踪环路部分我再细说。

导航电文方面,GLONASS民用电文速率也是50 bit/s,一个字符串持续2秒,一个超帧包含5帧、每帧15个字符串,完整超帧时长约2.5分钟。它把卫星健康状态、星历参数、时间标志等放在不同字符串中广播,格式上与GPS差别很大。接收机在解电文时需要单独实现GLONASS电文解析器,不能直接复用GPS的流程。

1.3 频点规划给接收机前端提出的实际要求

对于多系统接收机来说,GLONASS频点规划带来的直接影响是射频带宽必须加宽。L1频段GLONASS频道号从-7到+6,加上多普勒范围,实际射频信号可能分布在1602±4 MHz甚至更宽的范围。而GPS L1只有1575.42 MHz一个点。一个覆盖GPS L1和GLONASS L1的前端滤波器,通带通常得从1559 MHz扩到1606 MHz左右。

带宽加宽有两个代价:第一,带外噪声功率增加,ADC的量化噪声底抬高;第二,射频滤波器的群时延特性在通带边缘会发生明显变化,而GLONASS边缘频道的信号正好落在这个区域。这意味着不同频道的信号经过射频链路后,延迟不完全一致。这个不一致最终会成为伪距里的常值偏差,也就是后文要重点处理的频间偏差(IFB)。

2. 信号捕获:一场在频率和码相位间展开的搜索战

2.1 搜索空间比GPS多了一个维度

GPS捕获时,本地频率通常只在1575.42 MHz附近按多普勒范围扫描,再加上码相位的搜索,是个二维问题。GLONASS则必须把"未知的中心频率"也纳入搜索,于是变成三维:频道号(或对应的频率偏移)、多普勒、码相位。

更准确地说,GLONASS的捕获频率搜索范围是:

本地试验频率 = 1602 + 0.5625 × k + 多普勒估计值

如果冷启动时没有任何星历和历书,接收机不知道哪些卫星在视场内,更不知道每颗卫星占用哪个频道号,那就得把整个频道表-7到+6都扫一遍。这个计算量比GPS冷启动大不少。

2.2 频率步进与相干积分时间的取舍

捕获过程中,本地频率的搜索步进通常取相干积分时间倒数的二分之一(部分实现取三分之一或四分之一)。如果相干积分时间取1毫秒,频率步进可取500 Hz到1 kHz。这个区间内,信号能量的损耗可以控制在可接受范围。

GLONASS的码周期也是1毫秒,所以GPS常用的那些捕获算法框架(比如循环相关、基于FFT的码相位搜索)都能直接沿用到GLONASS。但有一点要特别注意:GLONASS电文同样存在20毫秒的比特跳变,相干积分超过2毫秒就会面临比特翻转问题。处理方式与GPS一致,可以采用半比特方法或利用已知比特辅助,但必须在GLONASS自己的电文帧格式里找到比特边界。

2.3 捕获成功判定中容易出现的"幽灵频点"

我调试GLONASS捕获时遇到过一个典型现象:搜索频谱上能看到一个清晰的峰值,但转入跟踪后环路几毫秒内就失锁。打印捕获峰值对应的本地频率,再和预测频率做差,发现偏差已经超过合理多普勒范围。问题出在接收机把频道号判断错了——真实卫星可能在频道k=+4,捕获峰值却在k=+3的试验频率上被检测到,两边的中间频率恰好和实际信号频率接近。

所以捕获成功之后的验证步骤不能省:先记录捕获峰值的载波频率和码相位,再根据已有星历计算该PRN的预计多普勒,两者做差,落在合理范围内才允许转入跟踪。如果没有先验信息,就把搜索网格加密一档,宁可多算一点也不能误判。

2.4 冷启动时的实用捕获策略

有先验信息时的做法是:根据概略位置和历书,先算出可见卫星的高度角和方位角,筛掉低仰角卫星;再为每一颗可见卫星生成它对应频道号的频率搜索集合。这样一来,搜索空间被压缩到"已知频道号+有限多普勒范围",计算量能降一半以上。我实测下来,用这个策略做冷启动,首颗星的TTFF能明显缩短,虽然不同场景差异很大,但整体趋势是比全频道暴力扫描快很多。

如果完全没有先验信息,建议分两轮搜。第一轮用较短的相干积分(比如1毫秒)把码相位和粗略频率找出来,目的是快速锁定"哪颗星可能在视场";第二轮再针对候选卫星做更精细的频率估计。这种"粗扫+精扫"的思路,比一次性用高分辨率扫完整个搜索空间要划算得多。

3. 跟踪环路:稳定守住的码相位与载波相位

3.1 码环和载波环的协同关系

跟踪环路的结构在GPS和GLONASS之间没有本质区别:**码环(DLL)**通过早迟相关器维持本地码和输入码的相位对齐,**载波环(PLL/FLL)**维持本地载波和输入载波的相位或频率对齐。两个环路相互耦合,载波环提供的精确多普勒信息帮助码环平滑,码环的相位误差又反馈到载波环辅助。

GLONASS的码率只有0.511 Mcps,一个chip持续时间约1.957微秒。如果采用相同的相关器间距(比如0.5 chip),GLONASS相关器在时间轴上的实际间隔是GPS的两倍,这会让码环对多径的抑制特性发生变化:长延迟多径对GLONASS的影响相对弱一些,但短延迟多径可能更麻烦。实际调试时,我建议把GLONASS的码环带宽适当收窄一点,比如GPS常用1 Hz,GLONASS可以从0.5 Hz起步,根据C/N0动态调整。

3.2 每颗卫星的中频残留频率都不同

这是GLONASS跟踪环节最容易被GPS惯性思维带偏的地方。GPS所有卫星共用同一个载波,经过下变频后,各通道的中频标称值完全一样,环路NCO只需在小范围内修正多普勒。GLONASS则不同,每颗卫星经过下变频后的标称中频与该卫星的频道号、接收机本振配置都有关,通道频率各不相同。

设计GLONASS跟踪通道时,需要为每个通道单独维护一个"标称中频偏移量",初始化为该卫星频道号对应的频偏,再叠加多普勒。如果沿用GPS的实现方式,所有通道共用一个统一的标称中频,环路会在一开始就存在几百千赫兹的频率误差,跟踪自然失败。这个细节在模块化软件接收机里尤其常见,整体框架没问题,但通道初始化参数少算了一个频道项。

3.3 邻频干扰:GLONASS特有的信号质量问题

L1相邻频点只差0.5625 MHz。卫星运动带来的多普勒可达几千赫兹,可能让两颗卫星的实际接收频率进一步靠近,甚至出现重叠。射频前端如果只做了一次很粗略的滤波,相邻频道的强信号会成为当前通道的带内干扰。

邻频干扰的表现形式是:某颗卫星的C/N0出现周期性跌落,载波相位噪声增大,甚至在低仰角时环路失锁。处理手段有三层。第一层是在射频/中频端把信道带宽控制在一个合理范围,比如GLONASS L1单系统可以收到4 MHz左右;第二层是在基带做陷波或自适应滤波,把落在相邻频道的强信号压下去;第三层是在环路层面提高载波环的带宽或改用二阶环,避免强干扰造成相位跳变。前两层属于预防,第三层是补救。

3.4 周跳检测在GLONASS里的特殊注意点

载波相位观测量的连续性对高精度定位至关重要。周跳检测常用到无几何组合或多普勒积分法,但GLONASS在这些方法上有个额外麻烦:不同频率的载波相位观测值之间存在由频间偏差引起的常值偏置。

如果直接用无几何组合(比如L1和L2相位差)来检测周跳,这个常数偏置会被当作误差源,检测门限不好设,小周跳可能被淹没。我的做法是:先通过一段静态数据估计出各通道的频间偏差常数,再用修正后的组合量做周跳检测;对单频用户,优先使用相位-伪距组合加上多普勒积分辅助。这样在GLONASS上检测小周跳的可靠性会高不少。

4. 观测量生成与误差修正:把"粗"伪距变成"准"伪距

4.1 码伪距与载波相位观测量的生成

码伪距来自码环的相位估计,本质上是本地码和卫星码的时间对齐误差乘以光速。由于GLONASS码率较低,码伪距的理论噪声精度会比GPS略差,这个在性能预算里要提前考虑。载波相位观测量则由载波环的整周计数和瞬时相位两部分组成,其精度不受码率影响,可以达到毫米级到厘米级。

观测量的时间戳必须一致。GPS依靠导航电文中的周内时(TOW)来对齐,GLONASS没有完全等价的强对齐机制,各通道观测量之间可能存在毫秒级的时间偏差。工程上是把它们统统标记到接收机本地钟的同一时刻,再在定位解算时对每颗卫星的标称时间差异做修正,或者先做观测量内插对齐。前者实现简单,后者精度更高,两者我都试过,如果接收机动态不大,内插不是必须的,但高动态场景下必须处理。

4.2 频间偏差(IFB):GLONASS最让新手头痛的一项

频间偏差这个话题每个做GLONASS的人都绕不开。它的来源是接收机自身:射频滤波器、放大器、ADC驱动电路对不同频率信号的电气延迟并不完全一致。对GPS来说所有卫星同一频率,这项偏差被统一吸收进接收机钟差;但GLONASS各卫星频率不同,这条"共享的延迟曲线"就变成了随频道号变化的伪距偏置。

处理IFB有三种常见路径。第一种是出厂标定:用可调频的信号模拟器逐个频道注入信号,测出每个频道的相对延迟,做成校准表存在固件里。第二种是在线估计:把IFB当作未知参数放进定位解算中,和钟差一起解,代价是自由度增加,DOP会略变差。第三种是事后提取:利用双频消电离层组合数据反推IFB,适合后处理软件。早期没有模拟器的时候,我用的是第二种,效果可接受,但前提是参与解算的卫星数量要足够,一般要求8颗以上才稳。

4.3 电离层修正:逐颗卫星算频率,而不是用一个统一值

电离层延迟和频率的平方成反比。GPS单频用户做Klobuchar模型修正时,全场统一用L1频率代入公式;GLONASS用户如果也照抄,把每颗卫星都当成1602 MHz来处理,会在频道号跨度大的场景下产生分米级的修正误差。

正确做法是:对每一颗GLONASS卫星,先根据它的频道号算出真实载波频率,再把这个频率代入电离层模型。这需要接收机在生成观测量时,就把该通道的载波频率作为元数据一并保存下来,而不是只存一个"GLONASS L1"的类型标签。对流层延迟与频率无关,按照高度角和气象参数建模即可,这部分GPS和GLONASS的处理完全一致。

4.4 地球自转改正与坐标基准统一

伪距测量时,卫星信号从发射到接收这几十毫秒内,地球自转导致接收机在地心地固系里的位置发生了微小的平移,这就是Sagnac效应。所有GNSS系统都需要做这项改正,GLONASS也不例外,改正量与伪距和站星位置有关,公式在各类教材里都能找到,直接套用即可。

坐标基准则要留意:GLONASS广播星历用的是PZ-90坐标框架,GPS用的是WGS-84,两者之间存在平移和微小旋转差异。对一般单点定位来说,这个差异带来的误差在厘米级,很多场景可以忽略;但在多系统联合处理和精密测量场景就要显式转换。我的做法是在软件里内置一套PZ-90与WGS-84的转换参数,处理和输出时统一转换到与GPS相同的框架,避免后续混用数据时出现系统偏差。

5. 定位解算:坐标系统、时钟偏差与频间偏差如何一起处理

5.1 单GLONASS定位的基本观测方程

记第i颗GLONASS卫星的伪距观测值为ρ_i,那么:

ρ_i = ||r_sat_i - r_rec|| + c·(δt_rec - δt_sat_i) + I_i + T_i + ε_i

其中||r_sat_i - r_rec||是站星几何距离,δt_rec是接收机钟差,δt_sat_i是卫星钟差(由导航电文给出),I_i和T_i是电离层和对流层延迟。单GLONASS系统解算时,所有卫星共享同一个接收机钟差,因此至少需要4颗星才能解出位置三维坐标加一个钟差。

这里有一个细节:GLONASS广播星历中的卫星钟差参数,其参考是卫星实际发送信号的频率。也就是说,钟差项已经包含了"该卫星具体频率上的发射端延迟",接收机端不需要再额外调整。这与GPS星历处理存在微妙差别,但对于只读星历的用户来说,两者的处理方式其实是一样的——直接应用星历中的钟差参数即可。

5.2 多系统组合:系统间偏差与频道分组的折中

GPS和GLONASS联合定位时,两个系统的时间基准不同,伪距观测方程里至少要添加一个**系统间偏差(ISB)**参数。简单的做法是把它当作一个常数未知量估计,复杂一点可以做随机游走。ISB估计对GPS+GLONASS组合定位的精度影响很大,尤其是在混合观测数量不均衡的情况下。

当GLONASS也参与解算时,问题又回到IFB。如果接收机没有对IFB做标定,定位软件会把IFB合并进ISB里,导致整个系统的误差增大。折中方案是:在定位解算中把GLONASS卫星按频道号分成若干组,比如相邻两个频道一组,每组独立估计一个ISB。分组的代价是参数增多,需要更多观测才能稳定。卫星数量少的时候,我见过有人直接退化成不分组的单ISB方案——精度波动大一点,但至少不发散。具体分组数量要在实际中权衡,没有万能的配置。

5.3 多普勒测速:别忘了每颗卫星的真实波长不同

利用多普勒观测值测速时,径向速度的计算需要用到载波波长。GPS统一用L1波长,GLONASS则必须逐颗卫星计算:波长λ_i = c / f_i,f_i是该卫星的真实频率。如果软件里只存了一个GLONASS L1标称值,测速结果会出现每秒零点几米到几米的偏差,视频道号而定。

这只是个"多乘一个系数"的问题,但是由于GPS处理流程里这个系数是常量,很多人重构多系统代码时会漏掉。排查思路很直接:把单点定位算出的位置差分速度和多普勒解算的速度做对比,如果GLONASS单星参与时速度始终带一个随卫星变化的偏差,基本就是频率项没写对。

5.4 观测量输出与分发格式

观测量输出到上位机或后处理软件时,格式会影响后续所有处理。RINEX 2.x对GLONASS的频率信息记录不完整,解析多频数据时容易丢失频道号上的频率标记。RINEX 3.03以上版本对GLONASS信号标记更完善,在交换双频GLONASS数据时建议优先使用RINEX 3.x。如果只能用RINEX 2.x,那至少要在自定义扩展字段里保留频道号,否则下游做精密解算的人拿不到频率信息,IFB根本没法定量计算。

6. 实测排错:GLONASS接收机故障的几个排查切口

6.1 先看四个基础指标,判断问题落在哪一段

拿到一套GLONASS接收机或自研信号处理链路,我不会急着改代码,而是先抓四个指标做定位:

  • 各通道C/N0一致性:正常情况下GLONASS各通道载噪比应在35~50 dB-Hz范围。如果某个频道号普遍比其他频道低5 dB以上,多半是射频滤波器在频带边缘衰减过大,属于前端问题。
  • 伪距残差:做完定位解算后看各颗星的伪距残差。若某个特定频道号的卫星残差系统性偏大,高度指向IFB未校准。
  • 载波相位周跳率:接收机静置半小时,统计各通道周跳次数。理想应该是0,如果频繁出现,检查环路带宽和邻频干扰。
  • 定位连续性:看位置输出是否有周期性跳变或短时中断,跳到下一层去查跟踪状态切换。

这四个指标组合起来,基本能把问题范围缩小到射频前端、捕获、跟踪、解算中的某一个环节。

6.2 冷启动首颗星捕获慢的排查

如果冷启动捕获第一颗GLONASS卫星的时间明显过长,优先检查两处。第一处是频率搜索步进,步进大于2 kHz时会漏掉部分信号能量,建议拿1毫秒相干积分对应的整数分之一来设。第二处是频道号与本地频率的映射表是否正确,很多软件从历书提取频道号的逻辑写错了,导致本地生成的全是错误频率,自然搜不到。

排查时可以把捕获检测到的峰值频率打印出来,和星历推算的预测频率做差。差值得不到合理解释时,不要怀疑天空,先怀疑频道表。

6.3 定位跳变与观测量阶跃的关系

定位突然跳变几十米又恢复正常,这类问题在GLONASS接收机上并不少见,而且多数原因在跟踪通道管理,不在解算算法。典型场景是这样:一颗卫星信号弱到临界,资源调度器把它从旧通道重新分配到新通道。如果旧通道的观测量没有及时作废,新通道的观测量已经开始产生,两者会在某一刻混进同一组定位解算,伪距瞬间出现阶跃。

解决思路是:通道重新分配时,先把旧通道标记为无效,等待几个历元后再启用新通道;同时利用多普勒和伪距的连续性检测,在两个通道交替时做一次平滑过渡。这也是我在实际调试中踩过的坑,当时排了很久,最后发现是调度逻辑少了一个"置无效"操作。

6.4 模拟器是最省力的验证工具

调试GLONASS信号处理,强烈建议准备一台支持GLONASS FDMA信号的星座模拟器。模拟器的价值在于场景可重复:你可以设置静态环境,设定某几颗卫星的载噪比,甚至注入一个已知的邻频干扰,然后观察接收机每个环节的输出。真实环境受多径、遮挡和天气影响,问题复现和对比都很困难,模拟器能把变量控制在一个,效率高很多。

没有模拟器时,退而求其次用静态户外数据+已知基准点做后处理,也能定位一部分问题,但排错周期会长不少。

6.5 多系统对比能快速暴露GLONASS链路的拖累

评估GPS+GLONASS联合定位的整体表现时,不要只看联合输出,还要分别记录单GPS、单GLONASS的独立定位结果。如果单GPS表现良好,联合解精度反而变差,问题大概率出在系统间偏差估计或GLONASS伪距质量上。我用这个办法排查过多次:联合解标准差偏大,切换到单GLONASS看到某个固定频道号残差始终偏正,顺着这个方向才找到IFB校准表里漏了一个频道。

调GLONASS这一年多下来,最大的体会是别拿GPS的思维去套它。频道号、FDMA、IFB、坐标框架差异,这一串看似细碎的点,任何一步偷懒都会在定位结果上现形。如果你手里正有一个"始终差几十米"的GLONASS问题,优先检查射频带宽和IFB校准这两项——我遇到的案例里,十有八九出在这两个地方。希望这篇流程梳理,能帮你省掉我当初反复排错所花的时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询