news 2026/10/21 9:02:28

GPS PPK瞬时潮位解算:强潮流区测深点潮位改正的工程实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GPS PPK瞬时潮位解算:强潮流区测深点潮位改正的工程实践

简介:这份PDF文献面向从事水下地形测量、海洋测绘与GNSS数据处理的技术人员及研究者,聚焦如何用GPS PPK技术精确获取测深点的瞬时潮位,以解决传统岸边验潮站潮汐模型在部分水域误差偏大的问题。全文围绕GPS天线大地高经垂直基准转换、姿态改正、动态吃水改正与小波变换波浪滤除的完整流程展开,并特别指出姿态角与旋转角的差异、压力式潮位计实时测吃水的必要性,最后以琼州海峡为试验区,将PPK潮位与传统潮汐模型结果对比,分析其与测船航向的相关性及区域潮汐特征。资源包为1个PDF文件,大小约4.35MB,内容完整、公式与实验数据齐全,适合作为系统开发与工程应用的参考文献。目前已有114人学习,可为潮位改正方案设计、算法实现与精度验证提供直接参考。

1. 为什么潮汐模型在强潮流区会翻车:一份 PPK 潮位论文拆出来的工程价值

在琼州海峡这种往复流强、东西口潮汐性质不一致的海区,用岸边验潮站加潮汐模型推算测深点潮位,经常会出现一个让人头疼的现象:模型给出的潮位曲线一路平滑上涨,但测船实际感受到的潮位却在某个航段掉头向下。这不是模型算错了,而是潮波传播时延、测船航向和强潮流叠加在一起,把传统水位改正的假设打穿了。手上这份《基于GPS PPK技术确定测深点瞬时潮位及分析》就是冲着这个问题来的——它用 GPS PPK 事后动态定位拿到天线大地高,再经过垂直基准转换、严密姿态改正、压力式潮位计动态吃水改正和小波变换波浪滤除,最终解算出测深点的瞬时潮位。适合做水下地形测量、多波束测深、无验潮水深测量的从业者精读,尤其是那些在强潮流区被潮位改正坑过的项目组。

2. GPS PPK 瞬时潮位的解算链路:从天线大地高到测深点潮位

2.1 基准面关系与核心公式

整套方法的物理链路可以用一个基准面关系图说清楚。GPS 天线的大地高记为 HG,天线到换能器与压力式潮位计所在平面的直线距离记为 L,基于 85 高程基准面的潮位记为 T,85 高程基准面到参考椭球面的距离记为 ζ,换能器的动态吃水记为 D,GPS 天线的 85 高程记为 h。测深点瞬时潮位的核心公式是:

T = h - L' + D

其中 L' 是 L 在竖直方向的投影长度,受船体姿态影响不是定值;D 由与换能器固连在同一平面上的压力式潮位计实时测量压力后转换得到;h 则通过测区周围已知控制点在 WGS84 和西安 80 两套坐标系下的坐标求解七参数后转换获得。

这个公式看起来简单,但每一项都有讲究。h 的获取依赖七参数转换精度,L' 的获取依赖姿态改正的严密程度,D 的获取依赖压力传感器的安装方式和伯努利效应的处理。三个环节任何一个出问题,最终潮位都会有厘米级甚至分米级的偏差。

2.2 姿态改正:为什么不能把姿态角直接当旋转角

这是论文里最容易被忽略但工程上最要命的一个细节。船体坐标系 VFS 下,姿态角由 MRU 输出。设 GPS 天线与换能器间的初始杆臂为 (x0, y0, L),在不考虑姿态角与旋转角差异时,受姿态影响的计算方式是:

