《测绘程序设计》课件12 来自07测绘3 魏志刚_第1页
《测绘程序设计》课件12 来自07测绘3 魏志刚_第2页
《测绘程序设计》课件12 来自07测绘3 魏志刚_第3页
《测绘程序设计》课件12 来自07测绘3 魏志刚_第4页
《测绘程序设计》课件12 来自07测绘3 魏志刚_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

测绘程序设计第六章GPS程序设计§6-3数据格式转换

为了使编写的程序通用化,一般首先都是将所使用的GPS接收机数据格式转换为RINEX通用格式,然后利用RINEX格式编制所需要的软件。这样,一个软件可以处理多种GPS接收机的数据。为此,需将原始观测量转换为RINEX通用格式。下面以ASHTECH为例给出了数据格式转换的源程序torinex.C。torinex.c数据格式转换程序#include“rinex.h”#include“sv.h”#defineASHTECH1#defineEG—ASCII0#defineEG—BINARY1RinexObsHeaderType

rinex_obs_header;charerr_str[64];int

weekno;int_MeasType[9];u1sub1[10][3],sub2[10][3],sub3[10][3];int

EphPrn;u1hex_ephemeris[24][3];doubletphase[3][8];doubleF1[3][8],F2[3][8];intCount1=0,Count2=0;intAshtech2Rinex(char*SourceFile,char*ObsFile);intAshtech21Rinex(char*SourceFile,char*NavFile);int

ReadAshEpoch(FILE*f,int

numobs,RinexEpohType*RinexEpoch);int

