%计算这一历元接收到的星历数据,所有历元积累的卫星位置PRN_xyz,当前GPS时间T
% function [PRN_xyz]=eph(Keyword_eph,In1,epoch,lie_start,lie_end,PRN_xyz,T)
function [eph_para,T_e]=eph(Keyword_eph,In1,epoch,lie_start,lie_end,eph_para)
j=1;
PRN0=[];
for i=lie_start(epoch):lie_end(epoch)
XX=In1(Keyword_eph(i)+56:Keyword_eph(i)+63);
XX=[XX(7) XX(8) XX(5) XX(6) XX(3) XX(4) XX(1) XX(2)];
% PRN0(j)=hex2dec(XX);
PRN=hex2dec(XX);
XX=In1(Keyword_eph(i)+154:Keyword_eph(i)+157);
if XX(1)>='8'
XX=neg_hex2dec(XX);
else
XX=hex2dec(XX);
end
Crs=XX*2^(-5); % 对轨道半径正弦的校正值ok(米)
XX=In1(Keyword_eph(i)+158:Keyword_eph(i)+161);
if XX(1)>='8'
XX=neg_hex2dec(XX);
else
XX=hex2dec(XX);
end
dn=XX*2^(-43)*pi; % 对平均运动的校正值ok
XX=In1(Keyword_eph(i)+162:Keyword_eph(i)+169);
if XX(1)>='8'
XX=neg_hex2dec(XX);
else
XX=hex2dec(XX);
end
M0=XX*2^(-31)*pi; % 对平均近角点ok
XX=In1(Keyword_eph(i)+170:Keyword_eph(i)+173);
if XX(1)>='8'
XX=neg_hex2dec(XX);
else
XX=hex2dec(XX);
end
Cuc=XX*2^(-29); % 对纬度幅角余弦的校正值o)
XX=In1(Keyword_eph(i)+174:Keyword_eph(i)+181);
XX=hex2dec(XX);
e=XX*2^(-33); % 偏心率ok
XX=In1(Keyword_eph(i)+182:Keyword_eph(i)+185);
if XX(1)>='8'
XX=neg_hex2dec(XX);
else
XX=hex2dec(XX);
end
Cus=XX*2^(-29); % 对纬度幅角正弦的校正值ok
XX=In1(Keyword_eph(i)+186:Keyword_eph(i)+193);
XX=hex2dec(XX);
aw=XX*2^(-19); % 长半轴的平方根ok(sqrt(米))
XX=In1(Keyword_eph(i)+194:Keyword_eph(i)+197);
XX=hex2dec(XX);
Toe=XX*2^(4); % 星历基准时间ok(seconds)
XX=In1(Keyword_eph(i)+212:Keyword_eph(i)+215);
if XX(1)>='8'
XX=neg_hex2dec(XX);
else
XX=hex2dec(XX);
end
Cic=XX*2^(-29); % 对倾角余弦的修正值ok
XX=In1(Keyword_eph(i)+216:Keyword_eph(i)+223);
if XX(1)>='8'
XX=neg_hex2dec(XX);
else
XX=hex2dec(XX);
end
OM=XX*2^(-31)*pi; % 升交点经度ok
XX=In1(Keyword_eph(i)+224:Keyword_eph(i)+227);
if XX(1)>='8'
XX=neg_hex2dec(XX);
else
XX=hex2dec(XX);
end
Cis=XX*2^(-29); % 对倾角正弦的校正值ok
XX=In1(Keyword_eph(i)+228:Keyword_eph(i)+235);
if XX(1)>='8'
XX=neg_hex2dec(XX);
else
XX=hex2dec(XX);
end
i0=XX*2^(-31)*pi; % 倾角ok
XX=In1(Keyword_eph(i)+236:Keyword_eph(i)+239);
if XX(1)>='8'
XX=neg_hex2dec(XX);
else
XX=hex2dec(XX);
end
Crc=XX*2^(-5); % 对轨道半径余弦的校正值ok
XX=In1(Keyword_eph(i)+240:Keyword_eph(i)+247);
if XX(1)>='8'
XX=neg_hex2dec(XX);
else
XX=hex2dec(XX);
end
W=XX*2^(-31)*pi; % 近地点幅角
XX=In1(Keyword_eph(i)+248:Keyword_eph(i)+253);
if XX(1)>='8'
XX=neg_hex2dec(XX);
else
XX=hex2dec(XX);
end
dOM=XX*2^(-43)*pi; % 升交点经度的变化率
XX=In1(Keyword_eph(i)+32:Keyword_eph(i)+39);
XX=[XX(7) XX(8) XX(5) XX(6) XX(3) XX(4) XX(1) XX(2)];
T_e=hex2dec(XX)/1000; % 求取GPS时间ok
XX=In1(Keyword_eph(i)+256:Keyword_eph(i)+259);
XX=hex2dec(XX);
XX=dec2bin(XX,16);
XX=XX(1:14);
if XX(1)=='1' %为负数
XX0=XX(2:14);
XX1=bin2dec(XX0);
di=-bitcmp(XX1-1,13)*2^(-43)*pi; % 轨道倾角变化率
else
di=bin2dec(XX)*2^(-43)*pi;
end
if epoch>=2
sign_prn=find(eph_para(1,:)==PRN);
if sign_prn>0
eph_para(:,sign_prn)=[PRN;Crs;dn;M0;Cuc;e;Cus;aw;Toe;Cic;OM;Cis;i0;Crc;W;dOM;di] ;
else
C=size(eph_para);
m=C(2);
eph_para(:,m+1)=[PRN;Crs;dn;M0;Cuc;e;Cus;aw;Toe;Cic;OM;Cis;i0;Crc;W;dOM;di] ;
end
else
eph_para(:,j)=[PRN;Crs;dn;M0;Cuc;e;Cus;aw;Toe;Cic;OM;Cis;i0;Crc;W;dOM;di] ;
end
j=j+1;
end
评论0