4. 坐标系统与速度分量转换

ADCP 测到的原始量是沿各波束方向的径向速度,而海洋学研究和数据产品需要的是东、北、垂直三个方向的速度分量。这中间要经过三级坐标转换:波束坐标 → 仪器坐标 → 地球坐标。理解每一级的几何含义和实现方式,是判断速度数据是否可信的前提。本节按转换链条逐级展开,并说明磁偏角与姿态校正的接入位置。

三级坐标系的定义与约定

先统一符号约定,全文及图示保持一致。波束坐标(beam)用 b₁…b₄ 表示四个换能器波束方向,RDI 常规 4 波束 Janus 配置下,波束 1、2 位于仪器 x 轴两侧,波束 3、4 位于 y 轴两侧,各波束与仪器 z 轴(换能器轴向)夹角为 20°。仪器坐标(instrument)用 x、y、z 表示,x 指向仪器标记方向,z 沿换能器轴向向上(或向下,取决于安装朝向)。地球坐标(earth)用 E、N、U 表示,E 为正东、N 为正北、U 为垂直向上,这是右手系,垂直速度向上为正。

需要特别强调:不同厂商、不同固件对“向上为正”还是“向下为正”的约定可能不同。RDI 的 PD0 数据中垂直速度通常以向上为正,而部分国产设备或后处理软件可能采用向下为正。整条处理链必须锁定一种约定,否则垂直速度符号会整体翻转,而这种错误在水平流速上完全看不出来。

波束坐标到仪器坐标:几何矩阵

四个波束的径向速度 b 与仪器坐标速度 (x, y, z) 之间是线性关系,由波束倾角 θ(Janus 配置为 20°)决定。标准转换矩阵为:

| x |       |  1     0    -1     0  |   | b1 |
| y |  = K · |  0     1     0    -1  | · | b2 |
| z |       |  1     1     1     1  |   | b3 |
                                          | b4 |

其中 K = 1 / (2·sinθ),θ = 20° 时 K ≈ 1.4619

这个矩阵的物理含义很直观:x 分量由波束 1 与波束 3 的差决定(两者在 x 方向投影相反),y 分量由波束 2 与波束 4 的差决定,z 分量由四波束之和决定。因此当某个波束失效时,x 或 y 分量会直接缺失,而 z 分量仍可由剩余波束部分估计——这也是为什么单波束故障时数据质量标志会显著降级。

实现时要注意:矩阵求逆的前提是四波束都有效。若某波束被标记为坏值(如 RDI 的 -32768),必须先剔除该剖面或该单元,不能直接代入矩阵,否则会得到量级异常的伪速度。实际代码中通常先做有效性掩膜,再对有效单元批量矩阵乘。

仪器坐标到地球坐标:姿态与磁偏角

仪器坐标到地球坐标的转换由三个姿态角和一个磁偏角共同决定。三个姿态角是横摇(roll,绕 x 轴)、纵摇(pitch,绕 y 轴)、航向(heading,绕 z 轴),由 ADCP 内置的倾斜计和磁罗经测得。转换关系可写为:

V_earth = R_heading · R_pitch · R_roll · V_instrument

R_roll  = 绕 x 轴旋转 roll
R_pitch = 绕 y 轴旋转 pitch
R_heading = 绕 z 轴旋转 (heading + 磁偏角)

磁偏角(magnetic declination)是磁北与真北之间的夹角,随地理位置和年份变化。ADCP 磁罗经测的是相对磁北的航向,要得到相对真北的东向、北向速度,必须把磁偏角加到航向上。例如某海域磁偏角为 -6°(磁北偏西),则真航向 = 磁航向 + (-6°)。磁偏角符号约定必须与数据源一致,否则东向速度会出现系统性偏差,且偏差量随航向变化,表现为一种“旋转”型误差而非固定偏移。

姿态校正的必要性可以用一个典型场景说明:假设仪器安装倾斜 5°,若忽略纵摇直接使用,水平速度会被错误地“泄漏”到垂直分量,垂直速度出现与水平流速相关的伪信号;同时水平流速幅值被低估约 cos(5°) ≈ 0.4%,方向也发生偏转。对于走航观测,船体横摇可达 ±10°,不校正的姿态误差会直接污染垂向速度,影响上升流、沉降通量等弱信号的分析。

