(三)基于MATLAB计算卫星位置

(二)基于MATLAB计算卫星位置

参数由读取导航文件(.n)得到。

GM=3.986005e+14;   %万有引力常数
OMEGAedot=7.2921151467e-5;   %地球自转角速度 (rad)
  %(1)计算规划时间 
    if  tk >302400
        tk=tk-604800;
    end
    if  tk <-302400
        tk=tk+604800;
    end;
    %(2)计算卫星平均角速度并校正
    n0=sqrt(GM)/Nav(j).sqrtA^3;
    n=n0+ Nav(j).dn;
    %(3)计算平近点角Mk
    Mk=Nav(j).M0+n*tk;  
    %(4)计算偏近点角Ek
    %EK在电离层校正时会用到
    Ek=Mk;
    while 1
      Ek_=(Mk+Nav(j).ec*sin(Ek));
      if (abs(Ek_-Ek)<10^(-12))
          Ek=Ek_;
          break;
      else
         Ek=Ek_;
      end;
    end; 
    if Ek < 0
       Ek = Ek + 2*pi;
    end
    %(5)计算真近点角
    Vk = atan(sqrt(1-Nav(j).ec^2)*sin(Ek)/(cos(Ek)-Nav(j).ec));
    if (cos(Ek)-Nav(j).ec)/(1-Nav(j).ec*cos(Ek)) < 0
        Vk = Vk - pi;
    end
    %(6)计算升交点角距
    u=Vk+Nav(j).omega;
    %(7)摄动校正项
    delta_uk = Nav(j).cus*sin(2*u) + Nav(j).cuc*cos(2*u);
    delta_rk = Nav(j).crs*sin(2*u) + Nav(j).crc*cos(2*u);
    delta_ik = Nav(j).cis*sin(2*u) + Nav(j).cic*cos(2*u);
    %(8)代入校正项
    uk = u + delta_uk;
    rk = Nav(j).sqrtA.^2*(1-Nav(j).ec*cos(Ek)) + delta_rk;
    ik = Nav(j).i0 + Nav(j).idt*tk + delta_ik;
    %(9)卫星在轨道平面位置
    xk = rk*cos(uk);
    yk = rk*sin(uk);
    %(10)升交点赤经
    OMEGAk = Nav(j).OMEGA0 + (Nav(j).OMEGAdot - OMEGAedot)*tk - OMEGAedot*Nav(j).toe;
    %(11)坐标系变换至WGS-84坐标系
    Xk = xk*cos(OMEGAk) - yk*cos(ik)*sin(OMEGAk);
    Yk= xk*sin(OMEGAk) + yk*cos(ik)*cos(OMEGAk);
    Zk = yk*sin(ik);
    %(12)地球自转修正
    X=Xk*cos(OMEGAedot*Dt)+Yk*sin(OMEGAedot*Dt);
    Y=-Xk*sin(OMEGAedot*Dt)+Yk*cos(OMEGAedot*Dt);
    Z=Zk;
    SatPos=[X,Y,Z];
  • 8
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值