資源簡介
使用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
評論
共有 條評論