基于matlab的GPS单点定位程序开发
开发初衷
本人是测绘专业的学生,在初学GPS时遇到了很多代码问题,因此希望这篇文章能够帮助广大的测绘和导航专业的学子
代码开始
开发的第一部分是:文件读取,文件读取包括两部分,观测文件和星历文件读取。
首先介绍第一部分文件读取:读取星历文件(代码如下)
读取GPS星历(可以是混合星历)
// An highlighted block
function eph=loadxingli(filename)%%读取rinex3的星历文件
tic;
fprintf('Opening RINEX file: %s\n', filename);
finp = fopen(filename, 'rt');
%%%%星历索引值
no = 2:3; year_idx = 5:8; month_idx = 10:11; day_idx = 13:14;
hour_idx = 16:17; min_idx = 19:20; sec_idx = 22:23;
f1 = 5:23; f2 = 24:42; f3 = 43:61; f4 = 62:80;
%%%跳过文件头
while 1
line=fgetl(finp);
if contains(line,'END OF HEADER')
break;
end
end
%%预设数组
sat=1:32;nav=cell(1,32);
eph=[];SEP=zeros(size(sat));
block_init =zeros(42,1);
while ~feof(finp)%%每次循环8行
line=fgetl(finp);
system=line(1);
if system=='G'
prn = str2double(line(no));
idx = find(prn ==sat);
SEP(idx) = SEP(idx) + 1;
tt = zeros(6,1);
tt(1) = round(str2double(line(year_idx)));
tt(2) = round(str2double(line(month_idx)));
tt(3) = round(str2double(line((day_idx))));
tt(4) = str2double(line(hour_idx));
tt(5) = str2double(line(min_idx));
tt(6) = str2double(line(sec_idx));
[GPSWeekNo, GPSSecond, DOY, DOW] = greg2gps(tt');
mTime = datenum(tt');
block=block_init;
block(1:11) = [tt; GPSWeekNo; GPSSecond; DOY; DOW; mTime];
%%%第一行
block(12:14) = [str2double(line(f2));str2double(line(f3));str2double(line(f4))];
%%%第二行
line=fgetl(finp);
block(15:18) = [str2double(line(f1));str2double(line(f2));...
str2double(line(f3));str2double(line(f4))];
%%%第三行
line=fgetl(finp);
block(19</