时间:4小时
日期:2023年11月
该研究报告的目标是根据卫星/接收器之间的伪距离测量来计算GPS系统用户的轨迹。问题的难点在于这些测量值与待估参数之间的非线性关系,并且还受到附加测量噪声的干扰。为了克服这些困难,采用了线性化的最小二乘算法版本。在研究算法在不利导航条件下的鲁棒性后,将通过计算几何精度因子 (Dilution of Precision, DOP) 来评估卫星星座的几何结构对GPS性能的影响。
1. 研究报告背景
在本研究中,我们关注一辆配备了GPS的汽车,该车在塔朗斯市(Talence)沿图1所示的路线行驶。在导航中,必须明确指出车辆运动所处的参考系。特别地,两个参考系在本研究中是有用的:
参考系1:
此参考系是GPS导航的地球中心地固(ECEF)参考系,卫星的坐标通常在该参考系中表示。其原点是地球中心O,x轴位于黄道平面(赤道)和格林尼治子午线的交点,z轴与地球极轴重合并指向北极,y轴则定义为与x轴和z轴形成右手坐标系。
参考系2:
此参考系是本地的北东地( NED)坐标系,用于可视化车辆的运动。该坐标系以地面上的某个点P0为中心,其轴分别指向局部垂直方向、北方和东方。
这两个参考系之间的关系在图2中给出。连接两个参考系中向量坐标的公式为:


2. 回顾:利用最小二乘法计算位置
2.1 最小二乘法算法
最小二乘法算法用于从带噪声的观测值中估计一组未知参数,这些观测值与待估参数线性相关。该问题可通过以下数学方式表述:
其中:
- X 是包含未知参数的状态向量,
- Z 是观测值向量,
- w 是观测噪声向量。
2.2 GPS中的应用
在GPS导航问题中,每时每刻待估参数包括车辆在三维空间中的位置 (x, y, z) 以及接收器的时钟偏移b。它们组成了状态向量 X = (x, y, z, b)^T,并通过伪距离测量与GPS信号的关系表示为:
最小二乘法算法是为线性系统开发的,因此需要对公式 (4) 进行线性化以便应用。通过在参考点 Xr 处进行泰勒展开,我们得到:
该方法的有效性取决于选择的线性化参考点,不应偏离真实状态向量 X 太远。在GPS导航中,通常选择前一个位置和时钟偏移的估计值作为线性化参考点。
Ht矩阵的系数取决于GPS卫星相对于接收器的位置。该矩阵反映了卫星几何结构对位置估计误差的影响。
3. 精度稀释因子 (DOP)
如前所述,定位误差既依赖于测量的不确定性,也依赖于卫星星座的几何结构。对于同样的测量误差向量,由于卫星相对于接收器的相对位置不同,位置估计误差可能大小不同。卫星星座的影响通过一个称为精度稀释因子 (DOP, Dilution of Precision) 的量化因子来衡量,它定义如下:
其中 σ 是测量噪声的标准差,RMSE 是位置估计的均方根误差:
DOP 的表达式可以从最小二乘法的定位问题解中推导。我们回顾如下公式:
因此,位置估计误差满足:
其中 w(t) 是测量噪声。通过观察:
我们可以证明:
这个因子用于计算位置和时钟偏移估计误差的量级,因此可以衡量GPS解的可信度。如果只考虑位置误差(不考虑时钟偏移估计),则可以计算位置精度稀释因子 (PDOP, Position Dilution of Precision):
根据位置所在的参考系,还可以计算垂直精度稀释因子 (VDOP, Vertical DOP) 和水平精度稀释因子 (HDOP, Horizontal DOP)。
4. 提供的数据描述
为了解决定位问题,GPS数据保存在文件 "donnees GPS TP.mat" 中。这些数据包括:
- 每个时刻车辆轨迹点的GPS伪距离。数据每秒记录一次,记录N秒。所考虑的接收器具有8个追踪通道,因此最多可以同时处理8个测量。
- 卫星相对于接收器的坐标,以WGS84坐标系表示。
此外,为了评估导航算法的性能,车辆的真实轨迹以本地坐标系表示,并保存在文件 "trajectoire TP.mat" 中。
数据格式
| 数据类型 | 变量名 | 维度 |
|---|---|---|
| GPS伪距离 | PRN | 8 × T |
| 卫星坐标 | XYZsat | 8 × 3 × T |
| 车辆轨迹 | Xloc | 3 × T |
当GPS数据不可用时,PRN和XYZsat表格包含NaN值。最后,提供了程序 llh2xyz.m,该程序用于根据椭球坐标(以弧度表示的纬度和经度、高度)计算点的笛卡尔坐标。
5. 问题
-
参阅附录,通过将参考系1到参考系2的变换分解为两次旋转,推导矩阵M的表达式(2)。
[!IMPORTANT]
需要从参考系 1 (ECEF) 到参考系 2 (NED) 的变换分解为两次旋转
因此矩阵 M 包含两个旋转:
绕 z 轴的旋转,角度为经度 \lambda ,将参考系从 ECEF 转换到中间参考系:M_1 = \begin{pmatrix} \cos \lambda & -\sin \lambda & 0 \\ \sin \lambda & \cos \lambda & 0 \\ 0 & 0 & 1 \end{pmatrix}绕 y 轴的旋转,角度为纬度 \phi ,将中间参考系转换到 NED 参考系:M_2 = \begin{pmatrix} -\sin \phi & 0 & \cos \phi \\ 0 & 1 & 0 \\ -\cos \phi & 0 & -\sin \phi \end{pmatrix}通过将这两个矩阵相乘,可以得到从参考系 1 到参考系 2 的转换矩阵 M :
M = M_2 M_1 = \begin{pmatrix} -\sin \lambda \cos \phi & -\sin \phi & -\cos \lambda \cos \phi \\ -\sin \lambda \sin \phi & \cos \phi & -\cos \lambda \sin \phi \\ \cos \lambda & 0 & -\sin \lambda \end{pmatrix}详细解释: 这里有问题,不一定是正确答案
我们的目的是从地球坐标系 (ECEF) 转换到本地坐标系 (NED)
• ECEF 坐标系的原点是地心 • NED 坐标系的原点是地面上的某一点,坐标系的三个轴分别指向北(N)、东(E)和地面法线向下(D,Down)为了完成这个转换,必须进行两次旋转:一次绕 z 轴的旋转,另一次绕 y 轴的旋转
第一步:
绕 z 轴旋转,这个旋转用于将地球坐标系 (ECEF) 的 x 轴和 y 轴对准我们定义的地面本地坐标系 (NED) 的相应方向。具体来说,绕 z 轴的旋转使得 NED 坐标系中的北方向(N)与经线的方向对齐,而东方向(E)与纬线的方向对齐。这个旋转的角度是经度 λ

