logo资料库

GPS用户位置求解MATLAB.pdf

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
GPS 定位技术与应用实验 ——GPS 用户位置求解 Matlab 仿真 一、定位原理 GPS 用户对卫星 j 进行伪距测量,产生观测方程:  j  ( x j  x u 2 )  ( y j  y u 2 )  ( z j  z u 2 )  c  u (1) 其中(xj, yj, zj)表示第 j 颗卫星的位置坐标;(xu, yu, zu)是用户的位置坐标,u 是用户接收机 钟与 GPS 系统时钟的相对误差。设一共观测到 N 颗卫星,则得到方程组:   x ( 1 x ( 2   x u x u 2 2 ) )   ( ( y 1 y 2 2 y u y u ) )  2  2 z ( 1 z ( 2   z u z u ) ) 2  c  u c   u (2)  1  2          N      ( x N  x u 2 )  ( y N y u 2 )  ( z N  z u 2 )  c  u 定位的目的就是计算(xu, yu, zu)和u。 直接求解上述非线性方程组十分困难。可以采用牛顿迭代法这种常用的数值计算方 法,其中的关键思想是线性化及最小二乘法。具体过程如下: 对用户位置进行估计,得到估计位置坐标(x0, y0, z0),用(x, y, z)表示估计位置与 真实位置的偏移量,即 x u y u z u         x 0 y z 0 0 x   y   z   (3) f x y z ( , u , u u )  ( x j  x u 2 )  ( y j  y u 2 )  ( z j  z u 2 ) ,并把它在(x0, y0, z0)做一阶泰勒级数展 设 开得: f x y z ( , u , u u )   f x y z ( , , 0 0 f x y z ( , , 0 0 )  0 )  0 0 f x y z , (  , 0 x  0 x  0 f x y z , , ( x j ) 0 x   x   ) ) 0 y   0 f x y z ( ,  , 0 y  0 y  0 f x y z , ( , y j y   ) 0 ) 0 z  (4) 0 f x y z ( ,  , 0 z  z  0 f x y z , ( , z 0 j 0 0 z  ) 0 0 因此,把对卫星 j 的观测方程线性化后得到: 0 0 0 0  j  f x y z ( , , 0 0 )  0 j x x 0 f x y z , (  , 0 0 x   ) 0 j y y 0 f x y z ( ,  , 0 0 y   ) 0 j z z 0 f x y z ( ,  , 0 0 z   c  u (5) ) 0
令    j a xj a yj a zj              j 0 ) ) j 0 0 y , 0 x f x y z , ( 0 x  0 f x y z , , ( 0 y  0 f x y z , ( , 0 z  0 f x y z , ( , z 0 j j 0 0    ) 0 ) 0 伪距观测方程变化为:    j a xj x a       y a z yj zj c  u 把方程组(2)中的每个方程线性化,得到下面的线性方程组:     1      2      a a x 1 x 2 x a   x a   y a   z y a   1 z c    u c z    u z 2 y 1 y 2  a xN x a   yN y a   zN z   c  u  N 把(8)写成矩阵形式,可得: 其中 ρ      1     2  ,       N H         x 1 2 a a x  a xN 1 2 y a a y  a yN ρ H x    1   1   ,   1   x   x     y  z     c   u 。 1 2 z a a z  a zN (6) (7) (8) (9) 按照上述方法,求解非线性方程组(2)的问题被转化为求解线性方程组(见(8)和(9))。 如果只能观察到 4 颗卫星,即 N=4,(8)和(9)是个根据 4 条线性方程求解 4 个未知 数的问题,具有唯一解: x H ρ    1 (10) 如果能观察到的卫星数量大于 4,即 N>4,求解(8)和(9)是个超定方程组(即方程数量大 于未知数的数量),此时需要使用最小二乘法求,解的形式为: x H H H ρ    1  ( ) T T (11) 求出(x, y, z)后,使用(3)便求出用户坐标。 迭代:因为线性化使用了一阶泰勒级数展开近似,这种近似只有当估计坐标(x0, y0, z0) 非常接近真实坐标(xu, yu, zu)时才有效。如果(x, y, z)太大,需要用本次计算得出的坐 标(xu, yu, zu)作为下一次计算的估计坐标(x0, y0, z0),重新迭代上述计算过程,直到计算得 到的(x, y, z)的值比较小为止。
二、Matlab 程序代码 下面 Matlab 程序完成利用伪距测量用户位置的 Matlab 仿真计算。 1、主程序 SatellitePosition=[17746 17572 7365 1; 12127 -9774 21091 1; 13324 -18178 14392 1; 14000 -13073 19058 1; 19376 -15756 -7365 1; zeros(19, 4)]; %卫星位置 %卫星位置坐标,每一行数据的前三列分别表示卫星的X、Y、Z坐标值,第4列数据表示本颗卫星是 否可见,1为可见,0为不可见。 UserPosition=[6400 0 0 ]; %用户真实位置(注意:定位程序并未用到此参数) Prange=CalculatePseudoRange(SatellitePosition, UserPosition); %函数CalculatePseudoRange用于计算机模拟伪距测量结果,计算结果Prange是一个矢量,其 中的不同元素表示对不同卫星的伪距测量结果 [CalUserPosition, OK]=CalculateUserPosition2(SatellitePosition, Prange); %调用函数CalculateUserPosition2,进行定位计算,计算CalUserPosition中包含位置计 算结果。 2、伪距测量模拟函数 CalculatePseudoRange function Prange=CalculatePseudoRange(SatellitePosition,UserPosition) %计 算机模拟伪距测量 c=3e5; %光速,单位:km/s; DeltaT=1e-4; %钟差为 1e-4 数量级秒,假设卫星钟间时钟一致,DeltaT=Tu-Ts;钟差不 宜超过 3e-4,否则不收敛; VisSatNum=0; %首先找出可以观测到的卫星数量 SatellitePosNew=[]; for k=1:24 if SatellitePosition(k,4)==1 VisSatNum=VisSatNum+1; SatellitePosNew=[SatellitePosNew; SatellitePosition(k,1:3)];
end %if end %for Prange=ones(1,VisSatNum); %求解用户接收机收到的伪距信息 for n=1:VisSatNum Prange(1,n)=sqrt( (SatellitePosNew(n,:)-UserPosition)' + c*DeltaT ); end (SatellitePosNew(n,:)-UserPosition) * 3、定位计算函数 CalculateUserPosition2 [CalUserPosition, function CalculateOK]=CalculateUserPosition2(SatellitePosition,Prange) %输入参数: %卫星位置坐标SatellitePosition,对每一颗可见卫星的伪距测量结果Prange %输出参数: %用户位置坐标:CalUserPosition,是一个矩阵,第一行表示最终定位结果,后面几行显示定位 计算的中间过程结果; %参数CalculateOK表示用户位置计算是否成功,1为成功,0为失败; %该程序用线性化方法求解四个或多个卫星的伪距、钟差方程,具体算法见课本 %假设我们接收到4个或者更多伪距后,有如下方程 %PR = sqrt( (xi-x)^2 + (yi-y)^2 + (zi-z)^2 ) + ct , i=1,2,3,4 %使用最小二乘法求解 c=3e5; %光速,单位:km/s; DeltaT=1e-3; %钟差为 1e-4 数量级秒,假设卫星钟间时钟一致,DeltaT=Tu-Ts;钟差不 宜超过 3e-4,否则不收敛; VisSatNum=0; CalculateOK=1; %首先找出可以接收到的卫星,多于4颗继续运算,否则返回 SatellitePosNew=[]; for k=1:24 if SatellitePosition(k,4)==1 VisSatNum=VisSatNum+1; SatellitePosNew=[SatellitePosNew; SatellitePosition(k,1:3)]; end end if VisSatNum<4 %不足 4 颗可见卫星 CalculateOK=0; CalUserPosition=[0 0 0]; return end
XYZ0=[0 0 0]; %给用户位置赋初值 CalculateRecord=XYZ0; %此变量用于保存每一步迭代计算的中间结果 DeltaT0=0; %时钟差初始值 Wxyz=SatellitePosNew; %卫星位置坐标 Error=1000; ComputeTime=0; while (Error>0.01) && (ComputeTime<1000) %开始迭代运算 ComputeTime=ComputeTime+1; R=ones(1,VisSatNum); for n=1:VisSatNum R(1,n)=sqrt( (Wxyz(n,:)-XYZ0) * (Wxyz(n,:)-XYZ0)' ) + DeltaT0*c; end %for DeltaP=R-Prange; A=ones(VisSatNum,3); for n=1:VisSatNum A(n,:)=(Wxyz(n,:)-XYZ0)./R(1,n); end H=[A ones(VisSatNum,1)]; DeltaX=inv(H'*H) * H' * DeltaP'; %最小二乘法求卫星位置 TempDeltaX=DeltaX(1:3,:); Error=max(abs(TempDeltaX)); XYZ0=XYZ0+DeltaX(1:3,:)'; if ComputeTime<10 CalculateRecord=[CalculateRecord; XYZ0]; end DeltaT0=DeltaX(4,1)/(-c); end %while if ComputeTime==1000 CalUserPosition=[0 0 0]; CalculateOK=0; else CalUserPosition=[XYZ0; CalculateRecord]; end 三、实验内容 1、熟悉 Matlab 编程的语法、环境。 2、定位程序是一个迭代运算程序,卫星坐标和用户坐标由上述语句给出,运行程序, 那么 出具体程序语句。) a) 写出最终算出的用户坐标结果(要求精确到小数点后 4 位); b) 写出程序的迭代计算次数; c) 通过编程,计算出每次迭代计算的中间结果与用户真实位置的距离。(要求:给
提示:CalculateUserPosition2 程序返回的变量 CalUserPosition 包含了每一次迭代计算 的中间结果。设用户真实坐标为(xu, yu, zu),迭代中间结果的坐标为(xc, yc, zc),则两者的 距离为: ( x u  x c 2 )  ( y u  y c 2 )  ( z u  z c 2 ) ,这反映了计算结果的误差。 3、把用户真实坐标设为(你的学号后四位+4000, 0, 0),保持卫星坐标不变,重复上述的 a)、b)、c)三步,分别给出程序运行结果。 四、思考题 1. 程序中的坐标是在哪个坐标系下的坐标?坐标的单位是什么? 2. 在实验中,卫星的位置坐标是已知量。问:在实际使用中,用户如何获知卫星的坐 标信息? 3. 定位计算,除了要知道卫星的坐标,还要知道伪距信息。问:a)什么叫伪距?b)伪 距信息如何获得? 4. 程序 CalculateUserPosition2 中,语句“XYZ0=[0 0 0];”给用户坐标附的初始值为(0, 0,0)。问(0,0,0)是否最佳的用户坐标初始值?有更好的用户坐标初始值吗? 为什么? 5. 程 序 CalculateUserPosition2 中 , while 语 句 的 判 断 条 件 为 “ (Error>1) && (ComputeTime<1000)”,即要求两个判断条件同时成立才循环,问:a)判断条件 Error>1 是什么意思?解释其物理含义。b)判断条件 ComputeTime<1000 是什么意 思?解释其在程序中的作用。 6. 程序 CalculateUserPosition2 中,语句“A(n,:)=(Wxyz(n,:)-XYZ0)./R(1,n);”是什么意 思?请用定位原理中的数学公式来解释。 7. 程序 CalculateUserPosition2 中,语句“XYZ0=XYZ0+DeltaX(1:3,:)';”是什么意思? 请用定位原理中的内容解释。 8. 指出程序需要改善的地方。 实验报告内容要求 1、结合 Matlab 程序叙述 GPS 的定位原理。 2、给出实验内容第 2、3 步的结果。 3、回答思考题。
分享到:
收藏