(7月最新版!)深度剖析测绘程序设计大赛试题:GNSS 多星多频数据预处理与质量检测
前言
hello呀我的老铁们,本篇是小编第三次针对GNSS这道赛题的,经过更深入理解学习之后的成果分享。小编选择保留前两篇而不是在其基础上重新编辑,是因为前两篇都有其各自的特色,一个详细介绍了本赛题的核心处理逻辑,一个对本赛题的实现方案进行了简化革新。而且,这三篇,也是小编的一个升级打怪之路的印证。(下面的链接,就是这两篇的内容,大家感兴趣也欢迎移步,大家的支持,就是小编的创作动力!)👇 已于6.6更新)深度剖析测绘程序设计大赛试题:GNSS 多星多频数据预处理与质量检测(2025国赛选题二) 简易实现测绘程序设计大赛试题:GNSS 多星多频数据预处理与质量检测(2025国赛选题二)
本篇与前两篇的不同之处,一方面是小编的水准,一方面是小编对本赛题的理解程度,还有也是最重要的一方面,就是本篇将针对本赛题的三大核心处理模块中,各个模块所涉及到的常用常见算法(非一种),进行全面介绍和实现,以保证若抽到本题,无论他们用什么算法来实现,各位都能够淡定应对。
为了照顾不曾了解或者没有太多时间去再看这前两篇文章的家人,本次全文依旧从选题介绍出发,首先介绍2025六大选题方向,给出本赛题的题目要求;然后针对本题进行全面详细的分析;在第三部分给出C#实现方案;最后一部分,对本篇进行总结,也是小编的废话区哈哈。
OK话不多说,就让我们开始!
一、2025国赛选题
(一)2025六大选题
//源自官方文件

(二)本题要求
单 / 双 / 三频相位周跳探测、伪距多路径误差估算、相位平滑伪距。
二、本题超详析⭐
//这一部分的结构如下:首先从数据、参数含义和我们要实现什么功能三方面,向大家介绍整体情况;然后按照以下顺序对本题进行剖析:周跳探测原理与算法详析--多路径探测原理与算法详析--相位平滑伪距原理与算法详析。(算法部分,小编会尽可能用简单通俗的方式来展开,但可能会在一些部分因为小编水平的局限而出现错误,家人们多多批评指教,有好的想法和思路欢迎在评论区讨论,小编会认真评估并予以答复!)(而且要写在最前面,比赛前会下发试题册,按照往年套路,试题册中一定会给出各个算法的各步处理的公式的,到时候直接硬带也OK的,不理解各个参数的原理,that is no matter!)
(一)整体介绍
- 数据(基于RINEX 格式)
- 头部分(Header):记录测站和观测的基本信息。文件开头到
END OF HEADER的内容,主要告诉我们 “谁、在什么时间、用什么设备、观测了哪些卫星”:(关于数据的介绍就是基于已经同本文绑定的.txt数据,家人有需自取。)
-
数据部分:每个卫星的具体观测值:头部分之后是实际观测数据,按卫星分组(比如
G01、G02、C01),每组包含该卫星在不同时间的观测值。
- 头部分(Header):记录测站和观测的基本信息。文件开头到
-
重点参数含义
L1/L2:L1 和 L2 频段的载波相位观测值(单位:周,整数 + 小数部分,精度极高,是 GNSS 定位的核心数据)。P1/P2:L1 和 L2 频段的伪距观测值(单位:米,是卫星到接收机的距离观测值,噪声较大但无整周模糊度)。SNR1/SNR2:L1 和 L2 频段的信噪比(单位:dB-Hz,反映信号强度,值越高信号越稳定)。
- 功能任务
- 读取原始数据
- 周跳检测:找载波相位里的 “计数中断”,避免错误数据影响定位。
- 多路径检测:识别 “信号回声” 导致的误差,标记不可靠数据。
- 相位平滑伪距:用高精度的相位修正低精度的伪距,得到更优的观测值。
-
质量检测:这部分见名知意,就是借助一些手段或评估指标,基于原始数据和我们处理后的精准值,来判断这次接收机获取到的数据的质量。
(二)周跳检测原理与实现算法
1. 什么是 “周跳”?
载波相位观测的本质是 “接收机计数卫星信号的载波周期数”。比如卫星信号的载波频率是 1.5GHz(L1 频段),意味着 1 秒内有 15 亿个周期,接收机需要精确记录 “从信号锁定开始到当前时刻,一共收到了多少个完整周期(整周数)+ 不足一个周期的小数部分”。但如果信号被遮挡(比如过隧道、被大树挡了一下)、接收机短暂断电,或者信号太弱,接收机会 “暂时失忆”——突然漏记或多记了几百甚至几千个整周数,这种整周数的突变就叫 “周跳。
比如文件里G01卫星在 10:10:00 的注释写着 “# G01 周跳 + 1”,意思是这里的 L1 相位整周数突然多了 1 周,属于周跳。
我们进行周跳检测,就是找出存在周跳的数据,要么修正,要么弃用。
2. 周跳处理三大算法(核心处理方法&步骤)
-
MW 组合法:把两种观测值(相位和伪距)“组合” 起来,得到一个几乎不受 “整周模糊度” 影响的稳定值。如果这个值突然跳变,就说明发生了周跳。
-
计算 MW 组合值(Nw)
-
相位转距离:
-
L = 周数 × 波长(固定值)
-
-
组合相位和伪距
-


