1.代码学习:
1.1整理配置文件
data_dir | 数据的地址,需要在配置文件的地址复制下来 |
site_name | 测站的名字 |
start_time | 1 自己选择处理的开始时间 0从观测文件获取开始时间 |
end_time | 1 自己选择处理的结束时间 0从观测文件获取结束时间 |
_interval | 参数 t_interval 表示观测数据文件中观测值的时间间隔。 0:from obs non-zero 是指使用观测数据中的非零值来确定初始位置解算的方式。1:specified interval是指自己设置一些特殊的时间间隔 |
gnss_mode | 选择相关的GNSS处理数据的模型 |
navsys | 选择进行GNSS定位的卫星系统(可以选择单系统或者多系统) |
nfreq | 表示的是频率,这里设置的是1,最大频率为3 |
elmin | 表示接收机接收卫星信号时所需的最低仰角阈值。 |
sateph | 表示的是指定使用的卫星星历和钟差的来源,1:广播星历 2:精密星历 |
ionoopt | 表示的是电离层延迟模型校正的选择。0:表示关闭电离层改正,即不考虑电离层的影响。 1:表示使用卫星广播模型来进行电离层改正。2:表示使用无电离层的载波组合来进行电离层改正。 3:表示使用估计的电离层参数来进行电离层改正。 |
tropopt | 表示的是对流层延迟模型改正的选择。0:表示关闭对流层改正,即不考虑对流层的影响。 1:表示使用Saastamoinen模型进行对流层改正。 2:表示进行对流层湿延迟的估计。 3:表示进行对流层湿延迟和网格处理。 |
dynamics | 动态模式的选择。 0:表示是关闭静态 1:表示是选择动态。 |
tidecorr | 地球潮汐对定位精度影响的校正。0:表示关闭地球潮汐校正 1:表示开启地球潮汐校正。 |
bd2frq | 表示的是用于指定使用的BDS-2频率顺序。在(B1-1、B2-2、B3-3)。 |
bd3frq | 表示的是用于指定使用的BDS-3频率顺序。在(B1-1、B3-3、B1C-4、B2a-5、B2b-6)。 |
gloicb | 表示的是相邻信道偏差。“GloICB” 正是用于校正 GLONASS 卫星信号的相邻信道偏差。在 RTKLIB 中,可以通过设置相应的参数来进行 GLONASS 相邻信道偏差的校正。0:不进行校正 1:采用线性组合的方式校正 GLONASS 卫星信号的相邻信道偏差。 2:采用二次方程的形式校正校正 GLONASS 卫星信号的相邻信道偏差。 |
gnsproac | 参数"gnsproac"用于指定GNSS精密产品的类型,以应用相应的DCB(Differential Code Bias)校正。1:表示使用"wu"(Wuhan University)的GNSS精密产品进行DCB校正。2:表示使用"gbm"(GFZ Bias Monitoring)的GNSS精密产品进行DCB校正。3:表示使用"com"(CODE Combination)的GNSS精密产品进行DCB校正。4:表示使用"grm"(GNSS Radio-Meteorology)的GNSS精密产品进行DCB校正。 |
posopt | 0:启用 1:关闭。 表示的是参数"posopt"用于设置定位选项,以控制定位过程中的一些特定功能。[1] 卫星PCV(Phase Center Variation):用于启用或禁用卫星PCV校正。PCV是接收机和卫星之间的相位中心偏差。当启用此选项时,RTKLIB会考虑卫星PCV校正来提高定位精度。 [2] 接收机PCV(Phase Center Variation):用于启用或禁用接收机PCV校正。与卫星PCV类似,接收机PCV考虑了接收机天线相位中心的偏差。启用此选项将应用接收机PCV校正。 [3] 相位风扬(Phase Wind-Up):用于启用或禁用相位风扬校正。相位风扬是卫星导航信号穿过大气层产生的相位跳变现象。启用此选项将对相位风扬进行校正。 [4] 拒绝GPS Block IIA:用于启用或禁用拒绝使用GPS Block IIA卫星。Block IIA是GPS系统中一种较旧的卫星型号。如果启用此选项,RTKLIB将在定位过程中排除这些卫星。 [5] RAIM FDE:用于启用或禁用RAIM(Receiver Autonomous Integrity Monitoring)FDE(Fault Detection and Exclusion)。RAIM是一种接收机自主的完整性监测技术,用于检测和排除接收机或信号故障。启用此选项将开启RAIM FDE功能。 [6] 处理日界时钟跳跃(day-boundary clock jump)的选项。日界时钟跳跃是指在卫星定位系统中的GPS卫星时钟,在UTC时间午夜(00:00:00)附近可能会发生的突变。这种突变会导致接收机在过渡时刻可能出现较大的时间跃变,对定位精度和连续性造成一定影响。 当选择启用此选项时,RTKLIB将采用一种特殊的时钟跳跃处理机制来减小其对定位的影响。该机制会根据接收机历元数据中的时间跳变信息对接收机观测数据进行处理,以尽可能减小日界时钟跳跃对定位解的影响。 [7]重力延迟校正。重力延迟是指由于信号穿越大气层时受到地球引力场的影响所引起的时间延迟。该延迟会对GNSS信号的传播速度产生影响,从而影响定位结果的精度。 启用此选项可以对重力延迟进行校正,以提高定位的精度。RTKLIB使用大气延迟模型来估算重力延迟,并将其纳入定位计算中。 |
maxout | 表示的是设置观测数据中断的次数,以重置模糊度(ambiguity)。模糊度是在载波相位观测中出现的未知整数倍的模糊性。在实时差分定位中,模糊度需要通过连续的观测数据进行估计和解算,以达到高精度的定位。 eg:在你提供的例子中,参数"maxout"的值为3,表示当观测数据中断次数达到3次时,RTKLIB将重置模糊度。 |
minlock | 表示的是用于设置确定模糊度(ambiguity)的最小锁定次数。在实时差分定位中,通过观测数据的连续性来估计和解算模糊度是非常重要的。"minlock"参数指定了必须达到的最小锁定次数,才能确定模糊度。 eg:参数"minlock"的值为5,表示至少需要达到5次锁定,才能确定解算模糊度 |
minfix | 表示用于设置在保持模糊度(ambiguity)的最小固定次数。 eg:参数"minfix"的值为5,表示至少需要达到5次固定,才会保持解算的模糊度。 |
niter | 表示用于设置滤波器迭代的次数。"niter"参数指定了滤波器执行的迭代次数。每次迭代中,RTKLIB将使用当前的估计结果进行状态预测和观测更新,然后再次估计状态,以获得更准确的定位结果。 eg:参数"niter"的值为1,表示滤波器只执行一次迭代。这意味着滤波器将根据初始解进行一次估计,然后生成最终的定位结果。 |
maxinno | maxinno"参数指定了创新的拒绝阈值,用于判断是否接受或拒绝观测值。如果创新超过了该阈值,说明观测值与预测值之间的差异过大,可能由于异常情况或误差引起。在这种情况下,软件可以选择拒绝该观测值,以避免对定位结果产生不良影响。 eg:参数"maxinno"的值为30.0,表示如果创新超过30.0米,则该观测值将被拒绝。 |
maxgdop | 表示的是用于设置几何精度因子(GDOP)的拒绝阈值。 eg:,参数"maxgdop"的值为30.0,表示如果GDOP超过30.0,则该解算结果将被拒绝。 |
csthres | 表示的是用于设置循环滑移检测的拒绝阈值。 第一个元素是GF(m)检测方法的拒绝阈值,以米为单位。 第二个元素是MW(m)检测方法的拒绝阈值,以米为单位。 第三个元素是多普勒积分(Doppler Integration)检测方法的拒绝阈值,以循环数为单位。 |
prn | 表示的是参数"prn"用于设置过程噪声的标准差。 第一个元素是偏差(bias)的过程噪声标准差。 第二个元素是电离层(iono)的过程噪声标准差。 第三个元素是对流层(trop)的过程噪声标准差。 第四个元素是水平加速度(acch)的过程噪声标准差。 第五个元素是垂直加速度(accv)的过程噪声标准差。 第六个元素是位置(pos)的过程噪声标准差。 |
std | 表示的是用于设置初始状态的标准差。 第一个元素是偏差(bias)的初始状态标准差。 第二个元素是电离层(iono)的初始状态标准差。 第三个元素是对流层(trop)的初始状态标准差。 |
err | 表示的是用于设置测量误差因子。 第一个元素是保留项,未定义具体含义。 第二到第四个元素是相位(phase)的误差因子a、b和c,以米为单位。这些因子用于计算相位测量误差的标准差,公式为:标准差 = a + b × L1信号的多普勒频率 + c × L2信号的多普勒频率。其中,L1和L2分别代表两种不同频率的GNSS信号。 第五个元素是多普勒频率(doppler frequency)的误差因子,以赫兹为单位。 |
sclkstab | 表示的是用于设置卫星钟的稳定性。 eg:参数"sclkstab"的值为5e-12,表示卫星钟的时钟稳定性为5e-12秒/秒。 |
eratio | 表示的是用于设置三个频率的码和相位测量误差之间的比率。 eg:参数"eratio"的值为100, 100, 100,表示三个频率的码和相位测量误差之间的比率都为100。 |
antdelsrc | 表示的是用于设置天线相位中心偏差(antenna delta)的来源。 0:表示天线相位中心偏差来自观测数据(obs),会使用观测数据中的信息来估计天线相位中心偏差。 1:表示天线相位中心偏差来自优化解算(opt),会使用优化算法来估计天线相位中心偏差。 |
antdel | 表示的是用于设置天线相位中心偏差(antenna delta)。 第1到第3个元素表示漫游站的天线相位中心偏差,按照东-北-天的顺序表示。 第4到第6个元素表示基准站的天线相位中心偏差,也按照东-北-天的顺序表示。 eg:参数"antdel"的值为0, 0, 0, 0, 0, 0,表示漫游站和基准站的天线相位中心偏差都为0。 |
basepostype | 表示的是用于设置基准站的参考位置类型。 1:表示基准站的参考位置来自选项(options)中指定的位置,会使用在选项中指定的基准站位置作为参考位置。 2:表示基准站的参考位置为单点定位(SPP)的平均位置,会使用来自单点定位解算结果的平均位置作为参考位置。 3:表示基准站的参考位置来自RTCM/RTK数据文件的RINEX头部,会从RINEX文件中的头部信息中提取基准站的参考位置。 |
baserefpos | 表示的是用于设置基准站的参考位置,以WGS84坐标系下的XYZ格式表示。 |
timef | 表示的是用于设置时间格式。-----输出文件的时间设置(设置为GPS时) 1:表示时间格式为GPS时(GPST)。GPS时是以GPS周和周内秒数的形式表示的,与协调世界时(UTC)存在固定的偏移量。 2:表示时间格式为协调世界时(UTC)。协调世界时是以日期和时间的形式表示的,是世界上广泛使用的标准时间。 |
posf | 表示的是用于设置位置解算结果的输出格式。----输出文件的坐标位置(设置为2) 1:表示位置解算结果使用ECEF-XYZ格式进行输出。ECEF(地球固定坐标系)是一种以地球质心为原点的坐标系,使用直角坐标表示位置。 2:表示位置解算结果使用LLH(纬度、经度、高度)格式进行输出。LLH是一种常用的地理坐标系统,使用地球表面上的经度、纬度和高度来表示位置。 |
outvel | 表示的是用于控制是否输出速度解算结果。-----输出文件的速度解算结果(设置为1,开启速度输出功能) 0:表示不输出速度解算结果,即关闭速度输出功能。 1:表示输出速度解算结果,即开启速度输出功能。 |
outatt | 表示的是用于控制是否输出姿态解算结果。---输出文件的姿态解算解算(设置为0,关闭姿态输出胡功能) 0:表示不输出姿态解算结果,即关闭姿态输出功能。 1:表示输出姿态解算结果,即开启姿态输出功能。 |
1.2流程图
1.3paichuweixing()函数
该函数用来排除不必要的卫星。
function [obs,nobs]=paichuweixing(obs0,rtk)
%定义一个paichuweiixng()的函数
%输入参数:其中输入参数obs0是指传递给函数paichuweiixng的观测数据;rtk输入参数rtk是用于控制和配置GINav的对象或数据结构。
%输出参数:其中nobs为筛选后的观测历元数目,初始值为 0;obs用于存储筛选后的观测数据的数组。
global gls glc
nobs0=size(obs0,1);
%计算了变量 obs0 的第一个维度的大小,并将结果赋值给变量 nobs0。这里的 size(obs0,1) 返回 obs0 的行数。
nobs=0;
%对nobs进行初始化为0,用于统计观测数据
obs=repmat(gls.obs_tmp,nobs0,1);
%gls.obs_tmp 是一个用于存储卫星观测数据的临时变量或数据结构。
%上述完整代码是将gls.obs_tmp的内容复制 nobs0 行、1 列,并生成一个相应大小的矩阵。这里的目的可能是扩充 gls.obs_tmp(存储临时数据)的内容,以满足后续计算或处理的需要。
ts=rtk.opt.ts; te=rtk.opt.te;
%将rtk.opt.ts与rtk.opt.te的值分别赋值给ts与te
mask=set_sysmask(rtk.opt.navsys);
%设置系统的掩码
sys=0;
%初始化吸引sys为0
for i=1:nobs0
%获取用户定义的起始时间 ts 和结束时间 te
time=obs0(i).time;
if ts.time~=0
dt=timediff(time,ts);
%计算第一次开始的时间到观测历元之间的时间间隔存储为dt
if dt<0,continue;end
end
%对于每个观测历元,计算它与起始时间 ts 和结束时间 te 的时间差 dt
if te.time~=0
dt=timediff(time,te);
%计算观测历元的时刻与结束时间间隔为dt
if dt>0,continue;end
%如果 dt 小于 0 或大于 0,则跳过该观测历元
end
%if obs0(i).sat==4;continue;end
%这是一个用于确定卫星的导航系统类型和卫星编号的函数。
sat=obs0(i).sat;
%获取当前观测历元的卫星编号 sat
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;
%如果导航系统的掩码为 0,则跳过该观测历元
end
prn=sat;
%将卫星值赋给prn。
% [sys,~]=satsys(obs0(i).sat);
if mask(sys)==0,continue;end
obs(nobs+1)=obs0(i);
nobs=nobs+1;
end
%将通过时间筛选和导航系统类型掩码筛选的观测数据存储到 obs 数组中,并增加 nobs 计数器的值
if nobs==0,obs=NaN;
return;
end
if nobs<nobs0
obs(nobs+1:end,:)=[];
end
%最后,如果筛选后的观测历元数目为 0,则返回空值 NaN;否则,将不符合条件的观测历元剔除,并返回 obs 数组。
return
2.matlab学习
2.1结构化程式与自定义函数
(1)进行循环
%% for i=1:10 x=linspace(1,10,101); plot(x,sin(x+i)); print(gcf,'-deps',strcat('plot',num2str(i),'.ps')); end
(2)输出奇数/偶数
a=3; if rem(a,2)==0 disp('a is even') else disp('a is old') end %%该情况表示的是rem(a,b)函数表示的是a/2,看是否为奇数、偶数。
Untitled2 a is old
(3)switch——case
根据你输入的结果,选择多对应的case
input_num=1; switch input_num case -1 disp('negative 1'); case 0 disp('zero'); case 1 disp('positive 1'); otherwise disp('other value'); end
(4)while指令
n=1; while prod(1:n)<1e100 n=n+1; end
(5)练习从1+2+…+999
i=1; sum=0; while i<=999 sum=sum+i; i=i+1; end disp(sum);
Untitled5 499500
(6)遍历循环
%数组遍历循环 % for n=1:10 % a(n)=2^n; % end % disp(a);
for n=1:2:10 a(n)=2^n; end disp(a);
(7)tic toc—-计算运行的时间(计时器相当于)
比较时间
tic for ii=1:2000 for jj=1:200 A(ii,jj)=ii+jj; end end toc
Untitled7 时间已过 0.192989 秒。
tic A=zeros(2000,2000); for ii=1:size(A,1) for jj=1:size(A,2) A(ii,jj)=ii+jj; end end toc
Untitled7 时间已过 0.051115 秒。
通过矩阵的方式,发现运行的时间减少,能够提升算法的性能
(8)练习
自己编写算法。
…是换行号。
A=[1 2 3 4 5 6;... 6 5 4 3 2 1];%...表示的是换行号 disp(A);
Untitled9 1 2 3 4 5 6 6 5 4 3 2 1