GNSS 误差椭圆:测量平差原理与 PPP 定位精度评估

Mini PCIe高精度GNSS/GPS板卡:硬件架构、RTK原理与实战调试指南 GNSS高精度定位技术正从专业测量走向自动驾驶、机器人与工业级导航等嵌入式系统。其核心并非单纯依赖算法,而在于接收机对伪距与载波相位等原始观测值的采集能力,以及RTK差分解算对整周模糊度的固定效果。在工程落地中,Mini PCIe形态的高精度GNSS/GPS板卡凭借标准化接口、高集成度与良好的抗干扰能力,成为多传感器融合方案中的关键组件。它通过PCIe总线直接供数,支持多频多系统信号,并能与IMU、相机、激光雷达进行时间同步与联合标定,从而实现厘米级定位输出。本文围绕该板卡,梳理其硬件构成、NMEA/UBX 阅读详情

坐标约定:水平面采用 East–North(E–N),E 为横轴,N 为纵轴,单位为 m;公式中的角度如无说明均为弧度。
术语约定:严格区分经验散布椭圆、总体均值置信椭圆、单历元形式误差椭圆、新观测预测椭圆。四者虽都可以画成椭圆,却不是同一类概率问题。

首先区分:描述误差、估计均值,还是评价某次定位?

同一批 PPP 历元误差可以产生两种中心相同但统计含义不同的椭圆:

  • 历元误差的经验散布椭圆:描述所选时间段中,各个历元的水平误差围绕总体/样本平均偏差如何分散。它关注“单个历元误差会怎样变化”,不是某一个特定历元滤波器输出的协方差。
  • 平均偏差的均值置信椭圆:描述根据这批历元误差估计未知总体平均偏差,估计有多大不确定性。它关注“我们对平均偏差有多大把握”,不表示 95% 的历元误差点会落在其中。

一句话记忆:散布椭圆看“误差点群有多散”;均值置信椭圆看“平均偏差估得有多确定”;形式误差椭圆看“解算器对某次坐标解的不确定度估计”;预测椭圆看“新观测的误差可能落在哪里”。 这四个问题不能用同一个 95% 概念混答;如果误差均值明显偏离零点,椭圆再小也不代表定位准确。

容易混淆的问题正确认识
“单历元散布椭圆”是否就是某一历元的形式椭圆?不是。散布椭圆由多个历元误差的样本协方差得到,是跨历元分布的统计摘要;形式椭圆来自某一历元解算器估计协方差。
“95% 散布椭圆”是什么意思?在指定的二维正态边缘分布和参数已知的理想模型下,随机抽取一个历元的误差向量落入椭圆的概率为 95%;从同一批样本估计参数后,只能称名义 95%。
“95% 均值置信椭圆”是什么意思?在统计假设成立时,重复独立抽样并重新构造置信椭圆,约 95% 的随机椭圆会包含固定但未知的总体平均偏差。它不是单历元位置误差的覆盖域。
为什么均值椭圆通常更小?独立同分布时,均值协方差是总体协方差的 1/n1/n1/n;散布协方差则描述单历元的波动。PPP 有时间相关时不能照搬 1/n1/n1/n。
散布椭圆与均值椭圆中心相同,是否等价?不等价。中心相同不代表半轴、覆盖对象、统计假设相同。
95% 经验散布椭圆就是未来单历元的 95% 预测区域吗?不是严格等价。估计均值、协方差带来的有限样本不确定性,需要预测区域专门处理。

1. 先理解:为什么需要误差椭圆?

误差椭圆(error ellipse)是二维位置误差或估计不确定性的几何表达。 它不是新的定位算法,而是把二维协方差矩阵转成三个直观量:长半轴、短半轴和长轴方向。[1]

例如某测站东向标准差为 2 cm、北向标准差为 1 cm。两个标准差可以说明东西方向更分散,但无法完整说明 E、N 两方向的误差是否相关,也就不能确定真正的最大离散方向。误差椭圆正是为了表达这种方向性和相关性而引入的。

问题误差椭圆能否回答原因
水平不确定性主要沿哪个方向伸展?能长轴方向表示协方差的最大主方向
哪个正交方向相对更稳定?能短轴表示另一主方向
东向与北向误差是否相关?能椭圆倾斜反映交叉协方差
结果是否整体偏离真值?仅靠椭圆尺寸不能必须同时报告椭圆中心偏差
高程精度怎么样?不能二维水平椭圆不含 U 向
故障、粗差或长尾发生的概率?不能单独判断二阶统计量无法描述完整分布及时间过程

典型用途包括控制网平差、测站几何精度比较、GNSS 解算形式精度表达、PPP/RTK 不同算法的误差散布对比、形变位移显著性分析。用于形变监测时,应计算位移差的协方差,不能直接以单点椭圆判断位移是否显著。

2. 为什么会得到椭圆,而不是圆?

2.1 二维误差与协方差

定义水平误差向量及其均值:

e=[eEeN],μ=E⁡[e]. \boldsymbol e=\begin{bmatrix}e_E\\e_N\end{bmatrix},\qquad \boldsymbol\mu=\operatorname E[\boldsymbol e]. e=[eE​eN​​],μ=E[e].

对应二维协方差矩阵:

ΣEN=E⁡ ⁣[(e−μ)(e−μ)T]=[σE2σENσENσN2]. \boldsymbol\Sigma_{EN} =\operatorname E\!\left[(\boldsymbol e-\boldsymbol\mu)(\boldsymbol e-\boldsymbol\mu)^T\right] =\begin{bmatrix} \sigma_E^2 & \sigma_{EN}\\ \sigma_{EN} & \sigma_N^2 \end{bmatrix}. ΣEN​=E[(e−μ)(e−μ)T]=[σE2​σEN​​σEN​σN2​​].

符号含义单位
eE,eNe_E,e_NeE​,eN​东、北方向的定位误差m
μ\boldsymbol\muμ二维误差期望(平均偏差)m
σE,σN\sigma_E,\sigma_NσE​,σN​东、北误差标准差m
σEN\sigma_{EN}σEN​E、N 误差协方差m²
ΣEN\boldsymbol\Sigma_{EN}ΣEN​二维误差协方差矩阵m²
E⁡[⋅]\operatorname E[\cdot]E[⋅]、TTT数学期望、矩阵转置—

相关系数为:

ρEN=σENσEσN,−1≤ρEN≤1, \rho_{EN}=\frac{\sigma_{EN}}{\sigma_E\sigma_N},\qquad -1\le\rho_{EN}\le1, ρEN​=σE​σN​σEN​​,−1≤ρEN​≤1,

其中相关系数仅在 σE>0\sigma_E>0σE​>0、σN>0\sigma_N>0σN​>0 时有定义。

  • ρEN=0\rho_{EN}=0ρEN​=0:协方差主轴与 E/N 轴对齐(若两个标准差相等,则是圆)。不相关不必然独立;若联合正态则可推出独立。
  • ρEN≠0\rho_{EN}\ne0ρEN​=0:主轴一般倾斜;倾斜方向还取决于 σE2,σN2\sigma_E^2,\sigma_N^2σE2​,σN2​。
  • σE=σN\sigma_E=\sigma_NσE​=σN​ 且 σEN=0\sigma_{EN}=0σEN​=0:协方差各向同性,椭圆退化为圆形,长轴方向没有唯一意义。

2.2 特征分解:找出真正的长短轴

对实对称、半正定的协方差矩阵进行特征分解:

ΣEN=V[λ100λ2]VT,λ1≥λ2≥0. \boldsymbol\Sigma_{EN}=\boldsymbol V \begin{bmatrix}\lambda_1&0\\0&\lambda_2\end{bmatrix}\boldsymbol V^T, \qquad\lambda_1\ge\lambda_2\ge0. ΣEN​=V[λ1​0​0λ2​​]VT,λ1​≥λ2​≥0.

其中 λ1,λ2\lambda_1,\lambda_2λ1​,λ2​ 为协方差特征值(m²);V=[v1,v2]\boldsymbol V=[\boldsymbol v_1,\boldsymbol v_2]V=[v1​,v2​] 的两列是单位正交特征向量(无量纲)。

λ1,2=σE2+σN22±(σE2−σN2)2+4σEN22. \lambda_{1,2}=\frac{\sigma_E^2+\sigma_N^2}{2} \pm\frac{\sqrt{(\sigma_E^2-\sigma_N^2)^2+4\sigma_{EN}^2}}{2}. λ1,2​=2σE2​+σN2​​±2(σE2​−σN2​)2+4σEN2​​​.

大特征值对应最大离散方向,小特征值对应正交的最小离散方向。长短轴的几何形状由协方差决定,而不是人为挑选东或北方向。

3. 1σ 椭圆、95% 椭圆分别表示什么?

3.1 椭圆数学公式

假设 e\boldsymbol ee 服从非退化二维正态分布 N2(μ,ΣEN)N_2(\boldsymbol\mu,\boldsymbol\Sigma_{EN})N2​(μ,ΣEN​),则满足:

(e−μ)TΣEN−1(e−μ)≤χ2,p2 (\boldsymbol e-\boldsymbol\mu)^T\boldsymbol\Sigma_{EN}^{-1} (\boldsymbol e-\boldsymbol\mu)\le\chi^2_{2,p} (e−μ)TΣEN−1​(e−μ)≤χ2,p2​

的区域具有理论覆盖概率 ppp。这里 χ2,p2\chi^2_{2,p}χ2,p2​ 是自由度为 2 的卡方分布的 ppp 分位数;左侧为平方马氏距离。由此得到椭圆半轴:

ap=χ2,p2λ1,bp=χ2,p2λ2. \boxed{a_p=\sqrt{\chi^2_{2,p}\lambda_1}},\qquad \boxed{b_p=\sqrt{\chi^2_{2,p}\lambda_2}}. ap​=χ2,p2​λ1​​​,bp​=χ2,p2​λ2​​​.

其中 ap,bpa_p,b_pap​,bp​ 分别为椭圆长、短半轴(m),p∈(0,1)p\in(0,1)p∈(0,1) 为理论覆盖概率;计算逆矩阵要求协方差正定(λ2>0\lambda_2>0λ2​>0)。

二维卡方分布有一个方便的闭式:

χ2,p2=−2ln⁡(1−p),cp=−2ln⁡(1−p). \chi^2_{2,p}=-2\ln(1-p),\qquad c_p=\sqrt{-2\ln(1-p)}. χ2,p2​=−2ln(1−p),cp​=−2ln(1−p)​.

cpc_pcp​ 是相对于“1σ 主轴椭圆”的半轴放大系数。

名称半轴放大系数 cpc_pcp​二维正态理论覆盖率
1σ 主轴椭圆1.00039.35%
68.27% 椭圆约 1.51568.27%
2σ 主轴椭圆2.00086.47%
95% 椭圆约 2.44895.00%
99% 椭圆约 3.03599.00%

容易混淆的地方:“一维 ±1σ\pm1\sigma±1σ 覆盖约 68.27%”不能照搬到二维;二维 1σ 主轴椭圆只覆盖约 39.35%。二维 95% 也不是半轴乘 1.96。[1][4]

3.2 椭圆方向角怎样定义?

设长轴单位特征向量 v1=[vE,vN]T\boldsymbol v_1=[v_E,v_N]^Tv1​=[vE​,vN​]T,在 E 横轴、N 纵轴的坐标系下:

θ=atan2⁡(vN,vE),A=(90∘−θdeg⁡) mod 180∘. \theta=\operatorname{atan2}(v_N,v_E),\qquad A=(90^\circ-\theta_{\deg})\bmod 180^\circ. θ=atan2(vN​,vE​),A=(90∘−θdeg​)mod180∘.

其中 θ\thetaθ 是从正东逆时针的数学方向角(rad),θdeg⁡\theta_{\deg}θdeg​ 是它换算成度的数值;AAA 是从正北顺时针的长轴方位角(度)。因为长轴没有箭头,AAA 在 [0∘,180∘)[0^\circ,180^\circ)[0∘,180∘) 内表示即可。

当 λ1≈λ2\lambda_1\approx\lambda_2λ1​≈λ2​ 时椭圆近似圆形,长轴方向容易因微小扰动而大幅改变,此时不宜解读方位角差异。

3.3 “95%”并不自动成立

上述概率是基于误差服从二维正态、均值与协方差已知且正确,并围绕真实误差均值居中给出的理论覆盖率。真实误差均值可以不为零,不能把“中心在均值处”误写成“算法无偏”。实际 PPP 结果可能具有漂移、偏差、时间相关、错固定、粗差或非正态尾部;此时乘以 2.448 只能得到名义 95% 椭圆,不能未经验证就宣称实测覆盖率为 95%。[4]

另外,“某次位置估计的形式置信区域”与“多个历元的误差散布域”外形相似,但协方差来源不同;统计含义见第 6 章。

4. 数值算例:如何计算长短轴?

设一组水平误差近似满足:σE=0.020\sigma_E=0.020σE​=0.020 m,σN=0.010\sigma_N=0.010σN​=0.010 m,ρEN=0.60\rho_{EN}=0.60ρEN​=0.60。

于是:

ΣEN=[0.0004000.0001200.0001200.000100] m2. \boldsymbol\Sigma_{EN}= \begin{bmatrix}0.000400&0.000120\\0.000120&0.000100\end{bmatrix}\ {\rm m}^2. ΣEN​=[0.0004000.000120​0.0001200.000100​] m2.

结果数值
大特征值 λ1\lambda_1λ1​0.00044209 m²
小特征值 λ2\lambda_2λ2​0.00005791 m²
1σ 半长轴 / 半短轴2.103 cm / 0.761 cm
95% 半长轴 / 半短轴5.147 cm / 1.863 cm
长轴方位角 AAA约 70.67°(北起顺时针,模 180°)

虽然东向原始标准差最大,真正的主方向因 E/N 正相关而倾斜。只给 E、N 标准差会漏掉这部分信息。

5. 测量平差中,误差椭圆从哪里来?

线性化最小二乘观测模型:

l=Hx+ε,E⁡[ε]=0,Cov⁡(ε)=R. \boldsymbol l=\boldsymbol H\boldsymbol x+\boldsymbol\varepsilon, \qquad\operatorname E[\boldsymbol\varepsilon]=\boldsymbol0, \qquad\operatorname{Cov}(\boldsymbol\varepsilon)=\boldsymbol R. l=Hx+ε,E[ε]=0,Cov(ε)=R.

当 H\boldsymbol HH 满列秩、R\boldsymbol RR 正定且随机模型正确时,广义最小二乘得到:

x^=(HTR−1H)−1HTR−1l, \hat{\boldsymbol x}=(\boldsymbol H^T\boldsymbol R^{-1}\boldsymbol H)^{-1} \boldsymbol H^T\boldsymbol R^{-1}\boldsymbol l, x^=(HTR−1H)−1HTR−1l,

Px^=(HTR−1H)−1. \boxed{\boldsymbol P_{\hat x}=(\boldsymbol H^T\boldsymbol R^{-1}\boldsymbol H)^{-1}}. Px^​=(HTR−1H)−1​.

其中 l\boldsymbol ll 为线性化观测量(m 或其他一致单位),H\boldsymbol HH 为设计矩阵,x\boldsymbol xx 为待估参数,x^\hat{\boldsymbol x}x^ 为估计值,ε\boldsymbol\varepsilonε 为观测误差,R\boldsymbol RR 为观测协方差,Px^\boldsymbol P_{\hat x}Px^​ 为估计值的形式协方差。设计矩阵可能含有不同单位的参数,参数协方差需按相应量纲理解。

若只有相对权阵 W\boldsymbol WW,并采用 R=σ02W−1\boldsymbol R=\sigma_0^2\boldsymbol W^{-1}R=σ02​W−1,则:

Px^=σ02(HTWH)−1. \boldsymbol P_{\hat x}=\sigma_0^2(\boldsymbol H^T\boldsymbol W\boldsymbol H)^{-1}. Px^​=σ02​(HTWH)−1.

σ02\sigma_0^2σ02​ 是单位权方差;若其未知而由残差估计,必须区分已知方差下的卡方近似与有限自由度下估计方差的置信域。在独立高斯观测及适用的经典平差条件下,后者可涉及 FFF 分布放大,而不能无条件照搬卡方系数。[1]

工程注意:PPP 常包含钟差、对流层、模糊度等未知参数及状态先验;应读取与最终解状态一致的完整后验协方差矩阵。不能把其他参数删掉后直接对缩减的法方程重新求逆,冒充坐标边缘协方差;固定模糊度后也必须注意正确固定条件下的协方差与错固定风险。

5.1 从 ECEF 坐标协方差变为水平椭圆

如果 PPP 输出完整参数协方差矩阵,先提取其中 ECEF 坐标 (X,Y,Z)(X,Y,Z)(X,Y,Z) 对应的 3×33\times33×3 边缘子矩阵 PXYZ\boldsymbol P_{XYZ}PXYZ​。提取这个子矩阵时,钟差、对流层和模糊度的相关性已经通过完整协方差体现,不是先删除这些状态再反求协方差。

设参考点的大地纬度为 φ\varphiφ、大地经度为 λ\lambdaλ(rad),ECEF 到 ENU 的旋转矩阵为:

