您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 卫星导航定位实验报告
中国矿业大学ChinaUniversityofMiningandTechnology《卫星导航定位算法与程序设计》实验报告学号:07122825姓名:王亚亚班级:测绘12—1指导老师:王潜心/张秋昭/刘志平中国矿业大学环境与测绘学院2015-07-011实验一编程实现读取下载的星历一、实验要求:读取RINEXN文件,将所有星历放到一个列表(数组)中。并输出和自己学号相关的卫星编号的星历文件信息。读取RINEXO文件,并输出指定时刻的观测信息。二、实验步骤:1、下载2014年的广播星历文件和观测值文件,下载地址如下:、要求每一位同学按照与自己学号后三位一致的年积日的数据文件和星历文件,站点的选择必须选择与姓氏首字母相同的站点的数据,以王小康同学为例,学号:07123077,需下载077那天的数据。有些同学的学号365后三位730,则取学号后三位-365,以姜平同学为例:学号10124455,下载455-365=90天的数据,有些同学的学号730后三位=999,则取学号后三位-730,以万伟同学为例:学号:07122854,则下载854-730=124天的数据。可以选择wnhu0124.14nwnhu0124.14o根据上述要求我下载了2014年第95天的数据,选择其中的wsrt0950.14n和wsrt0950.14o星历文件。指定时刻(学号后五位对应在年积日对应的秒最相近时刻)的观测值信息如张良09123881,后五位23881,取23881-3600*6=2281秒,6点38分01秒,最近的历元应该是6点38分00秒的数据。根据计算与我最接近的观测时刻为2014年4月5日6点20分30.00秒。3、编程思路:利用rinex函数读取星历文件中第14颗卫星的星历数据并输出显示。对数据执行762次循环找到对应的2014年4月5日6点20分30.00秒,并输出观测值。4、程序运行结果:2三、编程主要代码:1、读写N文件主函数代码:clc;%清除屏幕之前打过的代码clearall;%从内存中释放所有的内存变量和数组以及所有用户自定义的菜单栏,菜单,和窗口的定义。closeall;%关闭当前及所有工作区中所有打开的数据库,表,和索引,并选择1号工作区[filename,filepath]=uigetfile('*.14n','选择计算的输入文件');%打开窗口选取计算的输入文件file=[filepathfilename];%获得文件名rinexe(file,'eph.dat');%函数rinexe读取一个标准格式化导航信息文件并重新格式化数据为21行列数等于卫星数的矩阵。Eph=get_eph('eph.dat');%将存放在‘eph.dat’中的导航电文数据提取出来,为计算卫星位置做准备,返回值-eph星历矩阵,将读到的数据存入内存(注意:eph星历矩阵,每颗卫星存放21个参数)Eph[filename,filepath]=uiputfile('王亚亚-作业1读写N导航文件.txt','选择一个路径对结果文件保存');%选择路径保存输出的结果文件file=[filepathfilename];%获取文件名fid=fopen(file,'wt+');%文件有两种格式:二进制文件(b)和文本文件(t)。在Windows下,打开文件的默认是二进制格式,如果要以文本方式打开,则必须在打方式中加上字符't'。fprintf(fid,'%c','班级姓名学号作业序号主要内容');fprintf(fid,'%c\n','');fprintf(fid,'%c','测绘12-1王亚亚07122825上机实验作业一读写N导航文件');fprintf(fid,'%c\n','');fork=1:size(Eph,1)p=num2str(Eph(k,44));%输出第14颗卫星的星历数据fprintf(fid,'%c',p);%以一个字符输出ifk==1;fprintf(fid,'%c','%GPS卫星PRN编号');endifk==2;fprintf(fid,'%c','%GPS卫星钟的漂移速度');endifk==3;fprintf(fid,'%c','%参考时刻的升交点赤经M0');endifk==4;fprintf(fid,'%c','%rootasqrt(A)(m1/2(根号下))轨道长半轴的平方根');endifk==5;fprintf(fid,'%c','%deltanΔn(rad/s)平均运动修正量');endifk==6;fprintf(fid,'%c','%ecce轨道偏心率');endifk==7;fprintf(fid,'%c','%omegaω(rad)近地点的角距');endifk==8;fprintf(fid,'%c','%cucCuc(rad)纬度幅角的余弦调和项改正的振幅');endifk==9;fprintf(fid,'%c','%cusCus(radians)纬度幅角的正弦调和项改正的振幅');end3ifk==10;fprintf(fid,'%c','%crcCrc(m)轨道半径的余弦调和项改正的振幅');endifk==11;fprintf(fid,'%c','%crsCrs(m)轨道半径的正弦调和项改正的振幅');endifk==12;fprintf(fid,'%c','%i0i0(rad)轨道倾角');endifk==13;fprintf(fid,'%c','%idoti(rad/s)(IDOT)轨道倾角变化率');endifk==14;fprintf(fid,'%c','%cicCic(rad)轨道倾角的余弦调和项改正的振幅');endifk==15;fprintf(fid,'%c','%cisCis(rad)轨道倾角的正弦调和项改正的振幅');endifk==16;fprintf(fid,'%c','%Omega0Ω(rad)(OMEGA)参考时刻的升交点的赤经');endifk==17;fprintf(fid,'%c','%OmegadotΩ(rad/s)(OMEGADOT)升交点赤经的变化率');endifk==18;fprintf(fid,'%c','%toeTOE星历的参考时刻(GPS周内的秒数)星历表参考历元');endifk==19;fprintf(fid,'%c','%af0卫星钟的偏差(s)卫星钟偏差');endifk==20;fprintf(fid,'%c','%af1卫星钟的漂移(s/s)');endifk==21;fprintf(fid,'%c','%toe存储TOE星历的参考时刻(GPS周内的秒数)电文发送时刻');endfprintf(fid,'%c\n','');endfclose(fid);2、读写O文件主函数代码:clc;%清除屏幕之前打过的代码clearall;%从内存中释放所有的内存变量和数组以及所有用户自定义的菜单栏,菜单,和窗口的定义。closeall;%关闭当前及所有工作区中所有打开的数据库,表,和索引,并选择1号工作区%Weidentifytheobservationfileandopenit我们确定观测文件并打开它[filename,filepath]=uigetfile('*.14O','选择计算的输入的O文件');file=[filepathfilename];%文件名fid1=fopen(file,'rt');%r:读出观测文件ofile1,t:以文本的格式(因为fopen函数默认打开方式是二进制)[Obs_types1,ant_delta1,ifound_types1,eof11]=anheader(file);%打开观测文件ofile1,从头文件中截取观测类型Obs_types1、天线参数的信息ant_delta1,以及标明是否寻找到观测类型行ifound_types1、是否到文件尾的判定eof11NoObs_types1=size(Obs_types1,2)/2;%返回观测类型Obs_types1列数(1:行2:列)的Obs_types1矩阵是1行14列:[C1P1P2L1L2D1D2]size(Obs_types1,2)值是14除以2得观测值类型个数是7种Pos=[];%Thereare20epochsofdatainofile1SITE247J.01N文件中有20个历元的数据forq=1:761%循环762次找到对应的2014年4月5日6点20分30.0000000秒[time1,dt1,sats1,eof1,datee]=fepoch_0(fid1);%[time1,dt1,sats1,eof1]=fepoch_0(fid1);%通过函数fepoch_0调用观测文件SITE247J.01O,返回四个参数:time1:周内秒、dt1:接收机时钟的偏差(单位为s,为可选项)、sats1:卫星的PRN号矩阵、eof1:返回是否到文件尾的标示符(1:结束0:未结束)NoSv1=size(sats1,1);%通过查看行向量sats1的长度,获取卫星个数%WepicktheobservedP2pseudoranges我们获取观测的P2码伪距其中伪随机噪声码(PN)即测距码主要有精测距码(P码)和粗测距码(C/A码)两种。其中P码的码率4为10.23MHz、C/A码的码率为1.023MHz,长度为1023obs1=grabdata(fid1,NoSv1,NoObs_types1);%输入观测文件名、观测卫星个数、观测卫星类型数。输出Obs矩阵,行:卫星个数、列:观测类型:C1P1P2L1L2D1D2i=fobs_typ(Obs_types1,'P2');%在观测类型:C1P1P2L1L2D1D2查找出‘P2’所在位置,并赋值给i2.235646758400000e+07end[filename,filepath]=uiputfile('王亚亚-作业1读写O观测文件.txt','选择一个路径对结果文件保存');%选择路径保存输出的结果文件file=[filepathfilename];fid=fopen(file,'wt+');%文件有两种格式:二进制文件(b)和文本文件(t)。在Windows下,打开文件的默认是二进制格式,如果要以文本方式打开,则必须在打方式中加上字符't'。%fid=fopen('作业1.txt','wt+');%文件有两种格式:二进制文件(b)和文本文件(t)。在Windows下,打开文件的默认是二进制格式,如果要以文本方式打开,则必须在打方式中加上字符't'。fprintf(fid,'%c','班级姓名学号作业序号主要内容');fprintf(fid,'%c\n','');fprintf(fid,'%c','测绘12-1王亚亚07122825上机实验作业一读写观测O文件');fprintf(fid,'%c\n','');%fprintf(fid,'%8.3f%8.3f%8.3f%8.3f%8.3f%8.3f\n',datee');fori=1:1%输出datee矩阵即时间forj=1:6fprintf(fid,'%d\t',datee(i,j));ifrem(i,1)==0&&rem(j,6)==0fprintf(fid,'%c','%时间');%fprintf(fid,'\r\n');endendendfprintf(fid,'%c\n','');fprintf(fid,'%c','L1L2C1P1P2');fprintf(fid,'%c\n','');fork=1:size(sats1,1);%卫星个数f=sats1(k,1);fori=1:1%输出obs1矩阵forj=1:5fprintf(fid,'%d\t',obs1(i,j));ifrem(i,1)==0&&rem(j,5)==0fprintf(fid,'
本文标题:卫星导航定位实验报告
链接地址:https://www.777doc.com/doc-1505606 .html