为什么绕 z 轴旋转? • 当我们选择一个地面上的参考点 P_0 ,我们希望它的局部坐标系能对应于地面的实际方向(北、东、下)。 • 绕 z 轴旋转可以调整 x 和 y 轴,使得它们与参考点的经线和纬线方向一致。第二步:
绕 y 轴旋转,用于调整 z 轴的方向,使它与地面的垂直方向(即“下”方向)对齐。这个旋转的角度是纬度 φ ,它决定了 z 轴的倾斜程度。
-
使用程序 llh2xyz 计算参考点P0(参考系2的原点)在参考系1中的坐标。对于所研究的轨迹,参考点的高度为零,纬度为北纬44°48',经度为西经0°35'(注意:经度向东为正)。提示:1' = 1/60°。
[!IMPORTANT]
通过给定的纬度(44°48’ 北纬)、经度(0°35’ 西经)和零海拔高度,我们可以计算参考点 P_0 在 ECEF 参考系中的坐标,首先将纬度和经度转换为十进制度数:
纬度: 44^\circ 48' \\ • 转换为十进制度数: 44 + \frac{48}{60} = 44.8^\circ \\ • 转换为弧度: \frac{44.8 \times \pi}{180} = 0.781907 \, \text{弧度}\\ 经度: 0^\circ 35' \\ • 转换为十进制度数: -(0 + \frac{35}{60}) = -0.5833^\circ (因为是西经)\\ • 转换为弧度: \frac{-0.5833 \times \pi}{180} = -0.010178 \, \text{弧度} \\现在我们有 \phi = 0.781907 \, \text{弧度} , \lambda = -0.010178 \, \text{弧度} ,和 h = 0 \, \text{米} 。function xyz = llh2xyz(llh) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Ce programme transforme un triplet de coordonnées ellipsoidales % (latitude, longitude, altitude) en coordonnées cartésiennes dans le % repère WGS84. % Entrée : % llh = (latit, longi, alti), triplet de coordonnées ellipsoidales % Sortie : % xyz : triplet de coordonnées cartésiennes % %将经纬度和海拔高度的椭球坐标转换为 ECEF(地心地固)坐标系中的笛卡尔坐标 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% phi = llh(1); % latitude lambda = llh(2); h = llh(3); a = 6378137.0000; b = 6356732.0000; e=sqrt(1-(b/a)^2); sinphi = sin(phi); cosphi = cos(phi); coslam = cos(lambda); sinlam = sin(lambda); tan2phi = (tan(phi))^2; tmp=1-e^2; tmpden = sqrt(1+tmp*tan2phi); x = (a*coslam)/tmpden+h*coslam*cosphi; y = (a*sinlam)/tmpden+h*sinlam*cosphi; tmp2 = sqrt(1-(e*sinphi)^2); z = (a*tmp*sinphi)/tmp2+h*sinphi; xyz(1) = x; xyz(2) = y; xyz(3) = z;输入: • llh(1) 为纬度 \phi (以弧度表示) • llh(2) 为经度 \lambda (以弧度表示) • llh(3) 为海拔高度 h (以米为单位) 椭球参数: • a 是 WGS84 椭球的长半轴(赤道半径),等于 6378137.0000 米。 • b 是 WGS84 椭球的短半轴(极半径),等于 6356732.0000 米。 • e 是椭球的第一偏心率。 输出: • xyz(1)、xyz(2) 和 xyz(3) 分别是转换后的 ECEF 坐标系中的 x、y、z 坐标。% 定义经纬度和高度 latitude_deg = 44 + 48/60; % 纬度 44°48' 北 longitude_deg = -(0 + 35/60); % 经度 0°35' 西 (转换为负值) altitude = 0; % 海拔高度,假设为 0 米 % 将经纬度从度转换为弧度 latitude_rad = deg2rad(latitude_deg); % 纬度转换为弧度 longitude_rad = deg2rad(longitude_deg); % 经度转换为弧度 % 创建包含纬度、经度和高度的向量 llh = [latitude_rad, longitude_rad, altitude]; % 调用 llh2xyz 函数计算 ECEF 坐标 xyz = llh2xyz(llh); % 输出结果 disp('ECEF 坐标:'); disp(['X: ', num2str(xyz(1)), ' m']); disp(['Y: ', num2str(xyz(2)), ' m']); disp(['Z: ', num2str(xyz(3)), ' m']);得到结果ECEF 坐标: X: 4533051.7704 m Y: -46152.9905 m Z: 4471583.3721 m -
通过应用最小二乘法算法,使用提供的GPS数据找出车辆在塔朗斯市的轨迹(在参考系1和参考系2中)
[!IMPORTANT]
回顾之前在此TP中应用最小二乘法的线性化步骤
GPS 伪距方程为: Y(t) = h_t(x, y, z, b) + w(t)\\ 其中 h_t(x, y, z, b) 是一个依赖卫星位置的非线性函数, w(t) 是噪声。为了应用最小二乘法,我们对方程进行一阶泰勒展开线性化:\\ Y(t) - h_t(x_r, y_r, z_r, b_r) = H_t (X - X_r) + w(t)\\ H_t 是伪距函数 h_t 对状态向量分量 (x, y, z, b) 的偏导数。\\通过最小二乘法,状态向量 X 的估计值为: \hat{X} = (H_t^T H_t)^{-1} H_t^T Z此估计值就是我们得到的车辆的运动轨迹,用估计值去更新状态向量,再用新的状态向量来计算得到伪距误差,不断迭代,直至估计值收敛。即在每个时刻 t 进行迭代,不断更新估计位置,将每个时刻得到的位置依次排列,就可以得到车辆的完整轨迹。
%% Question 3 load('donnees_GPS_TP.mat'); % 加载GPS卫星数据文件 "donnees_GPS_TP.mat" T = size(PRN, 2); % 获取观测时间点的数量(PRN的列数);也就是我们对其进行了954次时间采样 Xest = zeros(4, T); % 初始化车辆位置的估计结果矩阵,大小为4行954列,每一行都有954个随时间变化得到的数据。用于储存 Xloc_est = zeros(3, T); % 初始化局部NED坐标系下的估计位置矩阵,大小为3行T列。也就是评估的车辆位置 b = 0; % 定义初始偏差b为0 M = [-sla*clon, -slon, -cla*clon; % 构建旋转矩阵M,用于从ECEF转换到局部NED坐标系 -slon*sla, clon, -cla*slon; cla, 0, -sla]; for t = 1:T % 遍历每个时间点 ind = find(~isnan(PRN(:, t))); % 找到在当前时间t可用的卫星索引,即非NaN值的行。可以是很多行 Y = PRN(ind, t); % 利用当前时间和当前可用的索引值获取对应时间t的卫星观测值 nb_mes = length(ind); % 获取该时刻可用的观测值数量。也就是当前时间非NaN值的行有几个。 % Initialiser les vecteurs h et H h = zeros(nb_mes, 1); % 初始化观测值的预测向量h。有几个可用值,就相当于有几个可用卫星。 H = zeros(nb_mes, 4); % 初始化测量矩阵H,用于后续线性化,有四列的原因是需要分别算x,y,z,b的梯度 % Construction de z for i = 1:nb_mes % 遍历所有可用的卫星测量 % Calcul de la mesure prédite h(i) % 计算预测的观测值h(i),根据P0和卫星位置计算欧氏距离并加上偏差b h(i) = sqrt((xyz_P0(1, 1) - XYZsat(ind(i), 1, t))^2 + ... (xyz_P0(1, 2) - XYZsat(ind(i), 2, t))^2 + ... (xyz_P0(1, 3) - XYZsat(ind(i), 3, t))^2) + b; % Calcul du gradient de h par rapport à Xest % 计算预测值的梯度,更新测量矩阵H的前三列(位置部分) 这里比较复杂 H(i, 1:3) = (xyz_P0(1:3) - XYZsat(ind(i), :, t)) / h(i); H(i, 4) = 1; % 更新测量矩阵H的最后一列(偏差部分) end DOP(t) = sqrt(trace(inv(H' * H))); % 计算精度稀释因子DOP % Construction de z % 构造观测残差z,将观测值与预测值和初始估计值差计算出来 z = Y - h + H * [xyz_P0'; 0]; % Application de la méthode des moindres carrés % 使用最小二乘法估计位置和偏差,结果存储在Xest中 Xest(:, t) = pinv(H) * z; % 将估计的ECEF坐标转换为局部NED坐标 Xloc_est(:, t) = inv(M) * (Xest(1:3, t) - xyz_P0'); end % 绘制3D估计轨迹 figure, plot3(Xest(1, :), Xest(2, :), Xest(3, :)); title('Graphique 3D de la trajectoire estimée du véhicule dans le repère 1 (ECEF)') % 绘制局部NED坐标系下的真实轨迹和估计轨迹 figure plot(Xloc(1, :), Xloc(2, :), 'r'), hold on % 绘制真实轨迹 plot(Xloc_est(1, :), Xloc_est(2, :), 'b') % 绘制估计轨迹 title('Trajectoire réelle et de la trajectoire estimée du véhicule dans le repère 2 (local NED)') legend('Trajectoire réelle', 'Trajectoire estimée') % 添加图例 % 绘制DOP随时间的变化 figure plot(DOP) title('Graphique de la Dilution of Precision (DOP) en fonction du temps') xlabel('Temps') ylabel('Dilution of Precision (DOP)') -
修改提供的GPS数据以模拟干扰(增加测量噪声的方差)和多路径效应(在一个或多个GPS测量中引入偏差)。研究算法对这些扰动的鲁棒性,特别是可以研究均方误差随误差幅度的变化。
[!IMPORTANT]
均方误差:\ \ \ \text{MSE} = \frac{1}{N} \sum_{t=1}^N \|\hat{X}(t) - X(t)\|^2 \\ 其中 X(t) 为真实位置, \hat{X}(t) 为估计位置其他部分不会
-
从公式(7)和(8)推导公式(7)和(9)的关系。
[!IMPORTANT]
推导公式 (7):\\ 从最小二乘法的解开始:\\ \hat{X} = (H_t^T H_t)^{-1} H_t^T Z(t)\\ 将 Z(t) = H_t X + w(t) 代入,得到:\\ \hat{X} = (H_t^T H_t)^{-1} H_t^T (H_t X + w(t))\\ 简化后为:\\ \hat{X} = X + (H_t^T H_t)^{-1} H_t^T w(t)\\ 因此,估计值的误差为:\\ \hat{X} - X = (H_t^T H_t)^{-1} H_t^T w(t)推导公式 (9):\\均方根误差 \text{RMSE} 用来衡量估计值 \hat{X} 和真实值 X 之间的误差\\方法一。我个人认为不好,不恰当
\text{RMSE} = \sqrt{\mathbb{E} \left[ \|X - \hat{X}\|^2 \right]}=\sqrt{\mathbb{E} \left[ \|(H_t^T H_t)^{-1} H_t^T w(t)\|^2 \right]}||Av||^2 = v^T A^T Av\left\| (H_t^T H_t)^{-1} H_t^T w(t) \right\|^2 = w(t)^T H_t (H_t^T H_t)^{-1} (H_t^T H_t)^{-1} H_t^T w(t)\\ RMSE^2 = E \left[ w(t)^T H_t (H_t^T H_t)^{-1} (H_t^T H_t)^{-1} H_t^T w(t) \right]\\ 注意:\ \ \ (H_t^T H_t)^{-1} 是一个对称矩阵。对于对称矩阵 A ,我们有 A^T = A因为w(t) 是零均值、方差为σ2的高斯白噪声\\ RMSE^2 = \sigma^2 \text{Trace}\left( H_t (H_t^T H_t)^{-1} (H_t^T H_t)^{-1} H_t^T \right)=\sigma^2 Trace((H_t^{-T}H_t^{-1}))=\sigma^2 Trace((H_tH_t^{T})^{-1})=\sigma^2 Trace((H_t^{T}H_t)^{-1})因为:\ \ RMSE = DOP × σ\\ 所以:\ \ DOP = \sqrt{\text{Trace}((H_t^T H_t)^{-1})}方法二。
误差向量的协方差矩阵 \Sigma_{\Delta X \Delta X} 可以用来表示估计误差的统计特性\\因此,均方根误差也可以通过协方差矩阵来表达:\\ \text{RMSE} = \sqrt{\text{Trace}(\Sigma_{\Delta X \Delta X})}\\ \text{Trace}(\Sigma_{\Delta X \Delta X}) 是协方差矩阵的迹,即矩阵对角线元素的和,它表示所有误差分量的方差之和。\mathbb{E} \left[ \|X - \hat{X}\|^2 \right] = \text{Trace}(\Sigma_{\Delta X \Delta X})\ \ \ \ \ \ \ \ \text{avec} \ \Sigma_{\Delta X \Delta X} = \mathbb{E} \left[ (X - \hat{X})(X - \hat{X})^T \right]\Sigma_{\Delta X \Delta X} = E\left[ \left( (H_t^T H_t)^{-1} H_t^T w(t) \right) \left( (H_t^T H_t)^{-1} H_t^T w(t) \right)^T \right]由于 w(t) 是零均值的高斯白噪声,且 E[w(t)w(t)^T] = \sigma^2 I ,我们可以得到:\\ \Sigma_{\Delta X \Delta X} = (H_t^T H_t)^{-1} H_t^T E[w(t)w(t)^T] H_t (H_t^T H_t)^{-1}=\sigma^2(H_t^T H_t)^{-1} H_t^T H_t (H_t^T H_t)^{-1}\\ \Sigma_{\Delta X \Delta X} = \sigma^2H_t^{-1}H_t^T= \sigma^2 (H_t^T H_t)^{-1}\text{RMSE} = \sqrt{\text{Trace}(\Sigma_{\Delta X \Delta X})}\\ and \ \ \ \ \ RMSE = DOP \times \sigma \\ donc\ \ \ DOP = \sqrt{\text{Trace}((H_t^T H_t)^{-1})} -
计算车辆轨迹上的DOP因子,并验证其与位置估计结果的合理性。还可以计算PDOP、VDOP和HDOP。对于后两个术语的计算,需要在本地参考系中进行分析。
[!IMPORTANT]
• PDOP(位置精度衰减因子):仅考虑三维位置的影响。 • HDOP(水平精度衰减因子):仅考虑水平方向位置的影响(即北方和东方的误差)。 • VDOP(垂直精度衰减因子):仅考虑垂直方向的影响。HDOP = \sqrt{\tilde{H_t}(1,1) + \tilde{H_t}(2,2)} \\ VDOP = \sqrt{\tilde{H_t}(3,3)}
附录
考虑从参考系R'(定义为轴 (x', y', z') )到参考系R( 定义为轴 (x, y, z) )的变换矩阵M,满足:
其中X'和X分别是点在参考系R'和R中的坐标向量。矩阵M的列是参考系R'中单位向量在参考系R中的坐标。因此,如果两个参考系之间的变换是绕z轴旋转θ角,如下图所示,则M满足:
类似的推理也适用于绕x轴或y轴的旋转。