T=[−sin⁡λcos⁡λ0−sin⁡φcos⁡λ−sin⁡φsin⁡λcos⁡φcos⁡φcos⁡λcos⁡φsin⁡λsin⁡φ]. \boldsymbol T=\begin{bmatrix} -\sin\lambda&\cos\lambda&0\\ -\sin\varphi\cos\lambda&-\sin\varphi\sin\lambda&\cos\varphi\\ \cos\varphi\cos\lambda&\cos\varphi\sin\lambda&\sin\varphi \end{bmatrix}. T=​−sinλ−sinφcosλcosφcosλ​cosλ−sinφsinλcosφsinλ​0cosφsinφ​​.

PENU=TPXYZTT,PEN=(PENU)1:2, 1:2. \boldsymbol P_{ENU}=\boldsymbol T\boldsymbol P_{XYZ}\boldsymbol T^T, \qquad \boldsymbol P_{EN}=\left(\boldsymbol P_{ENU}\right)_{1:2,\,1:2}. PENU​=TPXYZ​TT,PEN​=(PENU​)1:2,1:2​.

这里 T\boldsymbol TT 为无量纲的正交旋转矩阵,PENU\boldsymbol P_{ENU}PENU​ 为 ENU 三维位置协方差(m²),PEN\boldsymbol P_{EN}PEN​ 为其左上角 E/N 二维子矩阵(数学记号采用从 1 开始的下标)。必须使用大地纬度,不能误用地心纬度。[2][3]

对 PEN\boldsymbol P_{EN}PEN​ 进行特征分解,即可画出某一历元定位解的形式误差椭圆。它反映模型给出的不确定性,并不自动包含未建模系统误差、参考坐标误差、错误整数固定或完好性风险。

5.2 两测站的相对误差椭圆

控制网或相对定位还可能关心测站 B 相对于 A 的坐标差。其协方差为:

PB−A=PB+PA−PBA−PAB,PBA=PABT. \boldsymbol P_{B-A}=\boldsymbol P_B+\boldsymbol P_A -\boldsymbol P_{BA}-\boldsymbol P_{AB}, \qquad\boldsymbol P_{BA}=\boldsymbol P_{AB}^T. PB−A​=PB​+PA​−PBA​−PAB​,PBA​=PABT​.

其中 PA,PB\boldsymbol P_A,\boldsymbol P_BPA​,PB​ 为两测站坐标协方差,PAB=Cov⁡(r^A,r^B)\boldsymbol P_{AB}=\operatorname{Cov}(\hat{\boldsymbol r}_A,\hat{\boldsymbol r}_B)PAB​=Cov(r^A​,r^B​);各矩阵须在同一坐标系、相同分量顺序下使用。共同误差引起的相关性不能直接忽略。

6. PPP 误差序列可以使用误差椭圆吗?

可以,但首先必须确定自己评估的是哪一种不确定性。

椭圆类型输入数据中心描述对象是否需要真值
形式误差椭圆单次解的 PEN,k\boldsymbol P_{EN,k}PEN,k​当前坐标估计值给定模型下该次坐标估计误差的不确定性不必
经验散布椭圆多历元相对真值的 (eE,k,eN,k)(e_{E,k},e_{N,k})(eE,k​,eN,k​)误差样本均值一般历元误差的横向散布,而非某一指定历元的形式协方差需要
均值置信椭圆多历元误差与均值估计的统计分布样本均值总体平均偏差(或静态平均位置)的估计不确定性评估平均偏差时需要
新历元预测椭圆历史误差样本、预测假设样本均值一个尚未观测的新历元误差可能出现的区域评价定位误差时通常需要

最容易犯的错误是:把经验散布椭圆称为“PPP 平均坐标的 95% 置信椭圆”。 散布、均值置信和新点预测分别回答不同问题,缩放公式也不同。对 PPP 定位误差序列做算法性能评估,通常应优先使用经验散布椭圆 + Bias + RMS + R95 + 收敛指标。

6.1 准备误差:统一真值和坐标框架

静态站在每个历元使用一致的参考坐标;动态站必须有严格时间同步的参考轨迹:

ekENU=Tk(r^kECEF−rkref,ECEF). \boldsymbol e_k^{ENU}=\boldsymbol T_k\left(\hat{\boldsymbol r}_k^{ECEF}-\boldsymbol r_k^{ref,ECEF}\right). ekENU​=Tk​(r^kECEF​−rkref,ECEF​).

其中 kkk 为历元编号,r^kECEF\hat{\boldsymbol r}_k^{ECEF}r^kECEF​ 是 PPP ECEF 解,rkref,ECEF\boldsymbol r_k^{ref,ECEF}rkref,ECEF​ 为对应历元的参考坐标;Tk\boldsymbol T_kTk​ 为在参考位置计算的 ECEF→ENU 旋转矩阵。静态小范围可以使用固定参考 ENU;大范围动态轨迹宜逐历元定义局部 ENU。如果将不同地理位置的局部 E/N 误差直接汇总到一张椭圆,应明确它表示各时刻“局部东/北”误差统计,而不是同一个固定 ECEF 方向的空间散布。

必须统一坐标框架/参考历元、时间系统、天线参考点及所需的固体潮等位移约定。否则可能把基准不一致造成的偏差错误解释为 PPP 算法误差。

6.2 历元误差的均值与协方差

设水平误差 ek=[eE,k,eN,k]T\boldsymbol e_k=[e_{E,k},e_{N,k}]^Tek​=[eE,k​,eN,k​]T,有效历元数为 nnn:

eˉ=1n∑k=1nek,S=1n−1∑k=1n(ek−eˉ)(ek−eˉ)T. \bar{\boldsymbol e}=\frac{1}{n}\sum_{k=1}^{n}\boldsymbol e_k, \qquad \boldsymbol S=\frac{1}{n-1}\sum_{k=1}^{n} (\boldsymbol e_k-\bar{\boldsymbol e})(\boldsymbol e_k-\bar{\boldsymbol e})^T. eˉ=n1​k=1∑n​ek​,S=n−11​k=1∑n​(ek​−eˉ)(ek​−eˉ)T.

eˉ\bar{\boldsymbol e}eˉ 是样本均值/偏差估计(m);S\boldsymbol SS 为样本协方差(m²)。在独立同分布的常规假设下,S\boldsymbol SS 是总体协方差的常用估计;PPP 时间相关或非平稳时,应将其理解为选定时间段内的描述性散布统计,不宜直接依赖独立样本推断性质。

将 S\boldsymbol SS 代入第 3 章的特征值公式,就能画出名义 ppp 散布椭圆。这是样本拟合后的描述性结果;同样一批样本中的点落入椭圆的比例不必恰好为 ppp,独立未来历元的真实覆盖概率也需要另行验证。绘图应同时标记:

  • 误差原点 (0,0)(0,0)(0,0):代表真值。
  • 误差均值 eˉ\bar{\boldsymbol e}eˉ:代表平均偏差,也是散布椭圆中心。

若 PPP 长期稳定偏东 5 cm、随机波动仅约 1 cm,椭圆依然可能很小。“稳”不等于“准”。

6.3 散布椭圆与均值置信椭圆:统计对象不同

为避免概念偷换,先用同一批水平误差样本 e1,…,en\boldsymbol e_1,\ldots,\boldsymbol e_ne1​,…,en​ 定义两种随机对象:

  • 单历元误差变量 e\boldsymbol ee:随机选取一个符合所分析工况的历元,其误差具有总体均值 μ\boldsymbol\muμ 和总体协方差 Σ\boldsymbol\SigmaΣ。
  • 样本均值估计量 eˉ\bar{\boldsymbol e}eˉ:将 nnn 个历元平均得到的统计量,其估计目标是总体平均偏差 μ\boldsymbol\muμ,而非某一历元的误差。

其中 μ\boldsymbol\muμ(m)是未知的平均偏差,Σ\boldsymbol\SigmaΣ(m²)是单历元误差的总体协方差,nnn 为样本历元数。两种椭圆不应只用一个“95% 误差椭圆”的名称概括。

A. 经验散布椭圆(dispersion ellipse)

用样本均值 eˉ\bar{\boldsymbol e}eˉ 和样本协方差 S\boldsymbol SS 描述单历元误差的散布,其名义 95% 区域为:

(e−eˉ)TS−1(e−eˉ)≤χ2,0.952≈5.991. (\boldsymbol e-\bar{\boldsymbol e})^T\boldsymbol S^{-1} (\boldsymbol e-\bar{\boldsymbol e})\le\chi^2_{2,0.95}\approx5.991. (e−eˉ)TS−1(e−eˉ)≤χ2,0.952​≈5.991.

式中 e\boldsymbol ee 是任意一个待描述的二维历元误差(m),χ2,0.952\chi^2_{2,0.95}χ2,0.952​ 是自由度为 2 的卡方 95% 分位数。将估计出的 eˉ,S\bar{\boldsymbol e},\boldsymbol Seˉ,S 代回理论卡方公式只产生近似/名义覆盖域;它不是严格的有限样本预测区域。若观测含明显漂移、非正态或跨工况混合,名义 95% 的概率解释还会失效。

B. 均值置信椭圆(confidence ellipse for the mean)

当 e1,…,en\boldsymbol e_1,\dots,\boldsymbol e_ne1​,…,en​ 独立同分布、服从二维正态,且 Σ\boldsymbol\SigmaΣ 未知时,利用 Hotelling T2T^2T2 构造总体均值 μ\boldsymbol\muμ 的 95% 联合置信椭圆:

(μ−eˉ)TS−1(μ−eˉ)≤2(n−1)n(n−2)F2,n−2;0.95,n>2. (\boldsymbol\mu-\bar{\boldsymbol e})^T\boldsymbol S^{-1} (\boldsymbol\mu-\bar{\boldsymbol e}) \le \frac{2(n-1)}{n(n-2)}F_{2,n-2;0.95},\qquad n>2. (μ−eˉ)TS−1(μ−eˉ)≤n(n−2)2(n−1)​F2,n−2;0.95​,n>2.

其中 F2,n−2;0.95F_{2,n-2;0.95}F2,n−2;0.95​ 为分子自由度 2、分母自由度 n−2n-2n−2 的 FFF 分布 95% 分位数。其中心是样本均值,要覆盖的对象是未知的总体均值 μ\boldsymbol\muμ,而不是历元误差点。此式只在上述独立二维正态假设成立且 S\boldsymbol SS 可逆时适用。[5][6]

对二维情况,可将 FFF 分位数进一步化简,因此无需调用 SciPy 也能计算均值置信椭圆:

cmean,p2=n−1n[(1−p)−2/(n−2)−1],amean,p=cmean,pλ1,bmean,p=cmean,pλ2. \boxed{c_{\mathrm{mean},p}^2 =\frac{n-1}{n}\left[(1-p)^{-2/(n-2)}-1\right]},\qquad a_{\mathrm{mean},p}=c_{\mathrm{mean},p}\sqrt{\lambda_1},\quad b_{\mathrm{mean},p}=c_{\mathrm{mean},p}\sqrt{\lambda_2}. cmean,p2​=nn−1​[(1−p)−2/(n−2)−1]​,amean,p​=cmean,p​λ1​​,bmean,p​=cmean,p​λ2​​.

这里 cmean,pc_{\mathrm{mean},p}cmean,p​ 是由二维 Hotelling 置信域推出的半轴系数;λ1≥λ2>0\lambda_1\ge\lambda_2>0λ1​≥λ2​>0 为样本协方差 S\boldsymbol SS 的特征值(m²);ppp 为置信水平。对比之下,经验散布椭圆采用 cscatter,p=−2ln⁡(1−p)c_{\mathrm{scatter},p}=\sqrt{-2\ln(1-p)}cscatter,p​=−2ln(1−p)​,不含 nnn 引起的均值精度提升因子。

6.4 如果要预测“下一历元”,还需要预测椭圆

经验散布椭圆描述已经观测到的历史点群;均值置信椭圆描述总体平均偏差。如果真正想回答“下一次独立抽取的水平误差,可能落在哪个区域?”,应使用预测椭圆(prediction ellipse)。[6]

若 nnn 个训练样本及未来新样本 enew\boldsymbol e_{new}enew​ 均为独立同分布二维正态,且总体均值、协方差未知,有限样本的预测区域可写为:

(enew−eˉ)TS−1(enew−eˉ)≤2(n+1)(n−1)n(n−2)F2,n−2;p,n>2. (\boldsymbol e_{new}-\bar{\boldsymbol e})^T\boldsymbol S^{-1} (\boldsymbol e_{new}-\bar{\boldsymbol e}) \le \frac{2(n+1)(n-1)}{n(n-2)}F_{2,n-2;p},\qquad n>2. (enew​−eˉ)TS−1(enew​−eˉ)≤n(n−2)2(n+1)(n−1)​F2,n−2;p​,n>2.

对应预测半轴 apred,p=cpred,pλ1a_{pred,p}=c_{pred,p}\sqrt{\lambda_1}apred,p​=cpred,p​λ1​​、bpred,p=cpred,pλ2b_{pred,p}=c_{pred,p}\sqrt{\lambda_2}bpred,p​=cpred,p​λ2​​,其中

cpred,p2=(n+1)cmean,p2=(n+1)(n−1)n[(1−p)−2/(n−2)−1]. c_{pred,p}^2=(n+1)c_{mean,p}^2 =\frac{(n+1)(n-1)}{n}\left[(1-p)^{-2/(n-2)}-1\right]. cpred,p2​=(n+1)cmean,p2​=n(n+1)(n−1)​[(1−p)−2/(n−2)−1].

这里 enew\boldsymbol e_{new}enew​ 是尚未观测的一个新历元误差(m),F2,n−2;pF_{2,n-2;p}F2,n−2;p​ 是 FFF 分布的 ppp 分位数,nnn 为训练样本数;λ1,λ2\lambda_1,\lambda_2λ1​,λ2​ 为样本协方差特征值。这里 cpred,pc_{pred,p}cpred,p​ 是无量纲的预测半轴放大系数。该区域额外考虑了从有限历史样本估计分布参数带来的不确定性;它的覆盖率是针对重复获取训练样本并独立预测下一样本而言,不能理解为给定某一批训练样本后必定有 95% 的条件覆盖率。**它不等于均值置信域,也不等于历史散点外包络。**实际 PPP 高频历元有时间相关、漂移和工况变化,不能未经建模就套用上述 iid 公式。

6.5 用一组数字理解:同一中心、不同半轴

假设有 n=100n=100n=100 个独立同分布的教学样本,统计得到东向与北向样本标准差分别为 2 cm、1 cm,且相关系数为 0;误差均值为东 5 cm、北 0 cm。

指标名义 95% 散布椭圆95% 均值置信椭圆95% 新历元预测椭圆
描述对象历元误差的散布总体平均偏差下一次独立观测误差
中心(5,0)(5,0)(5,0) cm(5,0)(5,0)(5,0) cm(5,0)(5,0)(5,0) cm
半长轴4.895 cm0.500 cm5.021 cm
半短轴2.448 cm0.250 cm2.511 cm
是否覆盖 95% 的现有样本不作严格保证不是此含义不是此含义

三种椭圆都以偏东 5 cm 的样本均值为中心。均值置信椭圆更小,只说明对“平均偏东多少”的估计更确定,并不表示单历元误差更小。 在这个教学例子中,均值置信椭圆与零误差原点不相交,说明在 iid 正态模型下可拒绝“总体平均水平误差为零”的假设;但不能因此忽略 PPP 的时间相关性和参考真值误差。新历元预测椭圆略大于名义散布椭圆,是因为还需考虑参数估计的不确定性。真实 PPP 高频连续历元常相关,不能直接把上述 n=100n=100n=100 的独立样本推断用到实际数据。

6.6 PPP 历元相关时,为什么不能写 S/n\boldsymbol S/nS/n?

若不同历元之间存在相关性,则均值协方差的一般形式为:

Cov⁡(eˉ)=1n2∑i=1n∑j=1nCov⁡(ei,ej). \boxed{\operatorname{Cov}(\bar{\boldsymbol e})= \frac{1}{n^2}\sum_{i=1}^{n}\sum_{j=1}^{n} \operatorname{Cov}(\boldsymbol e_i,\boldsymbol e_j)}. Cov(eˉ)=n21​i=1∑n​j=1∑n​Cov(ei​,ej​)​.

其中 Cov⁡(ei,ej)\operatorname{Cov}(\boldsymbol e_i,\boldsymbol e_j)Cov(ei​,ej​)(m²)是第 i,ji,ji,j 个历元水平误差的交叉协方差。当各历元独立且同分布时,只有 i=ji=ji=j 项不为零,才简化为:

Cov⁡(eˉ)=Σ/n. \operatorname{Cov}(\bar{\boldsymbol e})=\boldsymbol\Sigma/n. Cov(eˉ)=Σ/n.

若进一步假设误差序列是二阶平稳的,并定义滞后 hhh 的矩阵自协方差 Γ(h)=Cov⁡(ek,ek+h)\boldsymbol\Gamma(h)=\operatorname{Cov}(\boldsymbol e_k,\boldsymbol e_{k+h})Γ(h)=Cov(ek​,ek+h​)(m²),则

Cov⁡(eˉ)=1n2[nΓ(0)+∑h=1n−1(n−h)(Γ(h)+Γ(h)T)]. \operatorname{Cov}(\bar{\boldsymbol e})=\frac{1}{n^2} \left[n\boldsymbol\Gamma(0)+\sum_{h=1}^{n-1}(n-h) \bigl(\boldsymbol\Gamma(h)+\boldsymbol\Gamma(h)^T\bigr)\right]. Cov(eˉ)=n21​[nΓ(0)+h=1∑n−1​(n−h)(Γ(h)+Γ(h)T)].

由此可见,时间相关影响的是整个二维协方差矩阵,不能简单给 E/N 统一套一个“有效样本数”就认为得到严格的联合置信椭圆。

PPP 误差往往包含慢变化的轨钟残差、对流层残差、随机过程滤波记忆和收敛过程。相邻误差相关时,不能直接用 S/n\boldsymbol S/nS/n 或上述 Hotelling 系数来给均值椭圆标注严格的 95% 置信水平。对近似平稳、相关随滞后衰减且样本足够长的序列,可估计时间滞后协方差以评估均值不确定性;也可在满足条件时使用移动块自助法等重采样方法。这里即使估计到了均值协方差,也不意味着直接套用原来的 Hotelling 有限样本 FFF 阈值就有严格的 95% 覆盖率;仍需选用与相关过程相符的统计推断方法。明显非平稳或存在持续系统偏差时,应先分阶段、诊断趋势及偏差来源。

工程上更常见的目的是评价 PPP 定位误差是否准确、稳定:先画散布椭圆,并同时报告 Bias、RMS、R95;只有真的需要对平均偏差或对多历元坐标取平均所得的静态站位置作统计推断时,再谨慎构造均值置信椭圆。多历元坐标的算术平均值与 PPP 滤波器的末历元状态估计并不等价,不能将前者的均值置信椭圆直接当作后者的形式协方差。

6.7 四类椭圆的选择流程(Mermaid)

某次定位解的形式不确定性

多个历元的实际误差分布

总体平均偏差的不确定性

是

否

预测下一次独立误差

是

否

需要用椭圆评价 GNSS 结果

究竟关心什么

读取该历元的坐标协方差 P

形式误差椭圆

与真值对齐并计算 E/N 误差

统计样本均值和协方差 S

经验散布椭圆

检查时间相关性与平稳性

满足 iid 二维正态吗

Hotelling T² 均值置信椭圆

时间相关建模或适当重采样

满足 iid 二维正态吗

新历元预测椭圆

建立时变预测模型并验证

联合查看 Bias RMS R95 收敛情况

7. 为什么不能仅用误差椭圆评价 PPP 精度?

误差椭圆主要呈现去均值后的水平散布及相关方向,不直接包含平均偏差,也不描述高程或时间先后。因此应搭配以下指标:

指标回答的问题是否包含平均偏差
E/N/U Bias各方向是否长期偏移?直接体现
E/N/U STD各方向围绕均值波动多大?不包含
E/N/U RMS相对于真值的总体误差多大?包含
水平 RMS(RMS_H)综合水平位置误差多大?包含
水平 R9595% 样本的水平径向误差不超过多大?包含
水平散布椭圆水平误差分布朝哪里伸展?需另看椭圆中心
收敛时间/收敛率多久达到约定精度?取决于判据
异常率/最大误差尾部风险如何?可体现,需定义阈值

定义 eE,k,eN,ke_{E,k},e_{N,k}eE,k​,eN,k​ 为第 kkk 个历元的水平误差(m),则:

RMSE2=1n∑k=1neE,k2,RMSN2=1n∑k=1neN,k2, \mathrm{RMS}_{E}^2=\frac1n\sum_{k=1}^{n}e_{E,k}^2, \qquad\mathrm{RMS}_{N}^2=\frac1n\sum_{k=1}^{n}e_{N,k}^2, RMSE2​=n1​k=1∑n​eE,k2​,RMSN2​=n1​k=1∑n​eN,k2​,

RMSH=RMSE2+RMSN2,R95=Q0.95 ⁣(eE,k2+eN,k2). \boxed{\mathrm{RMS}_{H}=\sqrt{\mathrm{RMS}_E^2+\mathrm{RMS}_N^2}}, \qquad R_{95}=Q_{0.95}\!\left(\sqrt{e_{E,k}^2+e_{N,k}^2}\right). RMSH​=RMSE2​+RMSN2​​​,R95​=Q0.95​(eE,k2​+eN,k2​​).

其中 Q0.95Q_{0.95}Q0.95​ 是样本 95% 分位数算子(具体值受分位数插值规则影响)。R95 是以真值为中心的水平半径分位数,而 95% 椭圆给的是围绕均值的主轴半径;它们不是同一指标。

7.1 RMS、Bias 与样本 STD 的精确关系

若样本标准差 sE,sNs_E,s_NsE​,sN​ 采用分母 n−1n-1n−1(即 ddof=1),则精确恒等式是:

RMSE2=eˉE2+n−1nsE2,RMSN2=eˉN2+n−1nsN2, \mathrm{RMS}_E^2=\bar e_E^2+\frac{n-1}{n}s_E^2, \quad \mathrm{RMS}_N^2=\bar e_N^2+\frac{n-1}{n}s_N^2, RMSE2​=eˉE2​+nn−1​sE2​,RMSN2​=eˉN2​+nn−1​sN2​,

RMSH2=∥eˉ∥2+n−1ntr⁡(S). \boxed{\mathrm{RMS}_H^2=\|\bar{\boldsymbol e}\|^2+\frac{n-1}{n}\operatorname{tr}(\boldsymbol S)}. RMSH2​=∥eˉ∥2+nn−1​tr(S)​.

其中 eˉE,eˉN\bar e_E,\bar e_NeˉE​,eˉN​ 为样本均值,∥⋅∥\|\cdot\|∥⋅∥ 为欧氏范数,tr⁡(S)\operatorname{tr}(\boldsymbol S)tr(S) 为样本协方差对角线之和(m²)。

**注意分母:**只有标准差使用分母 nnn 定义时,才能直接写 RMS2=Bias2+STD2\mathrm{RMS}^2=\mathrm{Bias}^2+\mathrm{STD}^2RMS2=Bias2+STD2 而无需额外因子;当 numpy.std(..., ddof=1) 时应保留 (n−1)/n(n-1)/n(n−1)/n。

7.2 误差椭圆为什么不能替代水平径向准确度?

即使两组 PPP 解的 S\boldsymbol SS 完全相同,只要均值 eˉ\bar{\boldsymbol e}eˉ 不同,它们相对真值的 RMS 和 R95 就可能显著不同。误差椭圆的轴长反映的是去均值后的离散特征,中心位置反映平均偏差,两者必须一起查看。在算法论文或测试报告中,不宜把“95% 椭圆半长轴”直接写成“95% 水平定位精度”。

8. 形式误差椭圆怎样与真实 PPP 误差对照?

如果解算器逐历元输出位置形式协方差 PEN,k\boldsymbol P_{EN,k}PEN,k​,并有可信的真实误差 ek\boldsymbol e_kek​,可构造归一化平方误差(NEES 在该二维位置子空间的形式):

dk2=ekTPEN,k−1ek. \boxed{d_k^2=\boldsymbol e_k^T\boldsymbol P_{EN,k}^{-1}\boldsymbol e_k}. dk2​=ekT​PEN,k−1​ek​​.

其中 ek\boldsymbol e_kek​ 必须是估计坐标减真值的误差(不是去样本均值的偏差),PEN,k\boldsymbol P_{EN,k}PEN,k​ 为正定的该历元估计误差协方差(m²)。在误差针对真值无偏、协方差校准正确且每历元二维高斯模型成立等条件下,dk2d_k^2dk2​ 的边缘分布为 χ22\chi^2_2χ22​,所以理论 95% 阈值约为 5.991。

可统计 dk2≤5.991d_k^2\le5.991dk2​≤5.991 的历元比例,作为形式协方差的经验覆盖率诊断。不要混淆两个问题:

  • 历元间可以相关,不一定改变各历元正确的边缘覆盖概率。
  • 但相关会减少用于推断覆盖率的有效独立样本数;不能把 1 万个高频历元当成 1 万次相互独立实验。

此外,若参考坐标本身存在不确定度,比较的误差协方差还应考虑参考坐标误差及其与 PPP 解的交叉协方差;否则可能误判形式协方差过于乐观。这里使用的 PEN,k\boldsymbol P_{EN,k}PEN,k​ 必须是坐标估计误差的协方差,不是输入观测值协方差,也不是把 E/N/U 三个 STD 简单平方后忽略交叉项得到的矩阵。

对于 PPP-AR,错误整数固定可能造成“小形式椭圆、大实际偏差”;因此椭圆不能替代固定正确性检验或完好性分析。

9. PPP 工程评估的必要条件

  1. 先分阶段,再统计:未收敛段、收敛中、稳定段、重收敛段应分别分析。若报告全程结果,需明确含有哪几段。
  2. 真值和参考框架一致:包括坐标框架、参考历元、接收机天线 ARP/APC、时间同步及所采用的地球形变模型。
  3. 静态与动态分开:静态站用统一真值;动态站须逐时刻对齐参考轨迹。移动轨迹的坐标散布绝不等于定位误差散布。
  4. 保留时间信息:单个椭圆无法显示缓慢漂移、突变、周期误差、重新收敛;最好搭配 ENU 误差时间序列。
  5. 不随意剔除离群点:粗差处理规则、比例及修正前后结果应透明说明。协方差和椭圆尤其容易受极端值影响。
  6. 别误读近圆形椭圆:近圆时长轴方位角数值不稳定,不适合用于算法优劣排序。
  7. 样本不能太少或退化:计算二维协方差需至少 3 个非共线样本点;数值上还需保证矩阵正定、条件数可接受。
  8. 统一比较口径:不同算法比较时,采用同一真值、时间窗、历元匹配规则、置信水平与剔除策略。

