利用MATLAB编制的GPS单点定位程序.doc
- 文档编号:2586561
- 上传时间:2022-11-02
- 格式:DOC
- 页数:12
- 大小:70KB
利用MATLAB编制的GPS单点定位程序.doc
《利用MATLAB编制的GPS单点定位程序.doc》由会员分享,可在线阅读,更多相关《利用MATLAB编制的GPS单点定位程序.doc(12页珍藏版)》请在冰豆网上搜索。
functiont=TimetoJD(Y,M,D,h,f,s)
if(Y>=80)
Y=Y+1900;
else
Y=Y+2000;
end
ifM<=2
Y=Y-1;
M=M+12;
end
JD=fix(365.25*Y)+fix(30.6001*(M+1))+D+h/24+f/1440+s/24/3600+1720981.5;
t=JD-2444244.5;
function[head,obs]=ReadObsData
%读接收机观测数据文件
%HeadODat:
astructurestoresheaderinformationifo-file
%.ApproXYZ[3];//approximatecoordinate
%.interval;//intervalsoftwoadjacentepochs
%.SiteName;//pointname
%.Ant_H;//antennaheight
%.Ant_E;//eastoffsetoftheantennacenter
%.Ant_N;//northoffsetofthenantennacenter
%.TimeOB;//firstepochtimeinmodifuiedJuliantime
%.TimeOE;//lastepochtimeinmodifuiedJuliantime
%.SumOType;//numberoftypesofobservables
%.SumOO[SumOType];//typeofobservables0-L1,1-L2,2-C1,3-P1,4-P2,5-D1,6-D2,
%ObsODat:
astructurestoresobservablesbyoneandoneepoch
%.TimeOEpp[2];//recievertimeofepoch
%.SatSum;//numberofsatellites
%.SatCode[SatSum];//satellites'PRN
%.Obs_FreL1[SatSum];
%.Obs_FreL2[SatSum];
%.Obs_RangeC1[SatSum];
%.Obs_RangeP1[SatSum];
%.Obs_RangeP2[SatSum];
globalHeadODat;
globalObsODat;
[fname,fpath]=uigetfile('*.*','选择一个O文件');
O_filename=strcat(fpath,fname);
fid1=fopen(O_filename,'rt');
if(fid1==-1)
msgbox('fileinvalide','warning','warn');
return;
end
%将文件头数据存入结构体HeadODat中
t=0;
while(t<100)
s=fgets(fid1);
t=t+1;
L=size(s,2);
ifL<81
s(L+1:
81)='';
end
instrS=s(61:
81);
%测站点近似坐标
ifstrncmp(instrS,'APPROXPOSITIONXYZ',19)
HeadODat.ApproXYZ=zeros(1,3);
HeadODat.ApproXYZ(1,1)=str2num(s(1:
14));
HeadODat.ApproXYZ(1,2)=str2num(s(15:
28));
HeadODat.ApproXYZ(1,3)=str2num(s(29:
42));
%历元间隔;
elseifstrncmp(instrS,'INTERVAL',8)
HeadODat.interval=str2num(s(5:
11));
%测站点号
elseifstrncmp(instrS,'MARKERNAME',11)
HeadODat.SiteName=s(1:
4)
%天线中心改正
elseifstrncmp(instrS,'ANTENNA:
DELTAH/E/N',20)
HeadODat.Ant_H=str2num(s(1:
14));
HeadODat.Ant_E=str2num(s(15:
28));
HeadODat.Ant_N=str2num(s(29:
42));
%第一个历元时间
elseifstrncmp(instrS,'TIMEOFFIRSTOBS',17)
year=str2num(s(1:
6));
month=str2num(s(7:
12));
day=str2num(s(13:
18));
hour=str2num(s(19:
24));
minute=str2num(s(25:
30));
second=str2num(s(31:
42));
HeadODat.TimeOB=TimetoJD(year,month,day,hour,minute,second);
%最后一个历元时间
elseifstrncmp(instrS,'TIMEOFLASTOBS',16)
year=str2num(s(1:
6));
month=str2num(s(7:
12));
day=str2num(s(13:
18));
hour=str2num(s(19:
24));
minute=str2num(s(25:
30));
second=str2num(s(31:
42));
HeadODat.TimeOE=TimetoJD(year,month,day,hour,minute,second);
%观测值类型
elseifstrncmp(instrS,'#/TYPESOFOBSERV',19)
HeadODat.SumOType=str2num(s(1:
6));
HeadODat.SumOO=ones(1,HeadODat.SumOType)*-1;
fork=1:
HeadODat.SumOType
f=s(k*6+5:
k*6+6);
ifstrcmp(f,'L1')
HeadODat.SumOO(1,k)=0;
elseifstrcmp(f,'L2')
HeadODat.SumOO(1,k)=1;
elseifstrcmp(f,'C1')
HeadODat.SumOO(1,k)=2;
elseifstrcmp(f,'P1')
HeadODat.SumOO(1,k)=3;
elseifstrcmp(f,'P2')
HeadODat.SumOO(1,k)=4;
elseifstrcmp(f,'D1')
HeadODat.SumOO(1,k)=5;
elseifstrcmp(f,'D2')
HeadODat.SumOO(1,k)=6;
end
end
%头文件结束
elseifstrncmp(instrS,'ENDOFHEADER',13)
break;
else
continue;
end
end
%观测数据结构体%观测数据结构
t=0;
while~feof(fid1)
%每个历元的第一行数据,时间和观测到的卫星号
s=fgets(fid1);
t=t+1;
year=str2num(s(1:
3));
month=str2num(s(4:
6));
day=str2num(s(7:
9));
hour=str2num(s(10:
12));
minute=str2num(s(13:
15));
second=str2num(s(16:
26));
%历元时间
ObsODat(t).TimeOEp=[year,month,day,hour,minute,second];
ObsODat(t).TimeOEpp=TimetoJD(year,month,day,hour,minute,second);
%该历元观测到的卫星数
ObsODat(t).SatSum=str2num(s(30:
32));
%该历元观测到的卫星号
ObsODat(t).SatCode=zero
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 MATLAB 编制 GPS 单点 定位 程序