判断姿态数据是否可信的快速方法:检查 roll、pitch 是否在安装后保持稳定的小幅波动;若 heading 在仪器静止时持续漂移,说明磁罗经受船体磁性干扰,需要重新校准或改用外部罗经。

转换链的实现与验证

把三级转换串起来,完整处理链是:原始波束速度 → 有效性检查 → 波束到仪器矩阵 → 姿态旋转矩阵(含磁偏角)→ 地球坐标速度。每一步都应保留中间结果,便于排障时定位误差来源。

验证转换是否正确,最直接的办法是做“闭合检查”:把地球坐标速度用逆矩阵转回仪器坐标,再转回波束坐标,与原始波束速度比对,残差应在数值精度范围内(例如小于 1 mm/s)。另一个实用检查是看垂直速度的统计特性:在水平均匀流场中,正确转换后的垂向速度应接近零均值、小幅波动;若垂向速度与水平速度幅值高度相关,往往说明姿态角符号或旋转顺序有误。

下面给出一个可参考的 Python 实现片段,展示矩阵构造与批量转换的关键写法(示例参数,非实测):

import numpy as np

theta = np.deg2rad(20.0)
K = 1.0 / (2.0 * np.sin(theta))

def beam_to_instrument(b):
    # b: (n, 4)
    x = K * (b[:,0] - b[:,2])
    y = K * (b[:,1] - b[:,3])
    z = K * (b[:,0] + b[:,1] + b[:,2] + b[:,3])
    return np.column_stack([x, y, z])

def instrument_to_earth(v, roll, pitch, heading, decl):
    r, p, h = np.deg2rad(roll), np.deg2rad(pitch), np.deg2rad(heading + decl)
    Rr = np.array([[1,0,0],[0,np.cos(r),-np.sin(r)],[0,np.sin(r),np.cos(r)]])
    Rp = np.array([[np.cos(p),0,np.sin(p)],[0,1,0],[-np.sin(p),0,np.cos(p)]])
    Rh = np.array([[np.cos(h),-np.sin(h),0],[np.sin(h),np.cos(h),0],[0,0,1]])
    R = Rh @ Rp @ Rr
    return v @ R.T

注意旋转顺序:先 roll、再 pitch、最后 heading,与多数 ADCP 厂商文档一致。若顺序颠倒,在大角度姿态下结果会有可察觉差异。磁偏角在代码中直接加到 heading 上,符号必须与数据源约定核对。

ADCP 三级坐标转换链与校正接入点 波束坐标 (b₁…b₄) 径向速度,20° 倾角 矩阵 K 仪器坐标 (x, y, z) x z y 相对仪器壳体 姿态旋转 地球坐标 (E, N, U) E U N 真北、正东、向上 姿态角 roll / pitch / heading 磁偏角 decl 磁北 → 真北修正 有效性掩膜 剔除坏波束 / 坏单元 转换正确性验证 ① 闭合检查:地球→仪器→波束,残差 < 1 mm/s ② 垂向速度应零均值、与水平流速弱相关 ③ 静止时 heading 不漂移 ④ 符号约定:U 向上为正,全文一致

常见错误与排障要点

实际处理中最容易出问题的不是矩阵本身,而是约定和符号。第一类错误是磁偏角符号反了,表现为东向速度整体偏移,且偏移量随航向呈正弦变化;第二类错误是旋转顺序颠倒,在小角度下几乎看不出来,但横摇超过 8° 后垂向速度出现明显伪信号;第三类错误是垂直速度正负号约定不统一,导致上升流被误判为下降流。排障时建议先固定一个已知姿态的静态测试剖面,手工计算一遍转换结果与软件输出比对,确认符号和顺序无误后再批量处理。

另外,姿态数据的采样率与流速采样率可能不同,转换前需要按时间戳对齐或插值。若姿态角在剖面采集期间变化剧烈(如走航中船体剧烈摇晃),单剖面用一组平均姿态角会引入误差,此时应使用逐 ping 姿态或至少按 ensemble 对齐的姿态数据。磁偏角则应使用观测位置和观测年份对应的值,跨年度长期观测需注意磁偏角的年变化量。

完成本节的三级转换后,得到的地球坐标速度才具备与其它海洋观测(如 CTD、漂流浮标、卫星高度计)直接比对的基础。后续的误差来源分析、异常值剔除和质量控制,都应建立在这一转换结果之上。