资源简介

使用Matlab,利用卫星星历文件计算坐标,包括数据、代码以及算法的流程图。代码包括两个文件,一个计算GPS时,一个计算坐标。

资源截图

代码片段和文件信息

%卫星星历计算坐标
%分别计算卫星的坐标
%  规定数据格式
%导入卫星文件
data = importdata(‘PRN7.txt‘);   %计算PRN4卫星坐标时,将文件名改为‘PRN4.txt‘
%1.求轨道长半轴a
a =data(24)^2;
%2.计算平均角速度
GM = 3.9860047*10^14;   %   地球引力常数
n_0 = sqrt(GM/(a^3));
%3.计算从需要时刻到参考时刻的时间差tk
t_0 = data(31);
for j = 1:21
    tk(j) = getGPStime(413016j-10) - t_0;
    if tk(j)>302400
         tk(j) = tk(j) - 604800;
    elseif tk(j) < -302400
        tk(j) = tk(j)+604800;
    end
    %4.改正平角速度
    n = n_0 + data(13);
    %5.计算平近点角Mk
    M_0 =data(14);
    Mk = M_0 + n * tk(j);
    %6.计算偏近点角Ek;   
    % 开普勒方程迭代
    e=data(22);
     i = 1;
    Ek(i) = Mk;  %设置迭代初值
    change_Ek = Ek(i);
    while i<10
         i = i + 1;
        Ek(i) = Mk + e*sin(Ek(i-1));
        change_Ek = abs(Ek(i)-Ek(i-1));
    end
    Ek_ = Ek(i);  %迭代最后的结果为偏近点角
    %7.计算真近点角fk
    fk_cos = cos(Ek_)-e;
    fk_sin = sqrt(1-e^2)*sin(Ek_);
    fk = atan(abs(fk_sin/fk_cos));
     
    % 在此处需要主注意,需要对fk的象限进行改正
    if fk_cos < 0 && fk_sin > 0
        fk = pi-fk;
    end
    if fk_cos < 0 &&fk_sin < 0
        fk = pi+fk;
    end
    if fk_cos > 0 && fk_sin < 0
        fk=2*pi-fk;
    end
    
    %8.计算升交角距faik
    omega = data(43);
    faik = fk + omega;
    %9.计算卫星轨道摄动改正数(6个)
    Cus = data(23);
    Crs = data(12);
    Crc = data(42);
    Cis = data(34);
    Cic = data(32);
    Cuc = data(21);

    duk = Cus*sin(2*faik)+Cuc*cos(2*faik);
    drk = Crs*sin(2*faik)+Crc*cos(2*faik);
    dik = Cis*sin(2*faik)+Cic*cos(2*faik);
   
    %10.计算改正后的向径
    rk = a*(1-e*cos(Ek_)) + drk;

    %11.计算改正后的倾角 ik
    i_0 =  data(41);
    i_d =  data(51);
    ik = i_0 +dik +i_d*tk(j);

    %12.计算升交角经度Lk
    O_0 = data(33);
    O_d = data(44);

    % O = Ot +O_d * tk;  % 观测瞬间的升交点赤经
    omega_e = 7.292115*10^-5;  %地球自转角速度
    Lk = (O_0+(O_d-omega_e)*tk(j)-omega_e*t_0);
    
    %13.计算卫星在轨道平面内的坐标
    uk = faik + duk;
    x_k(j) = rk * cos(uk);
    y_k(j) = rk * sin(uk);
    z_k(j) = 0;
    %14.计算卫星在协议地球坐标系中的位置
    %计算旋转矩阵
    R(11) = cos(Lk);
    R(12) = -sin(Lk)*cos(ik);
    R(13) = sin(Lk)*sin(ik);
    R(21) = sin(Lk);
    R(22) = cos(Lk)*cos(ik);
    R(23) = -cos(Lk)*sin(ik);
    R(31) = 0;
    R(32) = sin(ik);
    R(33) = cos(ik);

    XYZ(:j) = R * [x_k(j);y_k(j);z_k(j)];   
    fprintf(‘分钟:%d\n‘j-1)
    fprintf(‘所测坐标X=%f\n‘XYZ(1))
    fprintf(‘所测坐标Y=%f\n‘XYZ(2))
    fprintf(‘所测坐标Z=%f\n‘XYZ(3))
end

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2705  2019-06-05 09:35  依据卫星星历计算坐标(含代码、数据以及算法流程图)\代码\calGPS.m

     文件       1303  2019-06-04 15:03  依据卫星星历计算坐标(含代码、数据以及算法流程图)\代码\getGPStime.m

     文件       1569  2019-05-28 11:37  依据卫星星历计算坐标(含代码、数据以及算法流程图)\数据\20040130.04N - 未修改.txt

     文件        557  2019-06-03 09:42  依据卫星星历计算坐标(含代码、数据以及算法流程图)\数据\PRN4.txt

     文件        552  2019-06-03 11:26  依据卫星星历计算坐标(含代码、数据以及算法流程图)\数据\PRN7.txt

     文件      36747  2019-06-04 15:08  依据卫星星历计算坐标(含代码、数据以及算法流程图)\算法流程图.vsdx

     目录          0  2020-05-18 17:49  依据卫星星历计算坐标(含代码、数据以及算法流程图)\代码

     目录          0  2020-05-18 17:49  依据卫星星历计算坐标(含代码、数据以及算法流程图)\数据

     目录          0  2020-05-18 17:49  依据卫星星历计算坐标(含代码、数据以及算法流程图)

----------- ---------  ---------- -----  ----

                43433                    9


评论

共有 条评论