10. 误差椭圆的优点和局限

维度优点局限及应对
协方差信息同时表达大小、主方向、相关性仅是二阶统计摘要,不代表完整概率分布
测量平差能展示不同点的精度差异形式精度依赖随机模型、约束与解算状态
PPP 误差分析能比较散布形态和方向性不含平均偏差;同时报告 Bias、RMS、R95
可视化简洁直观,便于对比不能表示时间演化、周跳、慢漂移
置信解释二维正态下有清晰数学公式非正态/错固定/模型检验选择可破坏名义覆盖率
数值实现只需协方差和特征分解需检查秩、病态及单位、轴向定义
测量设计识别薄弱方向,帮助优化几何最优设计还需考虑偏差、观测成本与可靠性

11. Python 3.6 示例:绘制 PPP 水平误差椭圆

以下代码既可用模拟数据演示,也可读取真实 PPP 的 ENU 误差(不是原始坐标),输出 Bias、STD、RMS、R95、名义 ppp 散布椭圆半轴和样本内覆盖率。可选开关 --iid-mean-ci 和 --iid-prediction 分别展示均值置信椭圆与下一独立样本的预测椭圆;这两个开关都仅用于 iid 二维正态教学数据,不应直接用于未经相关性处理的真实 PPP 序列。

输入 CSV 列名:e_m,n_m,u_m,单位均为 m。代码适用于 Python 3.6 语法;请安装与该 Python 版本兼容的 numpy、matplotlib。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""GNSS PPP 水平误差散布椭圆(输入 ENU 误差,单位 m)。"""
import argparse
import csv

import matplotlib.pyplot as plt
import numpy as np

DEFAULT_CONFIDENCE = 0.95
DEFAULT_OUTPUT = "ppp_error_ellipse.png"


def load_errors(filename):
    if not filename:
        # 可重复的测试数据;非真实 PPP 性能数据。
        rng = np.random.RandomState(7)
        cov = [[0.020 ** 2, 0.00012, 0.0],
               [0.00012, 0.010 ** 2, 0.0],
               [0.0, 0.0, 0.030 ** 2]]
        return rng.multivariate_normal([0.050, -0.010, 0.008], cov, 2000)

    with open(filename, "r", encoding="utf-8-sig", newline="") as fp:
        reader = csv.DictReader(fp)
        columns = ("e_m", "n_m", "u_m")
        if not reader.fieldnames or any(c not in reader.fieldnames for c in columns):
            raise ValueError("CSV 需要列名:e_m,n_m,u_m")
        data = [[float(row[c]) for c in columns] for row in reader]
    return np.asarray(data, dtype=float).reshape(-1, 3)


def main():
    parser = argparse.ArgumentParser(description="PPP error ellipse")
    parser.add_argument("--input", default="", help="ENU 误差 CSV;为空时用模拟数据")
    parser.add_argument("--output", default=DEFAULT_OUTPUT)
    parser.add_argument("--confidence", type=float, default=DEFAULT_CONFIDENCE)
    parser.add_argument("--iid-mean-ci", action="store_true",
                        help="仅 iid 二维正态样本:绘制均值置信椭圆")
    parser.add_argument("--iid-prediction", action="store_true",
                        help="仅 iid 二维正态样本:绘制下一独立样本预测椭圆")
    args = parser.parse_args()
    if not 0.0 < args.confidence < 1.0:
        parser.error("--confidence 必须在 0 与 1 之间")

    enu = load_errors(args.input)
    enu = enu[np.isfinite(enu).all(axis=1)]
    n = len(enu)
    if n < 3:
        raise ValueError("至少需要 3 个有限数值的历元")

    en = enu[:, :2]
    bias = enu.mean(axis=0)
    mean_en = bias[:2]
    cov = np.cov(en, rowvar=False, ddof=1)
    values, vectors = np.linalg.eigh(cov)
    order = values.argsort()[::-1]
    values, vectors = values[order], vectors[:, order]
    if values[1] <= 1e-12 * max(values[0], 1e-20):
        raise ValueError("水平误差样本近共线,协方差奇异或严重病态")

    chi2_threshold = -2.0 * np.log(1.0 - args.confidence)
    semiaxes = np.sqrt(chi2_threshold * values)
    major = vectors[:, 0]
    azimuth = (90.0 - np.degrees(np.arctan2(major[1], major[0]))) % 180.0

    t = np.linspace(0.0, 2.0 * np.pi, 361)
    circle = np.vstack((np.cos(t), np.sin(t)))
    boundary = mean_en[:, None] + vectors.dot(semiaxes[:, None] * circle)

    centered = en - mean_en
    rotated = centered.dot(vectors)
    d2 = np.sum(rotated ** 2 / values, axis=1)
    sample_coverage = (d2 <= chi2_threshold).mean()

    std = np.std(enu, axis=0, ddof=1)
    rms = np.sqrt(np.mean(enu ** 2, axis=0))
    horizontal = np.linalg.norm(en, axis=1)
    rms_h = np.sqrt(np.mean(horizontal ** 2))
    r95 = np.percentile(horizontal, 95.0)

    print("Epochs:", n)
    print("Bias ENU (cm):", np.round(bias * 100, 3))
    print("STD  ENU (cm):", np.round(std * 100, 3))
    print("RMS  ENU (cm):", np.round(rms * 100, 3))
    print("Horizontal RMS / R95 (cm): {:.3f} / {:.3f}".format(
        rms_h * 100, r95 * 100))
    print("{:.1f}% ellipse semiaxes (cm):".format(args.confidence * 100),
          np.round(semiaxes * 100, 3))
    if (values[0] - values[1]) / values[0] < 0.01:
        print("Major-axis azimuth: undefined/unstable (nearly circular)")
    else:
        print("Major-axis azimuth from North (deg): {:.2f}".format(azimuth))
    print("In-sample ellipse coverage (not independent validation): {:.1f}%"
          .format(sample_coverage * 100))

    # Hotelling T²:仅 iid 二维正态样本;均值置信域 != 历元散布域。
    mean_boundary, prediction_boundary = None, None
    if args.iid_mean_ci or args.iid_prediction:
        mean_c2 = (n - 1.0) / n * np.expm1(
            -2.0 * np.log1p(-args.confidence) / (n - 2.0))
        if args.iid_mean_ci:
            ci_axes = np.sqrt(mean_c2 * values)
            mean_boundary = mean_en[:, None] + vectors.dot(
                ci_axes[:, None] * circle)
            print("IID mean CI semiaxes (cm):", np.round(ci_axes * 100, 3))
        if args.iid_prediction:
            predict_axes = np.sqrt((n + 1.0) * mean_c2 * values)
            prediction_boundary = mean_en[:, None] + vectors.dot(
                predict_axes[:, None] * circle)
            print("IID prediction semiaxes (cm):", np.round(predict_axes * 100, 3))

    fig, ax = plt.subplots(figsize=(8, 7))
    ax.scatter(en[:, 0] * 100, en[:, 1] * 100, s=7, alpha=0.22,
               label="Epoch errors")
    ax.plot(boundary[0] * 100, boundary[1] * 100, lw=2,
            label="Nominal {:.1f}% dispersion ellipse".format(args.confidence * 100))
    if mean_boundary is not None:
        ax.plot(mean_boundary[0] * 100, mean_boundary[1] * 100,
                lw=2, linestyle="--", label="IID mean confidence ellipse")
    if prediction_boundary is not None:
        ax.plot(prediction_boundary[0] * 100, prediction_boundary[1] * 100,
                lw=2, linestyle=":", label="IID new-epoch prediction ellipse")
    ax.scatter([0], [0], s=130, marker="+", label="Truth (zero error)")
    ax.scatter([mean_en[0] * 100], [mean_en[1] * 100], s=100,
               marker="x", label="Sample mean (bias)")
    ax.set(xlabel="East error (cm)", ylabel="North error (cm)",
           title="PPP horizontal error ellipse")
    ax.set_aspect("equal", adjustable="box")
    ax.grid(True, alpha=0.3)
    ax.legend(loc="best")
    fig.tight_layout()
    fig.savefig(args.output, dpi=200)
    plt.close(fig)
    print("Saved:", args.output)


if __name__ == "__main__":
    main()

用法:

# 演示:模拟数据
python plot_ppp_error_ellipse.py

# 实际数据:输入必须是相对真值的 ENU 误差
python plot_ppp_error_ellipse.py --input ppp_enu_errors.csv --output ppp_95.png

# 调整名义椭圆覆盖概率
python plot_ppp_error_ellipse.py --input ppp_enu_errors.csv --confidence 0.99

# 仅作 iid 二维正态教学演示:均值置信椭圆与新历元预测椭圆
python plot_ppp_error_ellipse.py --iid-mean-ci --iid-prediction

CSV 示例:

e_m,n_m,u_m
0.012,-0.007,0.021
0.018,-0.004,0.024
-0.003,0.006,-0.013

解读提醒:--iid-mean-ci 虚线描述平均偏差的联合置信区域,而 --iid-prediction 点线描述新独立历元的预测区域;两者都不是已有样本的“95% 实测覆盖保证”。未经时间相关性处理的真实 PPP 数据,不应对这些教学曲线赋予严格的 95% 概率解释。In-sample ellipse coverage 是同一组数据拟合椭圆、又拿同一组数据计数的覆盖率,不能当作独立验证的概率,也不代表单次 PPP 解算器形式协方差的覆盖率。

12. PPP 评价流程

实际定位性能

形式精度是否可信

总体平均偏差的置信范围

读取 PPP 历元坐标和解算状态

读取静态真值或同步动态真值

统一坐标框架、时间和天线参考点

逐历元求 ECEF 误差并转 ENU

评估目标

按收敛阶段和工况分组

读取逐历元坐标协方差

先检验相关性和统计假设

选用适当的均值置信区域方法

计算 Bias、STD、RMS、R95

计算 E/N 样本协方差

绘制经验散布椭圆并标出误差原点

变换协方差到 ENU

计算形式椭圆并用真实误差做覆盖率诊断

联合报告精度、方向性、收敛及异常率

13. 与二维误差椭圆相关的其他概念

13.1 水平 R95、CEP、2DRMS 为什么不能直接当成椭圆?

  • R95:围绕真值原点、按水平距离排序后的 95% 经验分位数(m)。
  • CEP50:水平径向误差达到 50% 覆盖的圆半径,具体定义需说明分布中心及真值约定。
  • 2DRMS:术语经常指 2σE2+σN22\sqrt{\sigma_E^2+\sigma_N^2}2σE2​+σN2​​,但应注明标准差和分布假设;它不是一般情况下的严格 95% 圆半径。
  • 误差椭圆:由协方差决定的方向性二维区域,通常中心位于误差均值或估计坐标,而不是简单的圆半径。

对于非各向同性、有偏或非正态数据,不存在一个普适系数可以在 R95、CEP、2DRMS 和椭圆半轴之间自由换算。

13.2 三维误差椭球

把 U 向也加入,得到三维协方差 ΣENU\boldsymbol\Sigma_{ENU}ΣENU​ 和误差向量 eENU\boldsymbol e_{ENU}eENU​。对于非退化三维正态模型:

(eENU−μENU)TΣENU−1(eENU−μENU)≤χ3,p2. (\boldsymbol e_{ENU}-\boldsymbol\mu_{ENU})^T \boldsymbol\Sigma_{ENU}^{-1} (\boldsymbol e_{ENU}-\boldsymbol\mu_{ENU})\le\chi^2_{3,p}. (eENU​−μENU​)TΣENU−1​(eENU​−μENU​)≤χ3,p2​.

其中 μENU\boldsymbol\mu_{ENU}μENU​ 是三维误差均值,χ3,p2\chi^2_{3,p}χ3,p2​ 是自由度 3 的卡方分位数;三条主半轴为 χ3,p2λj\sqrt{\chi^2_{3,p}\lambda_j}χ3,p2​λj​​,λj\lambda_jλj​ 为三维协方差特征值(m²)。三维 95% 的主轴放大系数约为 2.795,不是二维的 2.448。 直接将三维 95% 椭球投影到水平面,其投影区域也不等同于水平边缘分布的二维 95% 椭圆。

14. 记住六个要点

  1. 误差椭圆是二维协方差的几何表示,不是新的定位解算方法。
  2. 长短轴说明离散大小,方向角说明相关主方向;近圆形时方向角不稳定。
  3. 二维 1σ 主轴椭圆正态覆盖率约 39.35%,二维 95% 半轴放大系数约 2.448。
  4. PPP 误差序列可以画经验散布椭圆,但必须同时报告偏差、RMS、R95 和收敛表现。
  5. 散布椭圆看单历元误差的统计散布;均值置信椭圆看总体平均偏差的不确定性;预测椭圆关注一个新历元。 三者的“95%”不是同一含义。
  6. 形式椭圆、经验散布椭圆、均值置信椭圆不能混用;PPP 时间相关时不能直接套用独立样本的均值置信公式。

参考文献

[1] Ghilani, C. D. (2017). Error Ellipse. In Adjustment Computations: Spatial Data Analysis, 6th ed., Chapter 19. John Wiley & Sons. https://doi.org/10.1002/9781119390664.ch19
引用范围:控制网平差的标准误差椭圆、主轴方向、精度可视化。出版社在线章节首次发表为 2017 年,图书版权年份为 2018 年。

[2] Sanz Subirana, J., Juan Zornoza, J. M., & Hernández-Pajares, M. (2011). Positioning Error. ESA Navipedia. https://gssc.esa.int/navipedia/index.php/Positioning_Error
引用范围:GNSS 形式精度、测量精度及水平位置协方差概念;并非 PPP 散布椭圆的专门实验研究。

[3] Sanz Subirana, J., Juan Zornoza, J. M., & Hernández-Pajares, M. (2011). Transformations between ECEF and ENU coordinates. ESA Navipedia. https://gssc.esa.int/navipedia/index.php/Transformations_between_ECEF_and_ENU_coordinates
引用范围:ECEF/ENU 旋转矩阵、使用大地纬度和经度的要求。

[4] Zaminpardaz, S., & Teunissen, P. J. G. (2022). On the computation of confidence regions and error ellipses: a critical appraisal. Journal of Geodesy, 96(2), Article 10. https://doi.org/10.1007/s00190-022-01596-y
引用范围:测量估计与假设检验结合时置信域覆盖率可能偏离名义水平;不是本文 Hotelling 公式的直接来源。

[5] The Pennsylvania State University, Department of Statistics. STAT 505, Lesson 7: Inferences Regarding Multivariate Population Mean. https://online.stat.psu.edu/stat505/Lesson07
引用范围:多元正态样本、Hotelling T2T^2T2、总体均值联合置信域及 FFF 分布。

[6] SAS Institute (2007). Parametric Curves: Confidence Ellipses. SAS/INSIGHT User’s Guide. https://support.sas.com/documentation/cdl/en/sgug/59902/HTML/default/fit_sect40.htm
引用范围:二维正态下均值置信椭圆与新独立观测预测椭圆的有限样本公式及区别。

本教程中的 PPP 统计流程、模拟数据、Python 示例由上述理论组织而成,不是对任何文献实验结果的复现。名义概率解释均依赖相应模型假设,实际工程评估应报告验证样本、时间窗和质量控制规则。

从数据采集到分析:手把手教你用GPSTest导出Android手机GNSS原始观测日志 本文详细介绍了如何使用GPSTest工具导出Android手机的GNSS原始观测日志,涵盖从数据采集到分析的完整流程。通过配置GPSTest、选择合适的数据输出格式以及优化采集环境,读者可以获取高质量的GNSS原始数据,适用于高精度定位算法研发和复杂环境下的定位研究。文章还提供了Python和MATLAB的数据处理示例,帮助开发者快速上手。 阅读详情

相关推荐

【人工智能】【无线网络】5G-A通感融合-第六篇(含车路云)

车路协同中DRL模型通过​​架构解耦(边缘-云)、算法优化(动作屏蔽/轻量化网络)、通信精简(关键数据筛选)及安全嵌入(奖励函数/监控接管)​​ 四重机制,实现了实时性与安全性的动态平衡。未来随着5G-Advanced低时延通信与车规级芯片算力提升,DRL有望在更复杂场景(如高速编队、全域信控)中逼近“零冲突”的终极目标。GNN与AI技术的融合正推动车路协同向​​场景化、自适应、低成本​​演进:​​协同控制​​:通过RGRL等框架解决人机混驾不确定性,实现无信号交叉口的高效通行。​​环境感知​。

weixin_49199313的博客 2668

巧用千寻位置服务实现高精度GNSS静态控制测量实战指南

GNSS静态测量是获取毫米级至厘米级高精度三维坐标的核心技术,其原理依赖于长时间观测以消除卫星钟差、轨道误差、电离层延迟等多种误差,并通过固定载波相位整周模糊度来发挥其精密定位潜力。这项技术的核心价值在于为工程测绘、地籍调查、形变监测等领域提供可靠的空间基准。在实际应用中,结合如千寻位置提供的北斗地基增强网络服务,可以显著提升原始观测数据的质量与可靠性。通过接收实时差分改正数据流,单台接收机即可获得相当于连接全国虚拟基准站的高质量数据输入,这为后续的精密解算奠定了坚实基础。本文以千寻位置服务体系为例,深入探

weixin_30653023的博客 382

GNSS参数工程应用全解析:从星历到DOP的定位精度关键点

全球导航卫星系统(GNSS)高精度定位中,星历、观测质量与精度因子等参数共同决定了从伪距测量到厘米级坐标的转换质量。广播星历中的开普勒轨道根数与摄动改正项用于恢复卫星位置,电离层alpha/beta系数修正单频信号延迟,C/N0、多路径值(MP)则反映观测值可信度,而PDOP/HDOP等精度因子量化卫星几何构型的影响。掌握这些参数的含义与配置边界,是RTK/PPP解算、接收机调试及异常排查的关键。围绕GNSS相关概念参数,从导航电文结构到DOP计算原理,结合工程案例解析参数误用场景,可帮助开发者快速定位定位

weixin_30363285的博客 173

RTKLIB数据处理全流程实战:从观测文件下载到RTKPOST解算出图

本文详细介绍了RTKLIB数据处理全流程,从观测文件下载到RTKPOST解算出图的实战操作。涵盖数据准备、RTKPOST核心配置、高级技巧与性能优化,以及结果分析与可视化,帮助工程师和学生掌握高精度GNSS定位技术。特别适合需要处理静态测量和动态定位场景的用户。

weixin_28683391的博客 360

SpringBoot+Vue+Mysql社区医院信息平台(源码+文档)

SpringBoot+Vue+Mysql学生宿舍信息管理系统 WEB端软件项目(源码+文档) 项目包含:①完整源码(后端+管理后台+用户前台);②数据库脚本文件;③万字论文文档;④开题报告;⑤答辩PPT;⑥项目运行视频教程。 项目架构: B/S 架构、MVC 分层设计 技术栈: Java、MySQL、SpringBoot、MyBatis-Plus、Token 权限校验、管理后台 Vue+ElementUI+ECharts、用户前台 Layui+jQuery、Maven 构建。 一、角色设计 学生用户: 注册登录、浏览宿舍信息、查询宿舍安排、在线报修、缴费查询、失物招领、桶装水预订、评论交流、收藏等。 商家用户: 注册登录、桶装水品牌与商品信息维护、预订订单查看与处理。 维修人员: 注册登录、查看待处理报修、接单维修、填写报修处理结果与进度反馈。 管理员: 学生管理、班级管理、宿舍信息管理、宿舍安排管理、报修处理管理、缴费信息管理、卫生检查与文明宿舍管理、失物招领管理、桶装水与商家管理、维修人员管理、公告资讯与轮播图管理等。 二、前台功能模块(学生端) 1. 首页展示:轮播图、宿舍公告、最新动态推荐、常用服务快速入口 2. 宿舍信息模块:宿舍列表、楼栋与房间条件筛选、宿舍详情查看、我的宿舍安排查询 3. 在线报修模块:在线提交宿舍设施报修申请、上传故障描述、查看报修进度与维修处理结果 4. 缴费模块:水电等缴费记录查询、缴费状态查看 5. 卫生检查与文明宿舍:宿舍卫生检查结果公示、文明宿舍展示 6. 失物招领模块:失物信息发布、招领信息发布、详情查看、评论互动 7. 桶装水预订:桶装水品牌与商品浏览、在线预订、我的预订记录查询 8. 假期留宿:假期留校申请提交、申请记录查询 9. 评论与收藏:信息评论、查看他人评论、评论回复互动、收藏感兴趣的内容 10. 个人中心...

YOLOv8作物病害检测实战源码

这是一套基于YOLOv8n的农田病虫害目标检测系统,对叶片照片做目标检测,识别健康叶片、褐斑病、白粉病、锈病四类,并给出对应防治建议。全流程纯CPU可跑,配套交付完整Python源码、9章实战教程(md/html/pdf三种格式)、100张自造样本及YOLO标签、训练曲线与混淆矩阵截图、Tkinter界面和答辩PPT。 系统围绕五项功能展开:同一套推理逻辑覆盖图像、视频、摄像头三种来源;图形界面选文件即检测,画面叠彩色框标注病名与置信度,右侧面板同步给出症状与防治措施;检测记录自动写入CSV,统计页一键生成四类病害占比饼图;训练结束自动产出损失与精度曲线;内置防治建议文案库,检测命中即回填面板。 选型用YOLOv8n nano档,参数量约320万、权重约6.2MB,CPU单帧几十毫秒,小样本训练5到8分钟完成。数据由data_gen.py程序化绘制100张叶片图,固定随机种子,重跑分布一致,不依赖公开数据集。依赖全部锁版本,教程第7章整理了19条真实报错及排查方法,第8章给出换模型档、换PlantVillage数据集的迁移路径。 适合做计算机视觉方向课程设计或毕业设计的学生,也适合智慧农业方向想了解检测模型如何落进业务面板的学习者。不需要GPU,不需要系统学过目标检测,教程第3章会按需补齐原理。 使用时先pip install -r requirements.txt装好依赖,download_data.py下载预训练权重,data_gen.py生成样本后train.py训练,完成后用main.py infer批量检测或main.py gui启动界面。

【信息科学与工程学】【通信工程】第三百零五篇 网络中的几何/拓扑/离散数学/组合数学 01

矩 accountant 累计。Bluetooth LE广告包。单细胞RNA-seq计数矩阵。梯度AllReduce算法。蛋白质-蛋白质相互作用网络。联邦学习本地epoch数。资本资产定价模型beta。联邦学习客户端采样比例。联邦学习服务器聚合权重。变分量子本征求解器参数。抵押贷款支持证券现金流。数据加载器工作进程数。流水线并行微批次数量。学习感知图像块相似度。边缘设备CPU利用率。ZigBee网络地址。量子近似优化算法参数。宇宙微波背景温度涨落。

weixin_49199313的博客 246

数据挖掘实战:决策树 + 聚类 + 关联规则,零 Key 离线可跑(Python 源码)

数据挖掘实战包。用 Python 标准库实现 CART 风格决策树、K-Means 聚类与 Apriori 关联规则,在虚构「星河便利店」会员表和购物篮上跑通分类、分群与购物篮分析,并给出准确率、轮廓系数、支持度/置信度/提升度。零第三方依赖、零 API Key 即可离线跑通。含 4 个样例、离线冒烟、中文 README(含「使用方法」)。均为作者原创可运行源码。MIT。作者 blog.youkuaiyun.com/mtl1994

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?.docx

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

PSIM-三相维也纳VIENNA整流器电压电流双闭环+中点电位平衡SVPWM控制仿真

内容概要:本文档详细介绍了一种基于PSIM软件实现的三相维也纳(VIENNA)整流器仿真模型,重点实现了电压电流双闭环控制与中点电位平衡的SVPWM调制策略。该仿真系统通过精确的控制算法有效提升了整流器的功率因数,降低了输入电流谐波含量,并解决了三电平拓扑中常见的直流侧中点电位偏移问题,具有较高的工程实用价值,适用于高效率、高功率密度的电力电子系统设计与科研验证。文档还整合了丰富的配套资源,涵盖多种电力电子变换器拓扑结构、先进控制算法及典型应用场景,形成了系统化的技术资料体系,有助于深入理解现代整流技术的核心原理与发展动态。; 适合人群:面向从事电力电子、电气工程、新能源变换系统等领域的科研人员、高校研究生以及具备一定仿真基础的工程技术人员。; 使用场景及目标:①深入研究三相VIENNA整流器的工作机理与控制特性;②掌握电压外环、电流内环双闭环控制结构的设计方法;③理解并实现SVPWM调制技术与中点电位平衡控制策略的协同作用;④开展相关控制算法的仿真验证、性能优化与实验对比,为高性能整流装置的研发提供理论支撑和技术原型。; 阅读建议:建议结合文中列出的其他仿真案例(如PWM整流器、LLC谐振变换器、DAB变换器等)进行横向对比学习,充分利用所提供的PSIM、MATLAB/Simulink等多平台仿真资源,重点关注控制逻辑与主电路的耦合关系,通过参数调试与波形分析深化对系统动态响应和稳态性能的理解,强化“理论—建模—仿真—优化”的闭环研究能力。

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

产业园区运营负责人如何利用数智工具提升园区企业的技术对接效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员如何系统化管理科技成果信息?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

ICD10 openGauss版

ICD10 openGauss版

科技中介服务机构如何构建标准化、模块化的智能服务工具?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

上一篇: GNSS 历元间载波相位差分(TDCP):数学原理与测速应用
下一篇: 基于 PPP-AR 的大气提取:三种坐标策略、数学原理与工程实现
云卷云苏~
博客等级 码龄2年 35粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云卷云苏~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值