卫星导航定位实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

China University of Mining and Technology 《卫星导航定位算法与程序设计》

实验报告

学号: 07122825

姓名:王亚亚

班级:测绘12—1

指导老师:王潜心/张秋昭/刘志平

中国矿业大学环境与测绘学院

2015-07-01

实验一编程实现读取下载的星历

一、实验要求:

读取RINEX N 文件,将所有星历放到一个列表(数组)中。并输出和自己学号相关的卫星编号的星历文件信息。读取RINEX O文件,并输出指定时刻的观测信息。

二、实验步骤:

1、下载2014年的广播星历文件和观测值文件,下载地址如下:

ftp:///gps/data/daily/2014/

2、要求每一位同学按照与自己学号后三位一致的年积日的数据文件和星历文件,站点的选择必须选择与姓氏首字母相同的站点的数据,以王小康同学为例,学号:07123077,需下载077那天的数据。有些同学的学号365<后三位

<730,则取学号后三位-365,以姜平同学为例:学号10124455,下载455-

365=90 天的数据,有些同学的学号730<后三位<=999,则取学号后三位-730,以万伟同学为例:学号:07122854,则下载854-730 = 124天的数据。可以选择wnhu0124.14n wnhu0124.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、程序运行结果:

三、编程主要代码:

1、读写N 文件主函数代码: clc;%清除屏幕之前打过的代码

clear all ;%从内存中释放所有的内存变量和数组以及所有用户自定义的菜单栏, 菜单, 和窗口的定义。

close all ;%关闭当前及所有工作区中所有打开的数据库, 表, 和索引,并选择 1 号工作区 [filename,filepath]=uigetfile('*.14n','选择计算的输入文件');%打开窗口选取计算的输入文件 file=[filepath filename];%获得文件名 rinexe(file,'eph.dat');%函数rinexe 读取一个标准格式化导航信息文件并重新格式化数据为21行列数等于卫星数的矩阵。

Eph = get_eph('eph.dat');%将存放在‘eph.dat ’中的导航电文数据提取出来,为计算卫星位置做准备,返回值-eph 星历矩阵,将读到的数据存入内存(注意:eph 星历矩阵,每颗卫星存放21个参数) Eph

[filename,filepath]=uiputfile('王亚亚-作业1读写N 导航文件.txt','选择一个路径对结果文件保存');%选择路径保存输出的结果文件 file=[filepath filename];%获取文件名 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',' '); for k = 1: size(Eph,1)

p=num2str(Eph(k,44));%输出第14颗卫星的星历数据

fprintf(fid,'%c',p);%以一个字符输出 if k == 1;

fprintf(fid,'%c',' %GPS 卫星PRN 编号'); end if k == 2;

fprintf(fid,'%c',' %GPS 卫星钟的漂移速度'); end

if k == 3; fprintf(fid,'%c',' %参考时刻的升交点赤经M0'); end

if k == 4; fprintf(fid,'%c',' %roota sqrt(A)( m1 / 2(根号下) ) 轨道长半轴的平方根'); end

if k == 5; fprintf(fid,'%c',' %deltan Δn(rad /s) 平均运动修正量'); end

if k == 6; fprintf(fid,'%c',' %ecc e 轨道偏心率'); end if k == 7;

fprintf(fid,'%c',' %omega ω(rad) 近地点的角距'); end

if k == 8; fprintf(fid,'%c',' %cuc Cuc(rad) 纬度幅角的余弦调和项改正的振幅'); end

if k == 9; fprintf(fid,'%c',' %cus Cus(radians) 纬度幅角的正弦调和项改正的振幅'); end

if k == 10; fprintf(fid,'%c',' %crc Crc(m) 轨道半径的余弦调和项改正的振幅');

end

if k == 11; fprintf(fid,'%c',' %crs Crs(m)轨道半径的正弦调和项改正的振幅'); end

if k == 12; fprintf(fid,'%c',' %i0 i0(rad) 轨道倾角'); end

if k == 13; fprintf(fid,'%c',' %idot i(rad/s)(IDOT) 轨道倾角变化率'); end

if k == 14; fprintf(fid,'%c',' %cic Cic(rad) 轨道倾角的余弦调和项改正的振幅'); end

if k == 15; fprintf(fid,'%c',' %cis

Cis(rad) 轨道倾角的正弦调和项改正的振幅'); end

if k == 16;

fprintf(fid,'%c',' %Omega0

Ω(rad)(OMEGA) 参考时刻的升交点的赤经'); end

if k == 17;

fprintf(fid,'%c',' %Omegadot Ω

(rad/s)(OMEGA DOT) 升交点赤经的变化率'); end

if k == 18;

fprintf(fid,'%c',' %toe TOE星历的参考时刻(GPS周内的秒数) 星历表参考历元'); end

if k == 19; fprintf(fid,'%c',' %af0 卫星钟的偏差(s)卫星钟偏差'); end

if k == 20; fprintf(fid,'%c',' %af1 卫星钟的漂移(s/s)'); end

if k == 21;

fprintf(fid,'%c',' %toe 存储TOE星历的参考时刻(GPS周内的秒数) 电文发送时刻'); end

fprintf(fid,'%c\n',' ');

end

fclose(fid);

2、读写O文件主函数代码:

clc;%清除屏幕之前打过的代码

clear all;%从内存中释放所有的内存变量和数组以及所有用户自定义的菜单栏, 菜单, 和窗口的定义。

close all;%关闭当前及所有工作区中所有打开的数据库, 表, 和索引,并选择1 号工作区% We identify the observation file and open it

我们确定观测文件并打开它

[filename,filepath]=uigetfile('*.14O','选择计算的输入的O文件');

file=[filepath filename];%文件名

fid1 = fopen(file,'rt');%r:读出观测文件ofile1,t:以文本的格式(因为fopen函数默认打开方式是二进制)

[Obs_types1, ant_delta1, ifound_types1, eof11] = anheader(file);%打开观测文件ofile1,从头文件中截取观测类型Obs_types1、天线参数的信息ant_delta1,以及标明是否寻找到观测类型行ifound_types1、是否到文件尾的判定eof11 NoObs_types1 = size(Obs_types1,2)/2;%返回观测类型Obs_types1列数(1:行2:列)的

Obs_types1矩阵是1行14列:[C1P1P2L1L2D1D2] size(Obs_types1,2)值是14除以2得观测值类型个数是7种

Pos = [];

% There are 20 epochs of data in ofile1

SITE247J.01N文件中有20个历元的数据

for q = 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的长度,获取卫星个数

% We pick the observed P2 pseudoranges 我们获取观测的P2码伪距其中伪随机噪声码(PN)即测距码主要有精测距码(P码)和粗测距码(C/A码)两种。其中P码的码率

相关文档
最新文档