1.代码学习
(1)search_eph_data()函数
search_eph_data()主要是在导航电文文件中搜索满足条件的导航电文数据。
在该部分步入到search_eph_data()函数,其中参数 teph 是一个时间戳,表示要搜索的导航电文的时间。参数 sat 是要搜索的卫星编号。参数 -1 是要搜索的导航系统类型,此处使用 -1 表示搜索所有系统的导航电文。参数 nav.eph 是历史导航电文数据。
输出的参数为:eph 是一个包含满足条件的导航电文数据的矩阵。stat 是一个表示函数执行状态的整数值,通常为 1 表示成功,0 表示失败。
总的来说,这部分代码主要是从历史导航电文数据中搜索指定时间戳和卫星编号的导航电文,并将结果保存在 eph
和 stat
变量中。
[eph,stat]=search_eph_data(teph,sat,-1,nav.eph);
在search_eph_data()函数的文件种,主要作用是搜索满足条件的导航电文数据。
具体的步骤为:
(1)读取历史导航电文数据:函数会根据指定的历史导航电文文件路径,读取相应的导航电文数据文件。
(2)搜索导航电文:根据输入的卫星编号(sat)、导航系统类型(sys)、时间戳等信息,函数会在历史导航电文数据中搜索满足条件的导航电文。
(3)返回满足条件的导航电文:函数会返回满足条件的导航电文数据,以供后续的导航数据处理使用。
function [eph_out,stat]=search_eph_data(time,sat,iode,eph)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%search_eph_data函数用于在历史导航电文文件中搜索满足条件的导航电文数据。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%它的主要作用是根据输入参数中的卫星编号、导航系统类型、时间戳等信息,从历史导航电文数据中选择合适的导航电文进行处理。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%步骤:
%(1)读取历史导航电文数据:函数会根据指定的历史导航电文文件路径,读取相应的导航电文数据文件。
%(2)搜索导航电文:根据输入的卫星编号(sat)、导航系统类型(sys)、时间戳等信息,函数会在历史导航电文数据中搜索满足条件的导航电文。
%(3)返回满足条件的导航电文:函数会返回满足条件的导航电文数据,以供后续的导航数据处理使用。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global glc;
%eph_sel 数组包含五个值,分别对应于不同的导航系统,如GPS、GLONASS、Galileo、BeiDou和QZSS。
%其中的 1 表示需要选用该导航系统的导航电文,而 0 则表示不需要。
eph_sel=[0,0,1,0,0];%ephemeris selections(GPS,GLO,GAL,BDS,QZS)
stat=1;%初始化state=1,sel=0,sys=0
sel=0;
sys=0;
if sat<=0||sat>glc.MAXSAT
sat=0;
elseif sat<glc.NSATGPS
sys=glc.SYS_GPS;
sat=sat+glc.MINPRNGPS-1;
elseif (sat-glc.NSATGPS)<=glc,NSATGLO
sys=glc.SYS_GLO;
sat=(sat-glc.NSATGPS)+glc.MINPRNGLO-1;
elseif (sat-glc.NSATGPS-glc.NSATGLO)<=glc.NSATGAL
sys=glc.SYS_GAL;
sat=(sat-glc.NSATGPS-glc.NSATGLO)+glc.MINPRNGAL-1;
elseif (sat-glc.NSATGPS-glc.NSATGLO-glc.NSATGAL)<=glc.NSATBDS
sys=glc.SYS_BDS;
sat=(sat-glc.NSATGPS-glc.NSATGLO-glc.NSATGAL)+glc.MINPRNBDS-1;
elseif (sat-glc.NSATGPS-glc.NSATGLO-glc.NSATGAL-glc.NSATBDS)<=glc.NSATQZS;
sys=glc.SYS_QZS;
sat=(sat-glc.NSATGPS-glc.NSATGLO-glc.NSATGAL-glc.NSATBDS)+glc.MINPRNQZS-1;
else
sat=0;
end
switch sys
case glc.SYS_GPS,tmax=glc.MAXDTOE+1;
sel=eph_sel(1);
%在 case glc.SYS_GPS 分支中,tmax 被设置为 glc.MAXDTOE+1,sel 被设置为 eph_sel 数组的第一个元素 (eph_sel(1))。
case glc.SYS_GAL,tmax=glc.MAXDTOE_GAL;
sel=eph_sel(3);
%在 case glc.SYS_GAL 分支中,tmax 被设置为 glc.MAXDTOE_GAL,sel 被设置为 eph_sel 数组的第三个元素 (eph_sel(3))。
case glc.SYS_BDS,tmax=glc.MAXDTOE_BDS;
sel=eph_sel(4);
%在 case glc.SYS_BDS 分支中,tmax 被设置为 glc.MAXDTOE_BDS+1,sel 被设置为 eph_sel 数组的第四个元素 (eph_sel(4))。
case glc.SYS_QZS,tmax=glc.MAXDTOE_QZS;
sel=eph_sel(5);
%在 case glc.SYS_QZS 分支中,tmax 被设置为 glc.MAXDTOE_QZS+1,sel 被设置为 eph_sel 数组的第五个元素 (eph_sel(5))。
otherwise tmax=glc.MAXDTOE+1;
%通过 default 分支,如果没有匹配到任何 case 分支,tmax 被设置为 glc.MAXDTOE+1。
end
tmin=tmax+1;%将eph矩阵里面第一列的数据进行存储。
idx0=eph(:,1)==sat;
if ~any(idx0),eph_out=NaN;
stat=0;
return;
end
eph0=eph(idx0,:);%这一部分主要处理的是GAL系统
if sys==glc.SYS_GAL&&sel~=0
if sel==1
%如果 sel 等于 1,代码会使用 bitand(eph0(:,7),bitshift(1,9))~=0 条件找到满足条件的索引矩阵 idx_GAL,并提取出对应的导航电文信息,存储在 eph0 中。
idx_GAL=(bitand(eph0(:,7),bitshift(1,9))~=0);
%bitand(eph0(:,7),bitshift(1,9)):这个操作对矩阵 eph0 的第7列和数字 512 进行位与操作,得到的结果是一个与 eph0 矩阵的大小相同的数组,每个元素表示对应位置的位与操作结果。
%bitshift(1,9):这个操作将数字 1 左移 9 位,得到结果 512。这是因为我们要检查的位是第10位(从右往左数,第一个位是第0位),所以要将数字 1 左移 9 次。
if ~any(idx_GAL),eph_out=NaN;
stat=0;
return;
end
eph0=eph(idx_GAL,:);
end
if sel==2%如果 sel 等于 2,代码会使用 bitand(eph0(:,7),bitshift(1,8))~=0 条件找到满足条件的索引矩阵 idx_GAL,并提取出对应的导航电文信息,存储在 eph0 中。
idx_GAL=(bitand(eph0(:,7),bitshift(1,8))~=0);
if ~any(idx_GAL),eph_out=NaN;
stat=0;
return;
end
eph0=eph0(idx_GAL,:);
end
end
t0=abs(eph0(:,11)+eph0(:,12)-time.time-time.sec);
%计算出 t0 值,即绝对值的 eph0(:,11)+eph0(:,12)-time.time-time.sec,用于后续条件的筛选。
idx1=(t0<=tmax&t0<=tmin);
if ~any(idx1),eph_out=NaN;
%如果没有找到满足条件的导航电文信息(即 ~any(idx1) 为真),代码将返回 NaN 值给 eph_out,并将 stat 设置为 0,然后结束程序。
stat=0;
return;
end
t1=t0(idx1);
eph1=eph0(idx1,:);
idx2=t1==min(t1);
eph_=eph1(idx2,:);
eph2=eph_(end,:);
%%eph_out 是一个结构体,包含从给定的星历数据 eph2 中提取的各个字段的值。以下是 eph_out 结构体的字段及其对应的值:
eph_out.sat=eph2(1);%sat:卫星编号
eph_out.iode=eph2(2); %iode:Ephemeris数据拟合度(Input / Output)的版本号
eph_out.iodc=eph2(3); %iodc:Clock拟合度(Input / Output)的版本号
eph_out.sva=eph2(4); %sva:卫星健康状态指示
eph_out.svh=eph2(5); %svh:卫星在信号接收时段的健康状态指示
eph_out.week=eph2(6); %week:GPS周
eph_out.code=eph2(7); %code:卫星星历的代码类型指示(数据源)
eph_out.flag=eph2(8); %flag:星历中的标志位
eph_out.toc.time=eph2(9); %toc:星历数据的参考时刻 (time 和 sec)
eph_out.toc.sec=eph2(10);
eph_out.toe.time=eph2(11);%toe:星历数据的参考时刻 (time 和 sec)
eph_out.toe.sec=eph2(12);
eph_out.ttr.time=eph2(13);%ttr:观测时间的参考时刻 (time 和 sec)
eph_out.ttr.sec=eph2(14);
eph_out.A=eph2(15);%A:半长轴
eph_out.e=eph2(16);%e:偏心率
eph_out.i0=eph2(17);%i0:轨道倾角
eph_out.OMG0=eph2(18);%OMG0:升交点赤经
eph_out.omg=eph2(19);%omg:近地点角距
eph_out.M0=eph2(20);%M0:平近点角
eph_out.deln=eph2(21);%deln:升交点赤经变化率
eph_out.OMGd=eph2(22);%OMGd:升交点赤经变化率
eph_out.idot=eph2(23);%idot:轨道倾角变化率
eph_out.crc=eph2(24);%crc:摄动半径余弦项的振幅
eph_out.crs=eph2(25);%crs:摄动半径正弦项的振幅
eph_out.cuc=eph2(26);%cuc:轨道倾斜角余弦项的振幅
eph_out.cus=eph2(27);%cus:轨道倾斜角正弦项的振幅
eph_out.cic=eph2(28);%cic:角距余弦项的振幅
eph_out.cis=eph2(29);%cis:角距正弦项的振幅
eph_out.toes=eph2(30);%toes:星历健康信号发射的参考时刻
eph_out.fit=eph2(31);%fit:星历拟合区间
eph_out.f0=eph2(32);%f0:钟差系数0级项
eph_out.f1=eph2(33);%f1:钟差系数1级项
eph_out.f2=eph2(34);%f2:钟差系数2级项
eph_out.tgd=eph2(35:38);%tgd:群延迟改正
eph_out.Adot=eph2(39);%Adot:速度相对卫星星历修正
eph_out.ndot=eph2(40);%ndot:轨道卫星星历拟合度
return;
2.matlab学习
初阶绘图
(1)绘制cos图sin图
plot(cos(0:pi/20:2pi)); plot(sin(0:pi/20:2pi));
加上hold on那么sin与cos都会保留在一张图上
hold on plot(cos(0:pi/20:2pi)); plot(sin(0:pi/20:2pi));
(2)绘制不同的图
x=0:0.5:4pi; y=sin(x); h=cos(x); w=1./(1+exp(-x)); g=(1/(2pi2)^0.5).exp((-1.(x-2pi).^2)./(2*2^2)); plot(x,y,'bd-',x,h,'gp:',x,w,'ro-',x,g,'c^-')
3.论文阅读
论文一《基于不同高度角的对流层延迟改正模型选择》
发布时间: | 2013年8月 |
研究方法: | Hopfield模型、Saastamoinen模型、Black模型 |
研究目的: | 根据三种模型利用IGS数据验证不同高度角的变化对延迟量的影响,并给出判断3中延迟量优劣的方法,最终提出一种根据高度角的不同选择不同模型的综合算法,一定程度上解决了低角度延迟量误差比较大的问题。 |
创新点: | 提出一种根据高度角的不同选择不同模型的综合算法,一定程度上解决了低角度延迟量误差比较大的问题。 |
总结: | 针对不同的高度角分析三种模型之间的差距,看在那种到度角范围内那种模型的效果最好。 |
整个思路--流程: | 1.引言:对流层基本理论知识;引出本文对流层校正模型与戒指高度角之间的关系 2.三种常用的对流层延迟改正模型的介绍 2.1Hopfield模型----基本公式 2.2 Saastamoinen模型---基本公式 2.3 Black模型---基本公式 3.判断延迟量准确度的方法 4.模型的实现与分析 4.1模型实现 4.2模型分析 |
论文二《Galileo/ GPS精密单点定位收敛时间与定位精度的比较与分析》
发布时间: | 2013年8月 |
研究方法: | 采用高度角定权模型、采用历元间差分探测与修复钟跳,并采用TurboEdit改进算法探测周跳;之后对各种误差进行校正。再采用扩展卡尔曼滤波EKF逐历元进行参数估计。 |
研究目的: | 分析Galileo与GPS的定位收敛时间与定位精度的分析与比较,表明卫星数量的多少与两者之间的关系。 |
创新点: | 使用PPP,对卫星系统的收敛时间与定位精度机进行分析,创新点是针对不同的卫星系统进行分析(Galileo与GPS)。 |
总结: | 随着卫星数目的增加,Galileo定位的精度与收敛的速度将为提高,将来随着Galileo PCV和 PCO模型的精化以及卫星数量的增加,其收敛时间和定位精度将会得到进一步提高和改善。 |
整个思路--流程: | 1.引言:对Galileo卫星的发展进行介绍;有关Galileo非差定位解算研究的介绍(spp/ppp)。 2.Galileo精密单点定位模型与处理方法 2.1PPP观测方程--E1/E5a频率进行无电离层组合模型,写出相关的伪距观测方程与载波相位观测方程。 2.2 参数估计及误差处理方法---采用高度角定权模型、采用历元间差分探测与修复钟跳,并采用TurboEdit改进算法探测周跳;之后对各种误差进行校正。再采用扩展卡尔曼滤波EKF逐历元进行参数估计。 3.试验及结果分析----将每个MGEX站的原始观测文件分割成8个时段,每个时段长度为3 h;将30 s精密钟差中的站坐标作为真值,将每个时段的解算结果与真值作差,获得E、N、U分量的坐标偏差,利用坐标偏差序列分析PPP的定位性能。 3.1平均可见卫星数量分析---对于Galileo,发射卫星数量远小于GPS,因此反映在DOP值上,Galileo均大于GPS。 3.2 PPP收敛速度分析---GPS可见卫星数量较多,PDOP值较小PPP能够很快收敛;而Galile卫星数量较少,PDOP值较大,收敛速度较慢,甚至不能收敛。 3.3 PPP定位精度分析---剔除收敛时间超过160min,之后再分为两个步骤①针对某个测站,取所有3h时段最后一个医院的坐标偏差绝对值的平均值作为该站PPP的3h的定位精度②取所有测站3h定位精度的平均值,得到3h时段的PPP平均定位精度。 4.结论---随着卫星数目的增加,Galileo定位的精度与收敛的速度将为提高,将来随着Galileo PCV和 PCO模型的精化以及卫星数量的增加,其收敛时间和定位精度将会得到进一步提高和改善。 |
4.理论学习
(1)Hopfield模型
Hopfield模型是Hopfield于1969年2从全球性实测平均资料中总结出的,加以修正后的模型为:
(2)Saastamoinen模型
Saastamoinen模型是Saastamoinen于1973年提出的,它是以测站纬度、高程、观测高度角、干温、水气压为变量的函数,其表达式为:
(3)Black模型
H. D. Black 于1978年利用Hopfield模型提出折射率表示方法,加上路径弯曲变量,给出了Black模型的表达式: