78 lines
1.9 KiB
Matlab
78 lines
1.9 KiB
Matlab
function [XYZ, sv_dt]=ch_sat_pos(t, toc, f0, f1, f2, crs, deln, M0, cuc, e, cus, sqrtA, toe, cic, OMG0, cis, i0, crc, omg, OMGd, idot)
|
||
% 输入:
|
||
% toe: 星历参考时间: 一套星历的有效期为toe前后4小时
|
||
% a0 a1 a2 toc: 卫星时钟校正模型方程中3个参数, toc: 第一数据块参考时间, 被用作时钟校正模型中时间参考点
|
||
|
||
|
||
% 卫星星历参数(16个):
|
||
% sqrtA: 卫星轨道长半轴的平方根
|
||
% es: 轨道偏心率
|
||
% i0: toe时刻轨道倾角
|
||
% OMEGA0: 周内时等于0时刻的轨道升交点赤经
|
||
% omega: 轨道近地角距
|
||
% M0: toe时刻的平近点角
|
||
% Delta_n: 平均运动角速度校正值
|
||
% iDOT: 轨道倾角对时间的变化率
|
||
% OMEGA_DOT: 轨道升交点赤经对时间的变化率
|
||
% Cuc: 升交点角距余弦和校正振幅
|
||
% Cus: 升交点角距正弦和校正振幅
|
||
% Cic: 轨道倾角余弦和校正振幅
|
||
% Cis: 轨道倾角正弦和校正振幅
|
||
|
||
%输出:
|
||
% X, Y, Z ECEF下卫星位置
|
||
% sv_dt: 卫星时钟偏差
|
||
|
||
%变量:
|
||
%摄动改正后的升交距角uk、卫星矢径rk和轨道倾角ik
|
||
%卫星在轨道面坐标系中的坐标x,y
|
||
%发射时刻升交点的经度L
|
||
|
||
|
||
%以下为计算代码
|
||
%1.计算卫星运行的平均角速度
|
||
n0=sqrt(3.986005E+14)/(sqrtA.^3);
|
||
n=n0+deln;
|
||
%2.计算信号发射时卫星的平近点角
|
||
sv_dt = f0+f1*(t-toc)+f2*(t-toc).^2;%t为未做钟差改正的观测时刻
|
||
t = t - 0;%更新t为做钟差改正后的值
|
||
tk = t-toe;%归化时间
|
||
if tk>302400
|
||
tk=tk-604800;
|
||
elseif tk<-302400
|
||
tk=tk+604800;
|
||
else
|
||
tk=tk+0;
|
||
end
|
||
Mk=M0+n*tk;
|
||
%3.计算偏近点角(迭代)
|
||
%E=M+e*sin(E);
|
||
ed(1)=Mk;
|
||
for i=1:3
|
||
ed(i+1)=Mk+e*sin(ed(i));
|
||
end
|
||
Ek=ed(end);
|
||
%4.计算真近点角
|
||
Vk=atan2(sqrt(1-e.^2)*sin(Ek),(cos(Ek)-e));
|
||
%5.计算升交距角(未经改进时)
|
||
u=omg+Vk;
|
||
%6.计算摄动改正项
|
||
deltau=cuc*cos(2*u)+cus*sin(2*u);
|
||
deltar=crc*cos(2*u)+crs*sin(2*u);
|
||
deltai=cic*cos(2*u)+cis*sin(2*u);
|
||
%7.计算摄动改正后的升交距角uk、卫星矢径rk和轨道倾角ik
|
||
uk=u+deltau;
|
||
rk=(sqrtA.^2)*(1-e*cos(Ek))+deltar;
|
||
ik=i0+deltai+idot*tk;
|
||
%8.计算卫星在轨道面坐标系中的坐标
|
||
x=rk*cos(uk);
|
||
y=rk*sin(uk);
|
||
%9.计算发射时刻升交点的经度67
|
||
L=OMG0+(OMGd-7.2921151467e-5)*tk-7.2921151467e-5*toe;
|
||
%10.计算卫星在地固坐标系下坐标
|
||
XYZ(1)=x*cos(L)-y*cos(ik)*sin(L);
|
||
XYZ(2)=x*sin(L)+y*cos(ik)*cos(L);
|
||
XYZ(3)=y*sin(ik);
|
||
XYZ = XYZ';
|
||
|
||
end |