ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

多波束数据处理与潮汐改正:CARIS实战与精度评价

多波束数据处理与潮汐改正:CARIS实战与精度评价 简介这份PDF文献《多波束数据处理及潮汐影响改正》面向海洋测绘、海底地形调查及数据处理方向的科研人员与工程技术人员聚焦多波束测深数据内业处理中的参数校正、声速改正、潮汐改正与噪声数据处理等关键环节并重点比较两种潮汐改正方式对成图精度的影响。资源包内含1个PDF文件大小约7.4MB内容源自正式期刊论文包含南海某海域实测数据的处理流程与精度评价可帮助读者理解CARIS HIPS and SIPS软件包的实际应用思路掌握曲面滤波、精度评价等操作要点并获取潮汐数据预报能否满足处理精度要求的结论参考。目前已有253人学习适合作为海洋测绘数据处理的学习资料与参考文献。1. 多波束数据处理及潮汐影响改正从原始条带到可用海底地形跑过南海浅水区多波束的同行大概都有体会外业采集回来的原始条带数据打开一看密密麻麻全是噪点边缘波束像炸了毛一样往外翻明明用的是厘米级标称精度的 EM710s成图之后主测线和联络测线的交点水深却对不上。问题往往不在设备本身而在内业处理这条链路上——参数校正没做干净、声速剖面用错层、潮汐改正方式选错任何一个环节翻车最终地形图都会出现规律性的“笑脸”或“哭脸”甚至相邻测线之间直接错开一个台阶。这份《多波束数据处理及潮汐影响改正》来自中国地质调查局海口海洋地质调查中心发表在《交通科技与经济》2021 年第 2 期核心是用 CARIS HIPS and SIPS V8.1 走完南海某海域实测多波束数据的内业处理全流程重点对比了实测潮汐和预报潮汐两种改正方式对成图精度的影响。适合正在做多波束内业处理、需要写精度评价报告、或者纠结潮汐数据到底用实测还是预报的海洋测绘从业者。下面按我拆这篇论文的路径把参数校正、声速改正、潮汐改正、噪声滤波和精度评价逐段拆开讲。2. 参数校正与声速改正换能器偏差和声速剖面怎么落到 CARIS 里2.1 纵摇、横摇、艏向三个安装偏差的校正逻辑多波束换能器装在船底理论上应该和船体坐标系严格对齐但实际安装总会有微小夹角。换能器与船舶艏艉线纵向的夹角叫纵摇偏差Pitch与船舶横向垂直方向的夹角叫横摇偏差Roll指向与船舶航向的夹角叫艏向偏差Yaw。这三个偏差不校正条带边缘会系统性翘起或扭曲而且这种误差是随航向变化的不是简单加个常数能补回来的。论文里的做法是作业前先做一次参数校正把测得的偏差值输入系统作业过程中发现部分航次数据质量异常又做了一次校正。两次参数对比如下校正阶段Pitch offsetRoll offsetYaw offset初始校正1.020.03-0.71二次校正-0.66-0.040.00注意 Roll offset 从 0.03 变到 -0.04变化量只有 0.07 度但成图质量整体有提升。这说明横摇偏差对地形的影响非常敏感哪怕零点几度的残差在深水区条带边缘也会放大成可观的深度误差。Yaw offset 从 -0.71 归到 0.00说明初始校正时艏向偏差没测准二次校正才收敛。在 CARIS HIPS and SIPS 里参数校正的入口在 Vessel Configuration 里具体操作路径是打开 Vessel Editor → 选择对应的换能器 → 在 Offsets 标签页填入 Pitch、Roll、Yaw 三个值 → 保存后重新应用。我一般会建议在 Patch Test 之后先跑一条短测线验证确认条带边缘没有明显翘曲再批量处理。提示参数校正不是一劳永逸的。换能器拆装、船舶加载变化、甚至燃油消耗导致吃水变化都可能让偏差值漂移。论文里两次校正间隔不长说明作业期间的复查很有必要。2.2 声速改正折射系数调整与“笑脸”噪声的消除声速改正是多波束处理里最容易被低估的环节。声速在水中的传播速度随温度、盐度、压力变化不同声速层会导致声波路径弯曲最终在条带上表现为边缘波束的深度偏差。论文里提到测区东部存在严重的声速误差表现为规律性“笑脸”形状——中间浅、两边深像一张笑脸。这种“笑脸”是典型的声速剖面偏大导致的实际声速比设定值小声波向下弯曲边缘波束打到更远的地方深度被高估。反过来如果声速剖面偏小会出现“哭脸”。论文里的处理方式是调整折射系数在 CARIS 里对应的是 Sound Velocity Correction 模块可以导入实测声速剖面SVP 文件也可以手动调整折射系数做快速修正。# CARIS HIPS 声速改正的典型操作流程命令行示意 # 1. 导入声速剖面文件 caris_import_svp --input ./svp_20200810.csv --format csv --vessel EM710s # 2. 对指定测线应用声速改正 caris_apply_svp --line 20200810_001 --svp svp_20200810 --method refraction # 3. 检查改正后的条带边缘质量 caris_qc_edge --line 20200810_001 --tolerance 0.5 --output qc_report.txt上面这段命令是示意性的实际 CARIS 的批处理更多通过 GUI 的 Process Wizard 完成但底层逻辑一样先导入声速剖面再对每条测线应用改正最后检查边缘波束的残差。参数上--tolerance 0.5表示边缘波束深度残差超过 0.5 米就标记为异常这个值可以根据水深调整浅水区可以收紧到 0.2 米。论文里用的是 Kongsberg EM710s这款系统的工作频率在 70-100 kHz对声速剖面的敏感度比深水多波束更高。我自己的经验是浅水区声速剖面最好每 2-4 小时更新一次深水区可以放宽到 6-8 小时但跨越温跃层时必须加密。3. 潮汐改正实测与预报两种方式怎么选、怎么切3.1 验潮仪实测数据与潮汐预报数据的获取路径潮汐改正是把多波束测得的瞬时水深归算到统一深度基准面的关键步骤。论文里提到根据 DZ/T 0292-2016 规范水深大于 200 米的资料可以不进行潮汐改正但作业区绝大部分水深小于 200 米所以必须做。论文里的潮汐数据有两个来源一是在作业区投放两个验潮仪每次采集 10 天数据经内业计算得到实测潮汐改正数据二是通过潮汐预报软件获得预报潮汐数据。两组数据对比后发现8 月 10 日、12 日、16 日三天的实测数据与预报数据差异较大需要逐日分析用哪组。具体操作上验潮仪的数据处理一般包括潮位数据导出 → 去除异常值 → 计算相对于深度基准面的潮高 → 生成 CARIS 可读的潮汐改正文件通常是 .tid 或 .csv 格式。预报潮汐数据则直接从潮汐预报模型导出格式类似。# 验潮仪数据处理与潮汐改正文件生成的简化脚本 import pandas as pd import numpy as np # 读取验潮仪原始数据 tide_raw pd.read_csv(tide_gauge_20200810.csv, parse_dates[datetime]) tide_raw.columns [datetime, water_level] # 去除异常值超过 3 倍标准差的点 mean tide_raw[water_level].mean() std tide_raw[water_level].std() tide_clean tide_raw[np.abs(tide_raw[water_level] - mean) 3 * std].copy() # 计算相对于深度基准面的潮高假设基准面在平均海平面下 1.2 米 tide_clean[tide_correction] tide_clean[water_level] - 1.2 # 输出 CARIS 可读的潮汐改正文件 tide_clean[[datetime, tide_correction]].to_csv( tide_correction_20200810.csv, indexFalse, headerFalse ) print(f有效潮汐记录数{len(tide_clean)}潮高范围{tide_clean[tide_correction].min():.2f} ~ {tide_clean[tide_correction].max():.2f} 米)这段脚本的核心逻辑是先读验潮仪原始数据用 3 倍标准差剔除异常值然后把水位值减去深度基准面到平均海平面的距离得到潮汐改正值。参数上1.2是深度基准面的位置这个值必须从当地潮汐基准面资料里查不能随便设。输出格式是两列时间和潮高CARIS 导入时按这个格式解析。3.2 实测与预报潮汐的对比哪天用哪组数据论文里最核心的发现是不是所有测线都适合用实测潮汐也不是所有测线都适合用预报潮汐。8 月 10 日的数据实测潮汐边缘拼接比预报潮汐好所以用实测8 月 12 日的数据实测潮汐边缘明显错开预报潮汐拼接更好所以用预报8 月 16 日的数据实测潮汐拼接好预报潮汐束显错位所以用实测。为什么会出现这种情况论文里查了 8 月 12-13 日的实测潮汐数据发现数据明显存在一段时间的异常。也就是说验潮仪本身可能出了问题——可能是仪器故障、可能是投放位置受地形影响、也可能是数据采集期间有船只经过干扰。这种情况下预报潮汐反而更可靠。我自己的经验是验潮仪数据在投放初期和回收前期最容易出问题中间稳定期数据质量最好。所以如果作业周期长建议在验潮仪数据里标注出稳定期和可疑期可疑期的测线优先用预报潮汐。注意预报潮汐的精度取决于预报模型的本地化程度。论文里用的预报数据能满足精度要求但不代表所有海域的预报潮汐都能直接用。如果作业区潮差大、地形复杂预报模型的误差可能超过 0.3 米这时候必须用实测数据。3.3 潮汐改正的 CARIS 操作与参数设置在 CARIS HIPS and SIPS 里潮汐改正的入口在 Merge 阶段。具体步骤是先加载潮汐改正文件然后选择要应用的测线最后执行 Merge。CARIS 支持两种潮汐改正模式离散潮位站模式和潮汐模型模式。离散潮位站模式就是导入验潮仪的实测数据潮汐模型模式则是用内置或外部的预报模型。# CARIS 潮汐改正的典型命令示意 # 加载实测潮汐数据 caris_load_tide --file tide_correction_20200810.csv --format csv --station SG01 # 对指定测线应用潮汐改正 caris_apply_tide --line 20200810_001 --station SG01 --method discrete # 如果要用预报潮汐切换到模型模式 caris_apply_tide --line 20200812_001 --model TPXO9 --method predicted参数上--station SG01是验潮站编号--method discrete表示用离散实测数据--model TPXO9是预报模型名称。实际 CARIS 里这些是通过 GUI 配置的但理解底层参数有助于排查问题——比如如果潮汐改正后水深还是不对可以先检查潮汐文件的时间戳和测线时间是否对齐再检查基准面设置是否正确。论文里最终采用的是实测与预报结合的方式8 月 10 日、16 日用实测8 月 12 日用预报。这种混合策略比全部用实测或全部用预报的精度都高交点不符值相对误差小于 2.0% 的比例达到 99.7155%比全部用实测的 99.2353% 高了 0.48 个百分点。4. 噪声处理与曲面滤波两次滤波怎么把噪点干掉又不伤地形4.1 测线滤波边缘波束的取舍多波束原始数据里的噪声来源很多环境噪声、仪器噪声、人为操作噪声浅水区尤其明显。论文里把噪声编辑分为三步手动编辑、测线滤波、曲面滤波。测线滤波是根据设定的滤波参数逐条、逐个条幅地滤除异常点主要用于删除边缘波束和明显的异常点。但边缘波束不能一刀切全滤掉。论文里提到如果设定滤波参数时把边缘波束全滤了不同测线之间会出现空洞因为相邻测线的覆盖范围本来就有重叠边缘波束虽然质量差但也是有效覆盖的一部分。所以论文里的做法是不滤边缘波束只把左右相邻波束的斜率角限制在 20 度以内。这个 20 度是怎么来的斜率角限制的意思是如果相邻两个波束之间的地形斜率超过 20 度就认为是异常突变标记为噪声。这个值可以根据地形调整——平坦海底可以收紧到 15 度起伏大的区域可以放宽到 25 度。但太宽会漏掉噪声太紧会误杀真实地形。# 测线滤波的斜率角计算逻辑简化版 import numpy as np def slope_filter(depths, beam_spacing, max_slope_deg20): depths: 波束深度数组 beam_spacing: 波束间距米 max_slope_deg: 最大允许斜率角度 max_slope np.tan(np.radians(max_slope_deg)) filtered depths.copy() for i in range(1, len(depths)): slope abs(depths[i] - depths[i-1]) / beam_spacing if slope max_slope: filtered[i] np.nan # 标记为噪声 return filtered # 示例波束间距 0.5 米深度序列 depths np.array([50.0, 50.2, 50.1, 55.0, 50.3, 50.2]) result slope_filter(depths, beam_spacing0.5, max_slope_deg20) print(滤波后深度, result) # 输出滤波后深度 [50. 50.2 50.1 nan 50.3 50.2]这段代码演示了斜率角滤波的核心逻辑计算相邻波束的深度变化率超过阈值就标记为 NaN。参数beam_spacing是波束在地面的投影间距这个值随水深变化浅水区小、深水区大所以实际处理时通常按水深分段设置。max_slope_deg20就是论文里用的值。4.2 曲面滤波两次滤波的网格间距与标准差设置曲面滤波比测线滤波更高级它不是简单看相邻波束而是构建一个曲面然后计算每个点到曲面的距离超过置信度阈值的点被滤除。曲面滤波效果的两个关键因素是置信度参数和曲面网格间距。论文里的做法是两次滤波第一次用大网格间距20 米和较大标准差2构建曲面滤除明显的异常点第二次用小网格间距5 米和较小标准差0.16构建曲面精细滤除残余噪声。两次滤波的效果对比在论文里有图第一次滤波后大噪点没了但还有一些小噪点第二次滤波后小噪点也清了地形细节保留得不错。为什么不能一次滤波搞定因为网格间距和标准差是一对矛盾网格间距大曲面平滑小噪点会被当成有效信号保留网格间距小曲面对噪声敏感真实地形也可能被误滤。两次滤波相当于先粗后精第一次把大噪声干掉第二次在干净数据上做精细滤波。滤波次数网格间距标准差主要目标第一次20 m2滤除明显异常点第二次5 m0.16精细滤除残余噪声在 CARIS 里曲面滤波对应的是 CUBE 算法Combined Uncertainty and Bathymetry Estimator。CUBE 的参数设置里Grid Resolution就是网格间距Standard Deviation就是标准差Confidence Level是置信度。论文里没有明确写置信度值但根据标准差 2 和 0.16 的配置置信度应该在 95% 左右。提示CUBE 滤波不是万能的。如果原始数据噪声太多CUBE 会把噪声当成真实地形生成一个“假曲面”然后所有点都围绕这个假曲面分布滤波就失效了。所以论文里强调先做测线滤波把大噪声干掉再上 CUBE。5. 精度评价与避坑交点不符值怎么算、哪些坑最容易翻车5.1 交点不符值的计算与规范要求精度评价的核心指标是交点不符值。主测线和联络测线交叉交叉点的水深应该一致不一致的程度就是交点不符值。论文里的计算方法是先按水深分段网格化10-100 米水深用 2m×2m 分辨率90-300 米用 4m×4m280-1500 米用 10m×10m然后对每个网格化文件执行求交运算最后按公式计算相对误差。公式是2 × |Z1 - Z2| / (Z1 Z2) × 100%其中 Z1 是主测线水深Z2 是联络测线水深。这个公式算的是相对误差比绝对误差更能反映数据质量因为深水区绝对误差大是正常的但相对误差应该控制在合理范围内。论文里的结果是采用实测与预报结合的方式99.7155% 的交点不符值相对误差小于 2.0%96.0067% 的交点不符值小于规范要求的 0.6 米。全部用实测潮汐的话这两个数字分别是 99.2353% 和 95.7414%。差距看起来不大但在大规模测线里0.48 个百分点意味着几千个交点的质量差异。# 交点不符值计算的简化实现 import numpy as np def compute_crossing_error(main_line_depths, cross_line_depths): main_line_depths: 主测线交点水深数组 cross_line_depths: 联络测线交点水深数组 z1 np.array(main_line_depths) z2 np.array(cross_line_depths) # 相对误差公式 relative_error 2 * np.abs(z1 - z2) / (z1 z2) * 100 # 绝对误差 absolute_error np.abs(z1 - z2) # 统计 pct_relative_lt_2 np.mean(relative_error 2.0) * 100 pct_absolute_lt_06 np.mean(absolute_error 0.6) * 100 return { 相对误差2.0%的比例: f{pct_relative_lt_2:.4f}%, 绝对误差0.6m的比例: f{pct_absolute_lt_06:.4f}%, 平均相对误差: f{relative_error.mean():.4f}%, 最大相对误差: f{relative_error.max():.4f}% } # 示例数据 main [50.2, 55.1, 60.3, 45.8, 70.2] cross [50.1, 55.3, 60.1, 45.9, 70.5] result compute_crossing_error(main, cross) for k, v in result.items(): print(f{k}: {v})这段代码可以直接套用到自己的数据上。参数上main_line_depths和cross_line_depths是交点处的水深值需要先从 CARIS 里导出交点报告然后按测线配对。实际项目中交点数量可能上万用这个脚本批量算比手动统计快得多。5.2 避坑多波束内业处理里最容易翻车的五个点现象一参数校正后条带边缘还是翘。原因Patch Test 的测线方向不对或者校正时用的测线太短偏差值没收敛。解决Patch Test 要跑“井字形”测线每条线至少 200 米而且要在平坦海底做避免地形起伏干扰。现象二声速改正后“笑脸”变成“哭脸”。原因声速剖面用反了或者折射系数调过头。解决先检查声速剖面的时间和位置是否匹配测线再检查折射系数的正负号。CARIS 里声速改正有“应用”和“回滚”功能可以反复试。现象三潮汐改正后相邻测线错开一个台阶。原因潮汐文件的时间戳和测线时间没对齐或者基准面设置不一致。解决检查潮汐文件的时间格式UTC 还是本地时间检查深度基准面是否统一。论文里 8 月 12 日的数据就是这个问题最后用预报潮汐解决的。现象四曲面滤波后地形出现“阶梯”。原因网格间距太大曲面太平滑真实地形被滤掉了。解决减小网格间距或者降低标准差。论文里第二次滤波用 5 米网格和 0.16 标准差就是为了保留地形细节。现象五交点不符值统计出来很差但成图看起来没问题。原因交点配对错了或者网格化分辨率不对。解决检查交点报告里的测线编号是否配对检查网格化分辨率是否符合规范要求论文里按水深分了 2m、4m、10m 三档。6. 从论文到项目把潮汐改正策略落到自己的作业流程里论文最后给出的结论是预报潮汐能够满足项目对水深精度的要求同时可以节约作业成本。但这句话有个前提——预报潮汐的精度取决于预报模型的本地化程度。如果作业区有实测潮汐数据我一般会建议至少做一次对比分析确认预报数据在作业区的误差范围再决定是否全用预报。具体操作上我会在项目开始前做三件事第一在作业区投放至少一个验潮仪采集至少 15 天数据覆盖一个大潮小潮周期第二用验潮仪数据校验预报模型计算预报潮汐和实测潮汐的差值如果差值超过 0.2 米就标记为“预报不可靠区”第三在 CARIS 里建立两套潮汐改正方案实测方案和预报方案对每条测线分别应用然后对比交点不符值选优者。这套流程比论文里的“逐日分析”更系统化但核心逻辑一样潮汐改正不是选一个方式就完事而是要针对每条测线、每个时间段做质量评估。论文里 8 月 10 日、12 日、16 日三天的数据用了不同的潮汐改正方式说明作者也是逐日判断的。还有一个容易被忽略的点潮汐改正的精度评价不能只看交点不符值还要看潮汐改正本身的误差。验潮仪的测量误差一般在 1-2 厘米预报模型的误差可能在 10-30 厘米这两个误差会传递到最终水深里。如果潮汐改正误差是 20 厘米交点不符值小于 0.6 米的比例再高也不能说明数据质量好——因为误差被潮汐改正“吸收”了一部分。从那以后我每次做多波束内业处理都会在潮汐改正前先画一张“潮汐改正量时间序列图”把实测和预报的差值可视化差值超过阈值的时段直接标记为“优先用实测”。这个习惯帮我避免了好几次因为验潮仪数据异常导致的成图错误。希望帮到你。本文还有配套的精品资源点击获取
返回列表