-
Lw = 相位组合 - 伪距组合(这么一减,相位的 “整周模糊度” 就被抵消了,剩下的是一个稳定的小值)
-
-
转成周数 Nw
-
Nw = Lw / 等效波长(就是两个频段波长差)
-
-
-
确定 “正常波动范围”
- 滑动平均值:类似 “平滑曲线”,把 Nw 的小波动平均掉,得到一个稳定的趋势值(比如 5.0)。
- 滑动方差:衡量 Nw 的波动程度(比如正常波动在 ±0.2 内,方差就小;波动大,方差就大)。
-
判断周跳
-
用 “3 倍标准差” 作为阈值(标准差是方差的平方根,反映正常波动范围),如果某个时刻的 Nw 与滑动平均值的差超过 3 倍标准差,说明它偏离正常范围太远,就是周跳。
-
-
-
GF 组合法:先消除卫星到接收机的 “几何距离”(这部分是我们要测的,但会干扰周跳检测),剩下的主要是 “电离层误差”。电离层误差(信号穿过大气层时的延迟)随时间缓慢变化(比如几小时内慢慢变),正常情况下应该是平滑曲线;如果突然跳变,就是周跳。
-
相位的 GF 组合(LI):消除几何距离后的核心变量
-
LI = (L1相位 × L1波长) - (L2相位 × L2波长)(家人们只需要知道,相位距离计算的公式中包含很多误差项,GF的关键就是利用相位差来消除部分干扰项,只保留了正常情况下要么变化缓慢(I1−I2),要么就是常数(λ1N1−λ2N2)的项。不用强行理解,就知道第一步就是计算这玩意儿,在本篇代码部分会给出这块的实现)
-
-
拟合 LI 的趋势(消除电离层(I1−I2)的缓慢变化)
-
用多项式(代码中为 2 阶多项式)拟合 LI 随时间的变化趋势,得到 “理论上的 LI 值”(无周跳时的理想值):fitLI(t)=C0+C1⋅t+C2⋅t2 (其中t是时间索引(0,1,2,...),C0,1,2是多项式系数(由最小二乘拟合得到))
-
-
计算残差的变化量(核心判断指标)
-
残差定义为 “实际 LI 与拟合趋势的偏差”:残差(t)=LI(t)−fitLI(t无周跳时,残差应围绕 0 小幅波动;若发生周跳,残差会突变。
-
(一般阈值设置:4 倍等效波长(λI),残差绝对值大于4λ,标记为周跳)
-
-
-
二次差分法:连续计算相位观测值的 “差分的差分”(类似加速度),正常情况下这个值很小,如果突然变大,就是周跳。(这个就简单了,就像看车速表,正常慢慢加速,突然猛踩油门就是问题!)
-
提取载波相位观测值
-
计算二阶差分(代码部分有算法的程序实现)
-
-
周跳判断(依旧用阈值法)
- 二阶差分法通过计算载波相位的二阶变化量,利用 “正常平稳、周跳突变” 的特性实现周跳检测的,比起GF,步骤真的很简答优雅。
-
(三)多路径效应检测原理与实现算法
1. 什么是 “多路径效应”?
卫星信号是无线电波,正常情况下应该 “直线到达接收机”(直射信号)。但如果周围有建筑物、地面、水面,信号会被反射(比如地面反射、大楼反射),形成 “反射信号”—— 这些反射信号会和直射信号一起被接收机接收,导致观测值出现误差,这就是 “多路径效应”。
2. 多路径效应处理三大算法
//这三种算法各有优缺点,在实际中,通常会结合三种方法的结果:比如 “残差大 + SNR 低 + 波动剧烈”,就几乎可以确定有严重的多路径干扰。
- 看相位和伪距的残差:正常情况下,经过修正的 “相位数据” 和经过修正的 “伪距数据” 应该很接近(差距很小)。但如果有多路径干扰,会让相位测量不准(就算修正了,两者差距还是很大),导致两者的差距突然变大 —— 这个差距就是 “残差”,残差越大,干扰越严重。
- 计算残差:各个频段修正后的相位距离 - 伪距距离(注意保证单位都是m)
-
对 L1 频段:
residualL1 = 修正后的L1相位距离 - L1伪距距离 -
对 L2 频段:
residualL2 = 修正后的L2相位距离 - L2伪距距离
-
-
如果残差的绝对值超过一个设定的 “阈值”(比如 L1 频段阈值设为 1 米,L2 设为 1.5 米),就认为这个时间点受到了多路径干扰。
- 计算残差:各个频段修正后的相位距离 - 伪距距离(注意保证单位都是m)
- 看信噪比(SNR):简单理解为 “有用信号” 和 “无用噪音” 的比例。SNR 越高,信号越清晰(噪音少);SNR 越低,信号越模糊(噪音多)。多路径会导致信号不稳定,信噪比(SNR1、SNR2)会突然降低(比如从 45 降到 30),所以低 SNR 的观测值可能受多路径影响。
- 多路径干扰本质是 “无用的反射信号”,属于 “噪音”。当 SNR 很低时(有用信号弱),一点点多路径干扰都会显得特别明显,就像在安静的房间里,小声说话也能听清,而在嘈杂的菜市场,大声说话可能都听不清 —— 低 SNR 时,干扰的影响被放大了。
- 步骤很简单:
- 设定一个 “低信噪比阈值”
- 如果L1/L2任意一个频段的SNR低于阈值,我们就认为这个时间点的信号可能受到了多路径干扰。
- (这个就是纯纯的估计了,我们是基于“低SNR ==> 易受干扰”这个知识,所以就简单粗暴的只看它SNR高低,来判断这条数据受到多路径干扰的“可能性”,相比于上一个方法,这个只能说是一种更粗糙的估计)
- 看残差的波动:多路径干扰不是稳定的(反射信号的强度会随接收机位置、障碍物角度变化),所以它导致的 “残差”(第一个方法里算的那个差距)会忽大忽小,像坐过山车一样 “波动剧烈”,而正常情况下观测的残差应该平稳波动。故以此为指标,若其突然上下跳变(比如从 0.1 米跳到 0.8 米),可能是多路径。
- 滑动窗口:想象一个 “小框”,框住连续的几个数据点(比如 5 个),然后把框慢慢向右移,每次移一个点,逐个分析每个框内的数据。(比如窗口大小 = 5 时,先看第 1-5 个数据,再看第 2-6 个,再看第 3-7 个)
- 标准差:用来衡量数据的 “波动程度”。标准差越大,说明数据忽高忽低越厉害(波动剧烈);标准差越小,说明数据越稳定。(对每个窗口,计算里面残差的标准差)
- 如果窗口内的标准差超过 “阈值的一半”(因为标准差反映的是整体波动,比单次残差更敏感),就认为这个窗口对应的时间点有干扰。
(四)伪距平滑处理原理与实现算法
1.相位平滑伪距
用相位的高精度 “修正” 伪距的低精度。(就是给带噪音的数据” 做美容,让它们变得更光滑、更可靠。)
2. 平滑处理三大算法
-
指数平滑法(简化版本卡尔曼滤波法):给历史数据分配不同的权重,越近的数据权重越大。
-
当前平滑值 = 上一次平滑值 × α + 当前原始值 × (1-α)-
α就是权重系数,0-1,越大表示历史数据权重越高,平滑效果越好,但是对新变化反应就不敏感。
- 两个细节:
- 周跳处理:如果当前数据有周跳(突变),直接把平滑值设为当前原始值(因为周跳会让历史数据 “失效”)。
- 初始值:第一个数据点的平滑值就是它自己(因为没有历史数据)。
-
-
-
滑动窗口平均法:拿股票来说,想象你在看股票走势图,曲线波动很大,很难看出趋势。这时你可以用一个 “小窗口”。
-
当前平滑值 = 窗口内所有有效数据的平均值 -
滑动,就是说你这个窗口会按照时间“移动”。平均,就是说每一次你的取值,就是这个窗口中值的平均值。
-
-
考虑周跳修复的平滑处理:载波相位数据有个特殊问题:周跳会导致相位值突然跳变(比如从 1000 周突然变成 995 周)。如果直接用前面两种方法平滑,会把这个 “错误跳变” 也平滑进去,导致后续所有数据都错。所以,遇到周跳时,要先 “修复” 这个跳变,再继续平滑。就像你在画一条平滑的曲线,突然遇到一个断点,你得先把断点 “接好”,再继续画。
-
当前平滑值 = 上一次平滑值 × α + 当前原始值 × (1-α) -
和指数平滑法公式是一样的,但是请注意区别:如果当前点有周跳,直接把平滑值设为当前原始值(相当于 “重启” 平滑过程)。如果无周跳,正常平滑。
-
这个方法是针对相位的平滑,目的在于,为多路径效应提供一个更精准的相位数据,注意与前两种方法的平滑对象做区分。(其实放到多路径效应板块更容易理解,但是因为这三类都是实现的平滑处理,所以还是决定放一起。)
-
三、C#完整实现
(一)窗体设计
- 和地图图幅处理那篇的风格一样,小编可能在之后的试题研究文章中都会沿用这个风格哈哈。

(二)数据结构设计
//小编知道可以直接上代码,但是因为行数真的真的真的太多了哈哈,图片还是要更好一些的。

(三)数据管理器设计


(四)周跳检测实现
- MW

- GF

- 二次差分

(五)多路径效应检测实现
- 相位伪距残差

- 信噪比

- 残差波动

(六)相位平滑伪距实现
- 指数

- 滑动窗口平均

- 考虑周跳修复

四、唠唠叨叨
- 哈哈,这篇文章确实有些长,看到这里真的辛苦家人们!
- 本篇其实预计在昨天就是可以完成的,但是因为昨天下午受到了一些紧急通知需要我去处理,晚上处理好之后又接到了家里那边的一些小意外,昨天真的是小编最难熬的一天哈哈,是在今天凌晨两三点才感觉有点困哈哈。上午依旧在处理意外,一整个上午都是在路上,在打电话,在和各种人沟通哈哈哈,小编真的是一边崩溃一边告诉自己必须绷住,不是崩溃的时候哈哈。
- 今天中午处理好了能控制的那部分,然后我知道这件事已经耽搁不短了,这过去的一些时间,受到了很多家人们给我的私信,给我的鼓励和支持,给我的莫大的信任,我不能辜负大家,我早点做完,大家就能早点有一个参考,一些我自己发现不了的问题我们也能一起探讨,一起进步。
- 行文至此,小编想说的,依旧是感谢各位过去一路的陪伴和支持,由于小编水平和能力有限,以上介绍到的所有内容,如有差错还望大家批评指教。
- 感谢大家的支持!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐




所有评论(0)