ReadAshEph(FILE*f,SVText*eph);voidmain(){intType;char*ObsInFile,*EphInFile,str[200];char*RinexObsFile,*RinexNavFile;FILE*f1,*f2;

clrscr();

printf("******TransfertoRinexFile******\n”);

printf(“SourceFileType:1-Ashtech2-Trimble40003-Navsymm\n”);

printf(“4-Motorola5-Novatel\n”);do{printf(“PleaseInputGPSType:”);

scant(“%i”,&Type);

if((Type>5)||(Type<1)){printf(“InvalidTypeInput,InputAgain!\n”);return;}elsebreak;}while(1);

InitRinexObsHeader();

RinexObsFile=“rinex.98o”;

RinexNavFile=“rinex.98n”;

WeekNo=0;

switch(Type){caseASHTECH:

prmtf(“PleaseInputSoure

ObsFileName:”);Scanf(“%20s”,ObsInFile);

printf(“PleaseInputRinex

NavFileName:”);scanf(“%20s”,EphInFile);

if(Type==ASHTECH){Ashtech21Rinex(EphInFile,RinexNavFile);Ashtech2Rinex(ObsInFile,”temp.obs”);}

default:break;}

If((fl=fopen(RinexObsFile,”wt+”))==NULL){fprintf(stderr,”Cannotopenoutputfile.\n”);return;}if((f2=fopen(“temp.obs”,”rt”))==NULL){fprintf(stderr,”Cannotopentempfile.\n”);return;}MeasType[0]=1;MeasType[1]=2;WriteRinexObsHeaderFiIe(f1,&rinex_obs_header);while(!feof(f2)){fgets(str,2000,f2);fputs(str,f1);}fclose(f1);fclose(f2);}intAshtech2Rinex(char*SourceFile,char*ObsFile){FILE*f1,*f2;

int

i,flag,FirstEpoch,numobs;

RinexEpochType

RinexEpoch;

struct

FileHeaderStruct{charversion[10];unsignedchariver;charrtype[10J;charchnver[10];charnavver[10];

intcap;/*1=L1only2=L1L24=rangeonly*/longreserved;unsignedcharnumobs;charspare[42];}Header;if((f1=fopen(ObsFile,”wa+”))==NULL){sprintf(err_str,”cannotopenfile\n”);return1;}if((f2=fopen(SourceFile,”rb”))==NULL){sprintf(err_str,”cannotopenfile\n”);return1;}

if(fread(&Header,sizeof(structFileHeaderStruct),1,f2)!=1){sprintf(err_str,”filereaderror”);return1;}

numobs=Header.numobs;flag=0;FirstEpoch=1;do{ResetRinexEpoch(&RinexEpoch);flag=ReadAshEpoch(f2,numobs,&RinexEpoch);

if(FirstEpoch==1){rinex_obs_header.StartYear=rinex_obs_header.EndYear;

rinex_obs_header.StartMonth=rinex_obs_header.EndMonth;

rinex_obs_header.StartDay=rinex_obs_header.EndDay;

rinex_obs_header.StartHour=rinex_obs_header.EndHour;

rinex_obs_header.StartMinute=rinex_obs_header.EndMinute;

rinex_obs_header.StartSecond=rinex_obs_header.EndSecond;

FirstEpoch=0;}WriteRinexObsEpochFile(f1,&RinexEpoch);}while(flag==0);fclose(f1);fclose(f2);//free(RinexEpoch);return0;}intAshtech21Rinex(char*SourceFile,char*NavFile){FILE*f,*f2;

SVText*RinexEpp;

intFirst;

if((f=fopen(SourceFile,”rb”))==NULL){sprintf(err_str,”cannotopenfile\n”);retum1;}if((f2=fopen(NavFile,”wa”))==NULL){sprintf(err_str,”cannotopenfile\n”);retum1;}

if((RinexEpp=(SVText*)malloc(sizeof(SVText)))==NULL){sprintf(err_str,”notenoughmem\n”);retum1;}WriteRinexNavHeaderFile(f2);

while(!feof(f)){ResetRinexEpp(RinexEpp);

ReadAshEph(f,RinexEpp);WriteRinexNavFile(f2,RinexEpp);}fclose(f);fclose(f2);free(RinexEpp);return0;}int

ReadAshEpoch(FILE*f,int

numobs,RinexEpochType*RinexEpoch){longt;

int

i,j;

doubleC=299792458.0;doubleGPStime;

struct

PosStruct{charsitename[4];doublercv_time,navx,navy,navz,navt,navdot;floatnavxdot,navydot,navzdot;

intPDOP;unsignedcharnum-sats;}PosData;

struct

SatStruct/*观测记录*/{unsignedcharsvprn;unsignedcharelev;/*单位:度*/unsignedcharazim;/*单位:10度*/unsignedcharchnind;}SatData;

struct

RawDataStruct{doubleraw_range;floatsmth_r;

int

smth_n;unsignedcharpolarity,warning,goodbad,ireg,qa_phase;longdoppler;doublecarphase;}RawData[3];

if(fread(&PosData,sizeof(structPosStruct),1,f)!=1){sprintf(err_str,”filereaderror”);retum1;}

GPStime=PosData.rcv_time-PosData.navt/C;

rinex_obs_header.AppX=PosData.navx;

rinex_obs_header.AppY=PosData.navy;

rinex_obs_header.AppZ=PosData.navz;for(i=0;i<PosData.num_sats;i++){if(fread(&SatDate,sizeof(structSatStruct),1,f)!=1){sprintf(err_str,”filereaderror”);retum1;}

for(j=0;i<numobs;j++){if(fread(&RawDate[j],sizeof(struct

RawDataStruct),1,f)!=1){sprintf(err_str,”filereaderror”);retum1;}}

RinexEpoch->satnum++;

RinexEpoch->PRN[i]=SatData.svprn;

RinexEpoch->ca_range[i]=RawData[0].raw_range*C-PosData.navt;

RinexEpoch->phase_l1[i]=RawData[0].carphase;

RinexEpoch->P1_range[i]=RawData[1].rsw_range*C-PosData.navt;

RinexEpoch->phase_l2[i]=RawData[1].carphase;

RinexEpoch->Doppler_l1[i]=RawData[0].doppler/10000.0;}

GetYMDHMS(WeekNo,GPStime,&RinexEpoch->year,&RinexEpoch->month,&RinexEpoch->day,&RinexEpoch->hour,&RinexEpoch->minute,&RinexEpoch->second);rinex_obs_header.EndYear=RinexEpoch->year;rinex_obs_header.EndMonth=RinexEpoch->month;rinex_obs_header.EndDay=RinexEpoch->day;rinex_obs_header.EndHour=RinexEpoch->hour;rinex_obs_header.EndMinute=RinexEpoch->minute;rinex_obs_header.EndSeoond=RinexEpoch->second;RinexEpoch->year-=1900;RinexEpoch->flag=0;return0;}int

ReadAshEph(FILE*f,SVText*eph){struct

EppStruct{unsignedcharpm,week;longtow;floattgd;longaodc,tocfloataf2,af1,af0;longaode;floatdeltan;doublem0,e,roota;longtoe;floatcic,crc,cis,crs,cuc,cus;doubleomega0,omega,i0;floatomegadot,idot;int

accuracy,health,fit;}EppData;if(fread(&EppData,sizeof(structEppStruct),1,f)!=1){sprintf(err_str,”filereaderror”);retum1;}eph->prn=EppData.prn; WeekNo=eph->wn=EppData.week;eph->tow=EppData.tow; eph->tgd=EppData.tgd;eph->aodc=EppData.aodc; eph->toe=EppData.toe;eph->af2=EppData.af2;eph->af1=EppData.af1:eph->af0=EppData.af0; eph->aode=EppData.aode;eph->deltan=EppData.deltan*PI:eph->m0=EppData.m0*PI; eph->e=EppData.e:eph->roota=EppData.roota;eph->toe=EppData.toe:eph->cic=EppData.cic;eph->crc=EppData.crc;eph->cis=EppData.cis;eph->crs=EppData.crs;eph->cuc=EppData.cuc;eph->cus=EppData.cus;eph->omega0=EppData.omega0*PI;eph->omega=EppData.omega*PI;eph->i0=EppData.i0*PI;eph->omegadot=EppData.omegadot*PI;eph->idot=EppData.idot*PI;eph->accuracy=EppData.accuracy;eph->health=EppData.Health;eph->fit=EppData.fit;return0;}§6-3卫星位置计算程序设计

为了计算卫星在WGS-84大地坐标系中的位置,首先需要计算卫星在其轨道平面内的位置。此时定义:原点与地心M相重合,x轴指向升交点,y轴在轨道平面内垂直于x轴,我们称其为轨道平面直角坐标系,在卫星坐标计算中,它是一种过渡性的坐标系。下面我们讨论观测瞬间GPS卫星在地面坐标系中坐标的计算方法:

1.计算卫星运行的平均角速度na为卫星轨道的长半轴,GM为地球引力常数(含大气层),其值为398600.5×1014m3/s2它们都有确定值。利用导航电文中给出的摄动改正数Δn,则可算出卫星运行的实际平均角速度:

n=n0+Δn

2.计算归化时间tk

tk=t-t0e

3.计算观测瞬间的卫星平近点角从Mk

Mk=M0+ntk

4.计算偏近点角Ek

Ek

=Mk+esinEk

(Ek,Mk以弧度计)Ek

=Mk+esinEk

(Ek,Mk以弧度计)迭代法Ek

=Mk+esinEk

(Ek,Mk以弧度计)微分迭代法:取近似值:计算相应的偏近点角改正数:重复上面的运算,直到dM可以忽略为止。

5.计算真近点角Vk

6.计算升交距角Φk

Φk=Vk+ωω为卫星电文给出的近地点角距。7.摄动改正项的计算8.计算经过摄动改正的升交距角μk、卫星的矢径rk和轨道倾角ikμk

=Φk

+δμ

rk

=a(1-cosEk)+δrik

=i0+δi

+itk

9.计算卫星在轨道平面直角坐标系的坐标

xk=rk

cosμk

yk=rk

sinμk

10.观测时刻升交点经度的计算

=7.29211567×10-5rad/s,、、toe可从卫星电文中获取。

11.计算卫星在地心固定坐标系中的直角坐标

12.卫星在协议地球坐标系中坐标的计算

程序如下:§6-4GPS单点绝对定位程序设计

GPS绝对定位也叫单点定位,它是利用一台接收机观测卫星独立地确定出自身在WGS-84地心坐标系的绝对位置。这一位置在WGS-84坐标系中是唯一的,所以称为绝对定位。因为利用一台接收机能完成定位工作,又称为单点定位。GPS绝对定位的实质是基于测量学中的空间距离后方交会。

基本思想:在GPS观测中,得到卫星的位置和卫星到测点的距离(伪距),然后就以卫星为球心、以距离为半径做球面。如果同时观测了3颗卫星,我们便得到3个球面,即可组成包括3个未知数(X,Y,Z)的3个方程式。这3个球面相交的一点,就是要求的测点的位置。也就是说,对这3个方程式求解,便得到该点的坐标。由于GPS卫星在天空独立地运行,每颗卫星的GPS时间经过改正后形成为统一的UTC时间。用户接收机观测得到的卫星时间和接收机的本地时间是不同的,这就是说,卫星钟和接收机钟无法保持同步。所以,接收机实际观测的测点到卫星之间的距离,不是实际的距离,而包含有卫星钟和接收机钟之间的钟差所引入的误差,称之为伪距。接收机测量的是伪距.其中包括3个坐标分量未知数和1个钟差未知数。为了实时求解这4个未知数,以实现绝对定位,必须至少同时观测和得到4颗卫星的伪距观测值。这就是说,它的每一次定位代表了该测点在该时刻的位置,与其他测点和其他时刻无关。

1.同时观测4颗卫星的绝对定位基本方程由于接收机测量的是伪距,在观测值中存在着接收机钟差,加之测量点的三维坐标为待求值,一共有4个未知数。要求解出这4个未知数,必须有4个方程式。为此,要实现单点绝对定位必须同时观测4个卫星(图),组成定位的基本方程。设ρ为伪距观测量,R为接收机到卫星的真距离,τ为接收机钟差,则观测方程为

式中,假定伪距观测量ρ已经过星历中的对流层和电离层改正;

为卫星的瞬时地心坐标,可由卫星星历电文中求出;

为接收机的地心坐标,是待求量。代入待测点的初始值,进行线性化:三个坐标分量的系数是接收机到卫星的单位矢径分别向三个坐标轴投影的方向余弦。lmn规定上标为卫星号,下标i为测站号,则组成伪距定位的基本方程采用矩阵表示在计算过程中,下列几个问题必须注意:(1)卫星之间的钟差是利用导航电文中给出的钟差改正数统一到UTC时间。这里考虑的钟差是指卫星与接收机之间的钟差。(2)在计算中采用了接收机的概略坐标,第一次计算出的结果是不精确的。因此,必须反复迭代计算,直到满足规定的限差为止。(3)在一般导航型接收机中,都是采用这一数学模型计算位置的。现有的接收机都能同时跟踪四个以上的卫星,但在计算中仍然利用四个卫星,不过是经过挑选的四个卫星。为此,按卫星的星座分布分成若干组,计算其PDOP,最后选择和利用一组其PDOP为最小的卫星作为计算数据,以得到最高的定位精度。

2.同时观测4颗以上卫星在测地型接收机和高质量的导航型接收机中,都具有8个以上的通道,能同时跟踪7颗以上的卫星。为了提高定位精度,在计算位置过程中,利用了所有的卫星观测值。在这样情况下,出现了多余观测,观测值的个数超过了未知数的个数,使得上式的右端不等于零,于是其精度为式中,

为残差向量。根据最小二乘法的原理,最后得到接收机的位置解为式中,m0为伪距测量中误差,Qx为权系数阵。这种多余观测的优点在于消除了卫星定位的系统误差。仅用4颗卫星的差分定位中,当中间更换卫星时,位置会出现较大的偏移,等过了数秒后又逐渐回到原位。定位精度越高,这一现象越明显。当应用4颗以上的卫星定位时,这一现象就不存在了。程序如下:abs_pos.c——单点绝对定位程序#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<dos.h>#mclude<graphics.h>#include<math.h>#include<string.h>#include<process.h>#definePI3.1415926535898#defineE0.00669437999013#defineN6378137.0doubledx[9],h[12][12],p[9][9],x[12][3],y[12][3],z[12][3],a[9][9],b[9][9];doublec[9][9],d[9],s[12],f[9][9],g[9][9],o[9][9],ss[12],phi[9][9],phase[12];doubleddx[9],ttr,tr,ddt,e,w,sum,dt,ddr,duk,drk,lon,omgk,lat,alt;main(){intpm[12],i,j,k,l,count,Satnum;charkch[9],kc,line[121],*start,*end;FILE*fin,*fin1;ddr=1.0*pow(10.0,5.0);for(i=0;i<9;i++){dx[i]=0.0;for(j=0;j<9;j++){h[i][j]=0;p[i][j]=0;phi[i][j]=0;}}for(i=0;i<4;i++){p[i][i]=1.0*pow(10.0,10.0);p[i+4][i+4]=1.0;ss[i]=0.0;}p[3][3]=1.0*pow(10.0,14.0);p[7][7]=1.0*pow(10.0,8.0);p[8][8]=1.0*pow(10.0,4.0);dx[0]=-2377249.0;dx[1]=5387268.0;dx[2]=2442992.0;dx[3]=0.0;for(i=0;i<4;i++){phi[i][i]=1.0;phi[i+4][i+4]=1.0;phi[i][i+4]=20.0}phi[3][8]=400.0;phi[7][8]=20.0;phi[8][8]=1.0;if((fin=fopen(“data.out”,”r”))==NULL)exit(0);count=0;do{fgets(line,120,fin);for(i=0;i<4;i++)kch[i]=line[30+i];Satnum=atoi(kch);for(i=0;i<Satnum;i++){fgets(line,120,fin);end=line;s[i]=strtod(line,&end);start=end;phase[i]=strtod(start,&end);start=end;x[i][0]=strtod(start,&end);start=end;x[i][1]=strtod(start,&end);start=end;x[i][2]=strtod(sum.&end);}for(i=0,i<9;i++){e=0.0;for(k=0;k<9;k++)e=e+phi[i][k]*dx[k];d[i]=e;}for(i=0;i<9;i++)dx[i]=d[i];for(i=0;i<Satnum;i++){ss[i]=sqrt(pow((x[i][0]-dx[0]),2.0)+pow((x[i][1]-dx[1]),2)+pow((x[i][2]-dx[2]),2.0));h[i][0]=(dx[0]-x[i][0])/ss[i];h[i][1]=(dx[1]-x[i][1])/ss[i];h[i][2]=(dx[2]-x[i][2])/ss[i];h[i][3]=1.0;}for(i=0;i<9;i++){for(j=i;j<9;j++){e=0.0;for(k=0;k<9;k++){for(l=0;l<9;l++)e=e+phi[i][k]*phi[j][l]*p[k][l];}a[i][j]=e;a[j][i]=e;}}for(i=0;i<9;i++){for(j=0;j<9;j++)p[i][j]=a[i][j];}for(i=0;i<9;i++){for(k=0;k<Satnum;k++){e=0.0;for(j=0;j<9;j++)e=e+p[i][j]*h[k][j];b[i][k]=e;}}for(i=0;i<Samum;i++){for(j=0;j<Satnum;j++){e=0.00;for(k=0;k<9;k++)e=e+h[i][k]*h[k][j];o[i][j]=e;}}for(i=0;i<Samum;i++)o[i][i]=o[i][i]+ddr;for(k=0;k<Satnum;k++){for(i=0;i<Satnum;i++){for(j=0;j<Satnum;j++)f[i][J]=0.00;f[i][i]=1.00;f[i][k]=-o[i][k]/o[k][k];}w=1.0/o[k][k];f[k][k]=w;for(i=0;i<Satnum;i++){for(j=0;j<Satnum,j++){sum=0.0;for(l=0;l<Satnumt;l++)sum=sum+f[i][l]*o[l][j];g[i][j]=sum;}}for(i=0;i<Satnum;i++){for(j=0;j<Satnum,j++){o[i][j]=g[i][j];o[i][k]=f[i][k];}}}for(i=0;i<9;i++){for(j=0;j<Satnum;j++){e=0.0;for(k=0;k<Satnum;k++)e=e+b[i][k]*o[k][j];f[i][j]=e;}}for(i=0;i<9;i++){for(j=0;j<Satnum;j++)b[i][j]=f[i][j];}for(i=0;i<9;i++){for(j=0;j<9,j++){sum=0.0;for(k=0;k<Satnumt;k++)sum=sum-b[i][k]*h[k][j];c[i][j]=sum;}c[i][i]=1.0+c[i][i];}for(i=0;i<9;i++){for(j=0;j<9,j++){e=0.0;for(k=0;k<9;k++)e=e+c[i][k]*a[k][j];p[i][j]=e;p[j][i]=e;}}for(i=0;i<Satnum;i++)s[i]=s[i]-ss[i]-dx[3];for(i=0;i<9;i++){e=0.0;for(j=0;j<Satnum;j++)e=e+b[i]Ej]*s[j];dx[i]=dx[i]+e:}duk=dx[0];drk=dx[1];lon=atan2(drk,duk);lat=0;for(i=0;i<48;i++){omgk=N/sqrt(1.0-E*sin(lat)*sin(lat))+alt;lat=(duk*duk+drk*drk)/omgk/omgk;lat=sqrt(lat);lat=acos(lat);}lat=lat*180.0/PI;i=lat;lat=i*100.0+(lat-i)*60.0;lon=lon*180.0/PI;i=lon;lon=i*100.0+(lon-i)*60.0;count++;printf(“%4i%4i%12.6f%12.6f\n”,count,Satnum,lon,lat);printf(“%12.2f%12.2f%12.2f%12.2f\n”,dx[0],dx[1],dx[2],dx[3]);printf(“%12.2f%12.2f%12.2f%12.2f%10.5f\n”,dx[4],db([5],dx[6],dx([7].dx[8]);printf(“%12.2f%12.2f%12.2f%12.2f\n”.sqrt[0][0]),sqrt(p[1][1]),sqrt(p[2][2]),sqrt(p[3][3]));printf(“%12.2f%12.2f%12.2f%12.2f%10.5f\n”,sqrt(p[4][4]),sqrt(p[5][5]),sqrt(p[6][6]),sqrt(p[7][7]),sqrt(p[8][8]));if(kbhit()){kc=getch();if(kc==0x1B){fclose(fin);exit(0);}}getch();}while(!feof(fin));fclose(fin);}§6-5GPS静态相对定位程序设计简介在GPS相对定位中,至少要应用两台精密测地型GPS接收机。两台GPS接收机分别安置在基线的两端点,同步观测同一组GPS卫星,以求解出基线端点的相对位置或基线向量。当然,这一方法也可以推广到多台接收机

相对定位基本方程假定在一个站上安置GPS接收机进行观测,记录下的不是伪距观测值,而是相位观测值。设Φ为相位观测量,R为接收机到卫星的真距离,τ为接收机钟差,σ为对流层和电离层的延迟,则观测方程为在GPS相对定位中,至少要应用两台精密测地型GPS接收机。两台GPS接收机分别安置在基线的两端点,同步观测同一组GPS卫星,以求解出基线端点的相对位置或基线向量。当然,这一方法也可以推广到多台接收机同时在多个点上进行观测,以求解多条基线向量。由此看出,GPS相对定位不是直接求解绝对位置,而是求解两点之间的相对基线向量。式中,Φ为相位小数,N为相位整周数,又称为相位模糊度;σ为信号通过对流层和电离层的延迟改正;(Xs,Ys,Zs)为卫星的瞬时地心坐标,可由卫星星历电文中求出;(Xp,Yp,Zp)为接收机的地心坐标,是未知量。2.单差观测方程假定在T1、T2两个测站上分别安置GPS接收机进行同时观测,记录相位观测量,则得到基本观测方程为如果观测了4颗卫星,方程式中的未知数除了3个位置参数外,还有2个接收机钟差,8个相位整周数和8个信号通过对流层和电离层的延迟改正数。假定两个测站相距很近,例如小于10km,对于远在20000km外的卫星而言,卫星信号到达两测站所通过的路径基本相同。这就是说,同一卫星信号到达两接收机的电离层和对流层延迟是相同的

。在GPS相对测量中,将两个测站同一时刻的观测量相减,就可以消除掉电离层和对流层延迟带来的误差,同时还可以消除掉卫星钟差和轨道误差,于是得到单差(SD)观测方程。单差观测为两接收机t时刻观测同一颗卫星的相位整周期的差值。为两接收机t时刻观测同一颗卫星的相位小数的差值。为两接收机t时刻观测同一颗卫星的距离差值。为两个接收机的绝对钟差,与观测卫星和观测时间无关。三个坐标分量,还有j个相位整周数N以及2个接收机钟差。

3、双差观测方程将同一时刻观测的两颗卫星的单差方程求差,得到双差观测方程::为两历元间两测站得到的相位整周数差之差。:为两历元间两侧站得到的相位小数差之差:为两历元间两侧站到卫星的距离差之差。未知数3个坐标分量,J个相位整周数N。(1)如果已知T1,T2两个测站的概略坐标,可以求解3个坐标分量,J个相位整周数N。——浮动双差法。此法求解的相位整周数不是整数,而是实数,将此实数凑整,求解出的相位整周数固定为整数。然后带入双差观测方程中求解,——固定双差法。(2)如果不知道T1,T2两个测站的概略坐标,可进行三差计算。

4、三差计算双差观测方程中,只剩下基线向量和相位整周数差值部分,在接收机不失锁的情况下,相位整周数为固定值,因此对相邻双差观测方程再取差,便得到三差观测方程:其中:三个坐标分量未知理论上只需要三个观测方程求解,实际上存在多余观测,可以组成误差方程,然后组成法方程求解,但是由于经过三次差分处理,精度不高,一般不采用GPS相对定位处理过程是以求解单条基线向量为出发点,因此与绝对定位不同,总是以两个测站的观测数据为基础,总是采用双差分观测方程,以测站间的基线向量坐标B()为未知数,建立误差方程和法方程式进行求解。Pdop:位置精度强弱度(0.5--99.9);为纬度、经度和高程等误差平方和的开根号值,所以Pdop的平方=Hdop

的平方+Vdop

的平方。具体含义:归因于卫星的几何分布,天空中卫星分布程度越好,定位精度越高(数值越小精度越高)。

PDOP位置精度因子(PositionDilutionofPrecision)

有利于用户所在位置的误差和卫星所在位置误差之间关系的无单位图形。在几何上,PDOP按由接收机和所能观测到的四颗卫星的连线所组成的锥状物的体积比例来平分1。对于好的定位而言,PDOP值小,例如3。比7大的值被认为是较差。因此,小的PDOP值与相隔较远的卫星相关。

PDOP是星座精度的最佳指示器,虽然PDOP不单独确定好的基线。小于等于4的PDOP产生最佳位置。5到7之间的PDOP可接受,大于等于7的PDOP较差。也能在接收机上设置PDOP截止值略去PDOP高于指定的限制值的星座。在Trimble测量接收机中默认的PDOP截止值为7。注意该截止值仅仅影响定位,对随后的基线处理没有大的影响。快速计划程序可计算区域观测期间的PDOP。通过输入位置和重要数据,预报可见的卫星和几何位置。实验五:GPS程序设计一、实验目的与要求

⒈初步掌握GPS测量数据文件的数据格式;⒉初步了解GPS测量常用软件设计方法、过程、程序代码编写方法及程序调试过程。二、实验安排

⒈本实验需要4学时。⒉实验每个小组1人,用C语言在计算机上完成程序代码的编写,并调试通过,然后用实际算例印证程序的正确性。2.时间安排:测绘B05-1:第八周周三3-4、9-10;三、实验步骤及要点⒈课余时间完成预先布置的卫星位置或伪距定位计算等数据处理问题,完成程序代码的纸上编写和设计工作;⒉在计算机上写入程序代码,进行调试;

⒊用预先准备好的算例进行印证,要求每人至少准备2组典型算例,并打印测试结果,附在实验报告中。四、要求

1.代码编写要独立完成,算法可以小组为单位进行研讨。

2.每次完成实验后应该撰写实验报告。作业:1、解释下面文件的含义AGMTMARKERNAME49806M001MARKERNUMBER-Unknown-OBSERVER/AGENCYLP03033ASHTECHZ-XII3CC00REC#/TYPE/VERSCR519991758ASH701945B_MSCITANT#/TYPE-2339956.2676-4707748.82493601666.0953APPROXPOSITIONXYZ0.00830.00000.0000ANTENNA:DELTAH/E/N11WAVELENGTHFACTL1/25L1L2C1P1P2#/TYPESOFOBSERV30.0000INTERVALteqcwindowed:start@2004Jan100:00:00.000COMMENTteqcwindowed:delta=86400.000secCOMMENT2004110030.0000000GPSTIMEOFFIRSTOBSENDOFHEADER04110030.000000009G30G21G9G10G24G6G17G5G4-22832532.55349-17773008.2724720678166.715420678166.953420678172.2434-2633618.18949-2027405.6334425168998.147425168997.416425169006.43342931227.783492305021.0954525445781.628425445782.032425445791.3734-21851983.16149-17008970.6114721132819.444421132818.614421132825.7834-19099050.07649-14582810.0774721538389.549421538389.123421538396.2864-12911278.33449-10049517.4484622966513.181422966512.914422966520.2334-24709423.42349-18986983.5884820574571.002420574570.40142057457763949-19040189.1034820499063.124420499062.664420499068.8604-4518450.27549-3278399.7114524693797.501424693798.639424693806.3584

2.10N:GPSNAVDATARINEXVERSION/TYPEteqc2002Mar14ACSOperations2004010101:06:55UTCPGM/RUNBY/DATEHP-UX10.20|PA-RISC|ccA.10.32.03|=+|=|COMMENT

ENDOFHEADER4031231235944.0-3.471504896879D-05-7.048583938740D-120.000000000000D+007.500000000000D+013.850000000000D+014.748054918403D-092.163259075372D+002.173706889153D-066.642933003604D-034.539266228676D-065.153756921768D+033.455840000000D+05-4.470348358154D-08-2.730536492548D+001.508742570877D-079.621750014223D-012.946562500000D+02-1.184847400736D-01-8.303203004591D-09-9.000374901741D-110.000000000000D+001.251000000000D+030.000000000000D+002.000000000000D+000.000000000000D+00-6.053596735001D-097.500000000000D+013.455400000000D+054.000000000000D+002、解释下列RINEX格式的广播星历文件(部分)各参数的含义?2.10NAVIGATIONDATAG(GPS)RINEXVERSION/TYPEDAT2RINW3.10001zfh07JUN0421:46:37PGM/RUNBY/DATE.1397D-07.0000D+00-.5960D-07.5960D-07IONALPHA.1106D+06-.3277D+05-.2621D+06.1966D+06IONBETA-.372529029846D-08-.106581410364D-135038081258DELTA-UTC:A0,A1,T,W13LEAPSECONDSENDOFHEADER404219800.0-.684768892825D-04-.875388650456D-11.000000000000D+00.150000000000D+03.134687500000D+02.431053669401D-08.181432727248D+01.849366188049D-06.670960044954D-02.112168490887D-04.515359131622D+04.374400000000D+06.409781932831D-07.267556044513D+01.707805156708D-07.961274443682D+00.164218750000D+03-.911275590286D-01-.776425198369D-08-.622883088438D-09.100000000000D+01.125800000000D+04.000000000000D+00.240000000000D+01.000000000000D+00-.605359673500D-08.150000000000D+03.369900000000D+06.400000000000D+01504219800.0.182860530913D-04.159161572810D-11.000000000000D+00.100000000000D+03-.412500000000D+01.488948938114D-08.157260791677D+01-.227242708206D-06.508379028179D-02.112615525723D-04.515356326103D+04.374400000000D+06-.912696123123D-07.485258581516D+00.670552253723D-07.936208765813D+00.148000000000D+03.817581727698D+00-.812212403335D-08.570023743777D-09.100000000000D+01.125800000000D+04.000000000000D+00.240000000000D+01.000000000000D+00-.419095158577D-08.100000000000D+03.370710000000D+06.400000000000D+013、解释下列RINEX格式的观测数据文件(部分)各参数的含义?

2.10OBSERVATIONDATAG(GPS)RINEXVERSION/TYPEDAT2RINW3.10001zfh07JUN0421:46:37PGM/RUNBY/DATEcehui2000csuOBSERVER/AGENCY7528TRIMBLE4000SSENav7.29Sig3.07REC#/TYPE/VERS1TRIMBLE4000SSEANT#/TYPE-----------------------------------------------------------COMMENTOffsetfromBOTTOMOFANTENNAtoPHASECENTERis0.0mmCOMMENT------------------------------------------------------

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论