Advertisement

基于MATLAB计算卫星位置

阅读量:

matlab卫星定位

  • 认识星历文件观测文件及位置计算

    • 星历文件
    • 观测文件
    • matlab面对对象卫星位置计算
  • 卫星高度角方位角计算(待更新。。。)

认识星历文件观测文件及位置计算

初学者,欢迎指正批评。qigezhubajie@163.com

星历文件

参数说明以及对照
数据部分
星历文件表头部分不做介绍。
第一张图片为导航数据文件中数据记录部分说明,第二章为数据记录部分。
第二张图片中的数据部分与第一张图片中的参数一一对应。
第二张图片中加灰部分为数据有效范围。

观测文件

在这里插入图片描述
观测文件表头部分不做介绍。
1

matlab面对对象卫星位置计算

时间转化模块不做介绍,自行查阅文件。
一定要自己敲一遍,理解的更深刻。
classdef satlite < handle
properties
PRN; af2; M0; sqrtA; delta_n; e ;
omega; Cuc; Cus; Crc; Crs; i0;
i_dot; Cic; Cis; OMEGA; OMEGA_dot;
toe ; af0; af1; toc;
X ; Y ; Z;
miu = 3.986005e14; % 地心引力常数
we = 7.2921151467e-5; % 地球自转角速度
tg%观测时间
end
methods
function self = satlite(PRN, af2, M0, sqrtA, delta_n, e, omega, …
Cuc, Cus, Crc, Crs, i0, i_dot, Cic, Cis, OMEGA, OMEGA_dot, …
toe, af0, af1, toc,tg)
self.PRN = PRN;self.af2 = af2;self.M0 = M0;
self.sqrtA = sqrtA;self.delta_n = delta_n;self.e = e;
self.omega = omega;self.Cuc = Cuc;self.Cus = Cus;
self.Crc = Crc;self.Crs = Crs;self.i0 = i0;
self.i_dot = i_dot;self.Cic = Cic;self.Cis = Cis;
self.OMEGA = OMEGA;self.OMEGA_dot = OMEGA_dot;
self.toe = toe;self.af0 = af0;
self.af1 = af1;self.toc = toc;
self.tg = tg;
end
function position(self)
%计算平均角速度
a = self.sqrtA^2;
n0 = sqrt(self.miu)/(self.sqrtA^3);
n = n0 + self.delta_n;
%计算归化时间
tb = self.af0 + self.af1*(self.tg - self.toc) + self.af2*(self.tg - self.toc)^2;
ts = self.tg - tb;
tk = ts - self.toe;
% 计算平近点角
Mk = self.M0 + n * tk;
% 计算偏近点角Ek
%迭代计算:相邻两次计算差之绝对值值<1e-15时结束迭代计算,Ek的迭代初始值为0
Mk = rem(Mk+2 pi,2 pi);
Ek0=0;Ek=Mk;
while abs(Ek0-Ek)>1e-15
Ek0 = Ek;
Ek=Mk + self.e * sin(Ek0);
end
% 计算真近点角:取值在(-pi,pi]
v1=sqrt(1-self.e^2)_sin(Ek);
v2=cos(Ek)-self.e;
vk=atan2(v1,v2);
% 计算升交点角距
Faik = vk + self.omega;
% 计算升交点角距改正值摄动改正项计算
Sigmauk=self.Cuc_cos(2 Faik)+self.Cus sin(2 _Faik);
% 计算卫星地心向径改正值
Sigmark=self.Crc_cos(2 Faik)+self.Crs sin(2 _Faik);
% 计算卫星轨道倾角改正值
Sigmaik=self.Cic_cos(2 Faik)+self.Cis sin(2 Faik);
% 修正升交点角距
uk=Faik+Sigmauk;
% 修正卫星地心相径
rk=a
(1-self.e _cos(Ek))+Sigmark;
% 修正卫星轨道倾角
ik=self.i0+Sigmaik+tk_self.i_dot;

复制代码
        % 计算卫星轨道平面直角坐标
        xk=rk*cos(uk);
        yk=rk*sin(uk);
    
        % 计算升交点赤经
        Omegak=self.OMEGA + (self.OMEGA_dot-self.we)*tk-self.we*self.toe;
    
        % 将卫星坐标由轨道平面转换到ECEF坐标系
        self.X=xk*cos(Omegak)-yk*cos(ik)*sin(Omegak);
        self.Y=xk*sin(Omegak)+yk*cos(ik)*cos(Omegak);
        self.Z=yk*sin(ik);
        
    end
    
    
    end

end

卫星高度角方位角计算(待更新。。。)

全部评论 (0)

还没有任何评论哟~