[x, y, L']^T = R(r) * R(p) * [x0, y0, L]^T

其中 R(r) 是横摇旋转矩阵,R(p) 是纵摇旋转矩阵。横摇纵摇通常在 10° 以内,把姿态角直接当作旋转角,误差看起来不大,但严格意义上,在构成旋转矩阵时,旋转角应该是横摇和纵摇的函数。当先进行纵摇改正再进行横摇改正时,旋转角不再是横摇角 r,而应该是 r 和 p 的函数 r':

r' = arcsin(sin r / cos p)

将 r' 代入旋转矩阵进行严格姿态改正,才能得到更准确的 L'。论文引用的实验数据表明,横摇和纵摇引起的误差可以达到 5 cm,而且那还是在海面较为平静的条件下测的。海况恶劣时,这个误差还会增大。很多项目在平静水域用近似公式没出问题,一到开阔海域就发现潮位曲线抖动异常,根源往往就在这里。

2.3 动态吃水:压力式潮位计的安装要点

传统方法用实测统计或经验公式法计算测船动态下沉量,但实时测定不同航速下的动态吃水几乎不可能。论文的做法是用压力式潮位计实时测量换能器所在平面的压力,再转换为深度获得动态吃水 D。

这里有一个工程上容易翻车的细节:利用压力传感器测量多波束换能器动态吃水变化时,要考虑流体的伯努利效应。实际操作中,要在水下容器的进水端加盖一个分流罩,使得处于分流罩内的水下传感器容腔内流体运动速度接近于零,消除伯努利效应的影响。论文中的实验数据显示,在 A-D 段、B-C 段及 E-F 段船速分别为 1.393 m/s、4.150 m/s 和 1.435 m/s,中间一段与前后两端的船速差异较大,测船在测线之间转向过程中船速变化也较大,但船速造成的压力变化对测量的动态吃水影响较小,可以认为测船航行造成潮位计测量的动态吃水误差较小。

2.4 小波变换波浪滤除:分解层数怎么定

波浪的频率和潮汐的频率相差很大,一般波浪周期是 0.1~30 s,潮汐周期至少为 1 h 以上。根据频率特性,通过小波变换将信号分解为不同频率空间,然后根据潮汐信号所占有的低频空间将低频空间系数重组,就可以实现波浪滤除。

使用小波变换首先要确定原始采样序列对应的最高频率 ω。设原始采样时间长度为 T,采样个数为 N,采样频率为 fs,则:

ω = N / (2T) = fs / 2

假设波浪频率为 fw,潮汐频率为 ft,则小波剖分的层数由下式决定:

ft < ω / 2^n < fw

论文中数据采样频率为 5 Hz,采用 symlets 小波进行 6 次分解,将波浪误差滤除得到最终潮位。这个分解层数不是拍脑袋定的,而是根据采样频率和潮汐、波浪的频率边界算出来的。如果分解层数不够,波浪残余会留在潮位信号里;分解层数过多,潮汐信号的低频成分可能被误滤。

3. 从原始数据到潮位曲线:可复现的处理步骤与参数设置

3.1 PPK 解算与七参数转换

第一步是把测船流动站数据与基站数据一起进行 PPK 解算,获得流动站天线大地高 HG。PPK 是利用载波相位观测值进行事后处理的动态相对定位技术,在动态情况下 80 km 范围内平面位置精度可以达到 5 cm 以内,高程精度可以达到 10 cm 以内。

第二步是利用测区周围多个已知控制点在 WGS84 坐标和西安 80 坐标系下的两套坐标,使用 85 高程代替西安 80 坐标的大地高来求解空间转换七参数。检验七参数转换精度合格后,将流动站 GPS 坐标直接转换为西安 80 平面坐标和 85 高程 h。

这一步的工程要点在于控制点的选取和分布。控制点要均匀分布在测区周围,不能全部集中在一侧。七参数转换的残差要逐点检查,如果某个控制点的残差明显大于其他点,要么是这个点的坐标有问题,要么是它离测区太远导致外推精度下降。

3.2 姿态改正与动态吃水计算

第三步是姿态改正和动态吃水计算。经过姿态改正后,将压力式验潮仪记录的数据进行压力和深度转换,获得与测点位置对应的动态吃水 D。利用公式 T = h - L' + D 获得含有波浪误差的潮位 T。

姿态改正的计算流程可以写成如下伪代码:

# 输入:横摇角 r、纵摇角 p(单位:弧度),初始杆臂 (x0, y0, L) # 输出:姿态改正后的竖直方向长度 L_prime import numpy as np def attitude_correction(r, p, x0, y0, L): # 计算严密旋转角 r_prime = np.arcsin(np.sin(r) / np.cos(p)) # 构造横摇旋转矩阵 R_roll = np.array([ [1, 0, 0], [0, np.cos(r_prime), np.sin(r_prime)], [0, -np.sin(r_prime), np.cos(r_prime)] ]) # 构造纵摇旋转矩阵 R_pitch = np.array([ [np.cos(p), 0, -np.sin(p)], [0, 1, 0], [np.sin(p), 0, np.cos(p)] ]) # 杆臂向量 lever_arm = np.array([x0, y0, L]) # 姿态改正 corrected = R_roll @ R_pitch @ lever_arm # 返回竖直方向长度 return corrected[2]

这段代码的关键在于 r_prime 的计算。如果直接用 r 代替 r_prime,在横摇 10°、纵摇 5° 的情况下,L' 的差异大约在毫米级;但如果海况恶劣,横摇达到 15°~20°,这个差异就会上升到厘米级。对于追求厘米级潮位精度的项目,这个改正不能省。

3.3 小波变换波浪滤除的实现

第四步是小波变换波浪滤除。论文采用 symlets 小波进行 6 次分解。下面是一个用 Python 实现小波分解和低频重构的示例:

import pywt import numpy as np def wave_filter(tide_signal, wavelet='sym6', level=6): """ 对潮位信号进行小波变换波浪滤除 tide_signal: 原始潮位序列(含波浪误差) wavelet: 小波基,论文使用 symlets level: 分解层数,论文使用 6 层 """ # 小波分解 coeffs = pywt.wavedec(tide_signal, wavelet, level=level) # 将高频系数置零(保留最低频逼近系数) coeffs_filtered = [coeffs[0]] + [np.zeros_like(c) for c in coeffs[1:]] # 低频重构 tide_filtered = pywt.waverec(coeffs_filtered, wavelet) # 截取到原始长度 return tide_filtered[:len(tide_signal)]

参数说明:wavelet 选择 sym6 是因为 symlets 小波具有近似对称性,适合处理潮位这种非平稳信号;level=6 是根据采样频率 5 Hz 和潮汐、波浪频率边界计算得出的。如果采样频率改变,分解层数需要重新计算。比如采样频率降到 1 Hz,最高频率 ω 变为 0.5 Hz,分解层数可能需要调整到 4 或 5 层。

3.4 与传统潮汐模型的对比验证

论文在琼州海峡中部结合某工程进行实验验证,数据采集时间为 2010 年 5 月 30 日北京时间 9:15 AM 到 14:38 PM,采集频率 5 Hz,测线布设总体上为东西向。测区周围有海安、秀英两个长期验潮站和一个南港临时验潮站,三个站的潮位数据均基于 85 高程基准面。

潮汐模型采用基于三站的最小二乘拟合法。不同分潮的潮高比重会随时间变化,潮汐参数具有时变特征,所以采用 1 天的时段长度推算验潮站相互之间的潮时差、潮差比、基准面偏差三个潮汐参数:

TB(t) = γ_AB · TA(t + τ_AB) + ε_AB

其中 TA(t) 和 TB(t) 分别为 A 验潮站和 B 验潮站的潮位序列,γ_AB、τ_AB、ε_AB 分别为 A、B 两站的潮差比、潮时差、基准面偏差。理论上往返潮汐参数应该有 γ_AB = 1/γ_BA,τ_AB = -τ_BA,ε_AB = -ε_BA · γ_AB,但实际上潮波由诸多频率构成,观测潮位除潮汐成分外还有非潮汐因素影响,这些影响难以保证在验潮站之间具有同步性和一致性,所以式中的关系并不严格成立。论文中三个站之间的往返潮汐参数不符值均较小,潮时闭合差小于 6 分钟,满足规范要求。

4. 避坑与排查:PPK 潮位解算中最容易翻车的五个环节

4.1 潮位曲线与航向强相关,不是数据错了

现象:PPK 解算的潮位曲线在某个航段出现下降趋势,而潮汐模型推算的潮位一直在上升,两条曲线出现交点。

原因:这不是 PPK 解算错误,而是测船航向与涨潮流方向的关系导致的。在 A-B 段,测船航行方向与涨潮流方向相反,为顶潮流测量状态,潮波传播时延导致不同位置同一时刻潮位不同,沿 A-B 方向潮位逐渐升高。在 C-D 段,测船航行方向与涨潮流方向相同,为顺潮流测量状态,潮波引起的潮位增长比因位置不同引起的潮位下降幅度要小,两种因素综合效应导致整个过程中出现下降趋势。

解决:不要看到曲线下降就怀疑 PPK 解算有问题。先对照测线方向和潮流方向,判断这种下降是否符合潮波传播规律。论文中 A-D 段距离仅 100 m,A 点与 D 点的潮位差为 93 cm,与三个验潮站在该过程中的潮位差 91.63 cm、91.47 cm、93.72 cm 相符,说明 PPK 解算结果是可靠的。

4.2 姿态改正用了近似公式,平静水域没问题,开阔水域就翻车

现象:在近岸平静水域测试时潮位精度很好,到了开阔海域或海况较差时,潮位曲线出现异常抖动,滤波后仍然存在厘米级偏差。

原因:把姿态角直接当作旋转角,忽略了旋转角应为横摇和纵摇的函数这一事实。横摇纵摇在 10° 以内时误差较小,但海况恶劣时横摇可能达到 15°~20°,近似公式的误差会显著增大。

解决:严格按照 r' = arcsin(sin r / cos p) 计算严密旋转角,代入旋转矩阵进行姿态改正。这个改动在代码层面只是多一行计算,但对开阔水域的潮位精度提升明显。

4.3 压力式潮位计没加分流罩,船速变化时动态吃水测不准

现象:不同航速下动态吃水测量值差异异常,船速变化较大的测段潮位出现台阶状跳变。

原因:流体伯努利效应导致压力传感器容腔内流体运动速度不为零,船速变化时压力读数受到额外影响。

解决:在水下容器的进水端加盖分流罩,使处于分流罩内的水下传感器容腔内流体运动速度接近于零。论文中船速从 1.393 m/s 变到 4.150 m/s 再变到 1.435 m/s,动态吃水受船速影响较小,说明分流罩起到了作用。

4.4 小波分解层数拍脑袋定,波浪滤不干净或潮汐信号被误滤

现象:滤波后潮位曲线仍然有高频抖动,或者潮位曲线变得过于平滑,丢失了真实的潮汐变化细节。

原因:小波分解层数没有根据采样频率和潮汐、波浪频率边界计算,而是凭经验设定。

解决:先确定原始采样序列最高频率 ω = fs/2,再根据 ft < ω/2^n < fw 计算分解层数 n。论文中采样频率 5 Hz,ω = 2.5 Hz,波浪频率下限约 0.033 Hz,潮汐频率上限约 0.00028 Hz,计算得到 n=6 层。如果采样频率改变,必须重新计算。

4.5 七参数转换控制点分布不均,边缘区域潮位偏差大

现象:测区中心区域 PPK 潮位与验潮站对比吻合较好,但测区边缘区域偏差明显增大。

原因:七参数转换的控制点全部集中在测区一侧或中心,边缘区域属于外推,转换精度下降。

解决:控制点要均匀分布在测区周围,覆盖测区各个方向。转换完成后逐点检查残差,残差明显偏大的控制点要排查坐标问题或剔除。论文中使用测区周围多个已知控制点求解七参数,检验合格后才进行坐标转换,这个流程不能省。

5. 把 PPK 潮位用起来:从单点验证到区域潮汐特征分析

论文最后对琼州海峡的潮汐潮流特征进行了分析,这部分内容对于理解 PPK 潮位的实际价值很有帮助。太平洋潮波经吕宋海峡传入南海,在南海向西南传播,分出一支经东口进入琼州海峡,继续向西南传播的潮波经海峡西口进入北部湾。海峡东口主要受半日潮波影响,西口则受全日潮波影响,海峡自东向西存在不同的潮汐类型,由不规则半日潮逐渐变为规则全日潮。由于东西口不同位相和潮时的分潮从相反方向传入,这些分潮相互叠加,再加上地形影响,海峡潮流表现出一定的复杂性。

海峡东西两端水流入口处均呈喇叭状,水流的窄管效应明显,致使潮流流速为南海之最。海峡潮流呈显著的往复式运动,涨潮流为偏西向,落潮流为偏东向,涨潮历时一般为 13~14 h,落潮历时为 10~11 h,是以日潮流为主的强潮流区。夏季在测区三塘附近潮流运动方向为:涨潮指向 240°~250°,落潮方向指向 70°~80°,和地形基本保持一致。

整个测量过程为涨潮阶段,涨潮流沿粤西沿岸以西南方向流入测区。根据涨潮流传播方向以及三个验潮站所处的地理位置,理论上可认为海安站要比南港站、秀英站潮汐相位提前,而南港站和秀英站都在海峡南岸且相距不远,潮汐相位应该相近。实测结果由表 1 可知,海安站比南港站潮位提前 12.6 min,比秀英站潮位提前 14.7 min,与实测结果相符。

在 A-B 段,测船航行方向与涨潮流方向相反,为顶潮流测量状态,涨潮流从 B 流至 A。由于潮波传播时延,不同位置在同一时刻的潮位不同,在同一时刻潮位沿 A-B 方向应该逐渐升高。测线起始点 A 位于海安站的西南方向,理论上 A 点潮位应该低于海安站潮位,随着船沿测线往东偏北方向航行,由于位置和时间的不同,潮位会逐渐上升,且在最靠近海安站的位置处与海安站潮位最接近,随后继续升高。实测结果为 A 点潮位低于海安站潮位,且在最接近海安站时(A-B 段的中间时刻)与海安站潮位重合,然后潮位继续上升至与秀英站潮位接近,与理论分析结果相符。

在 C-D 段,测船航行方向与涨潮流方向相同,为顺潮流测量状态,涨潮流从 C 点流至 D 点。由于潮波传播时延,在同一时刻沿 C-D 方向不同位置处的潮位应该逐渐降低,但此时在每一点处的潮位实际还是在上升的,只是测船处于运动状态,船速虽然比潮波的传播速度慢,但是潮波引起的潮位增长比因位置不同引起的潮位下降幅度要小,因此两种因素的综合效应在整个过程中出现下降趋势,且在最靠近海安站的位置(C-D 中间时刻)处与海安站潮位最接近,然后往西南方向测量潮位继续下降。实测结果在 C-D 段与上述描述相符。

E-F 段和 A-B 段相同,只是由于潮位增长速度变缓,致使 PPK 解算潮位增长也出现变缓的趋势。在 A-D 段,A 与 D 点距离很小,仅 100 m,故可以将 A 点与 D 点的潮位差近似为同一点在不同时刻的潮位差,经计算得到潮位差为 93 cm。同样可以得到海安站、南港站、秀英站三个验潮站在该过程中的潮位差分别为 91.63 cm、91.47 cm、93.72 cm,与 PPK 得到的潮位差相符。

这些分析结果说明,GPS PPK 在航潮位测量能够真实反映潮位变化的时空特征,能够给出不同位置、不同时刻的潮位,有效避免了在潮汐性质复杂、强潮流区利用潮汐模型推算潮位带来的模型误差。利用压力式潮位计获得的测船动态吃水能够准确测量不同船型在不同船速下真实的动态吃水值,在后续数据处理过程中减少了工作量。利用 MRU 输出的姿态参数进行更为严密的姿态改正,能够进一步提高姿态改正的精度。

从那以后我每次处理强潮流区的测深数据,都会先把测线方向和潮流方向叠在一张图上,再对照 PPK 潮位曲线看趋势是否合理,这个习惯帮我省掉了好几次误判数据质量的后悔药。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 9:02:13

Bash数组完全指南:从索引数组到关联数组实战

写Bash脚本写得多了&#xff0c;你会发现一个尴尬的事实&#xff1a;很多人用Bash小半年&#xff0c;处理数据还在靠一堆零散的临时变量和重复代码硬扛。等到字段一多、数据一杂&#xff0c;脚本就膨胀得没法看&#xff0c;改一处错三处。数组就是用来终结这种混乱的。这篇内容…

作者头像 李华
网站建设 2026/10/21 9:02:12

Apollo控制模块Windows独立编译与CarSim联合仿真实战

先说点实在的。做自动驾驶控制算法的人&#xff0c;大概率都遇到过这个窘境&#xff1a;实车测试成本高、周期长&#xff0c;纯软件仿真又总觉得隔了一层&#xff0c;车辆动力学不够真实。后来圈子里慢慢流行起一套组合——把Apollo的控制模块和CarSim车辆动力学模型联合起来跑…

作者头像 李华
网站建设 2026/10/21 9:02:06

C++异常处理从原理到实战:栈展开、RAII与noexcept深度解析

1. 别再说异常处理只是“try-catch”了很多刚入门的C开发者觉得异常处理就是写个try、catch、throw&#xff0c;把可能出错的地方包起来就完事了。我见过太多项目里&#xff0c;开发者把整个函数体塞进try块&#xff0c;然后catch(...)一接&#xff0c;空转一下&#xff0c;假装…

作者头像 李华
网站建设 2026/10/21 9:02:04

智能体编排模式详解:从任务分解到结果聚合的工程实践

最近在梳理手头一个多智能体协作系统时&#xff0c;又被同事问到一个老问题&#xff1a;为什么不能把任务一股脑丢给一个大模型&#xff0c;非要拆成好几个智能体&#xff0c;还得设计它们怎么配合&#xff1f;每次被问到这个问题&#xff0c;我都得从“编排干什么用”开始讲。…

作者头像 李华
网站建设 2026/10/21 9:00:43

AIDC液冷技术解析:MCCP微通道冷板与MCL整体式液冷盖怎么选

AIDC&#xff08;AI数据中心&#xff09;这两年最热的话题已经从"算力多少P"悄悄变成了"散热怎么压"。单颗AI芯片的热设计功耗&#xff0c;从早几年的300W一路飙到700W、1000W&#xff0c;规划中的下一代方案甚至奔着2000W去了。风冷在这个密度下真的扛不住…

作者头像 李华
网站建设 2026/10/21 9:00:42

航天型号研制项目管理成熟度模型:五级评估与Python实现

简介&#xff1a;这份PDF文档聚焦航天型号研制项目场景下的项目管理成熟度模型研究&#xff0c;面向航天科研院所的项目管理人员、PMO从业者及项目管理方向的研究生&#xff0c;帮助解决航天项目在生命周期阶段与管理活动上区别于一般项目、难以用通用标准评估管理能力的问题。…

作者头像 李华