《測(cè)繪程序設(shè)計(jì)》課件12 來(lái)自07測(cè)繪3 魏志剛_第1頁(yè)
《測(cè)繪程序設(shè)計(jì)》課件12 來(lái)自07測(cè)繪3 魏志剛_第2頁(yè)
《測(cè)繪程序設(shè)計(jì)》課件12 來(lái)自07測(cè)繪3 魏志剛_第3頁(yè)
《測(cè)繪程序設(shè)計(jì)》課件12 來(lái)自07測(cè)繪3 魏志剛_第4頁(yè)
《測(cè)繪程序設(shè)計(jì)》課件12 來(lái)自07測(cè)繪3 魏志剛_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

測(cè)繪程序設(shè)計(jì)第六章GPS程序設(shè)計(jì)§6-3數(shù)據(jù)格式轉(zhuǎn)換

為了使編寫的程序通用化,一般首先都是將所使用的GPS接收機(jī)數(shù)據(jù)格式轉(zhuǎn)換為RINEX通用格式,然后利用RINEX格式編制所需要的軟件。這樣,一個(gè)軟件可以處理多種GPS接收機(jī)的數(shù)據(jù)。為此,需將原始觀測(cè)量轉(zhuǎn)換為RINEX通用格式。下面以ASHTECH為例給出了數(shù)據(jù)格式轉(zhuǎn)換的源程序torinex.C。torinex.c數(shù)據(jù)格式轉(zhuǎn)換程序#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/*觀測(cè)記錄*/{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衛(wèi)星位置計(jì)算程序設(shè)計(jì)

為了計(jì)算衛(wèi)星在WGS-84大地坐標(biāo)系中的位置,首先需要計(jì)算衛(wèi)星在其軌道平面內(nèi)的位置。此時(shí)定義:原點(diǎn)與地心M相重合,x軸指向升交點(diǎn),y軸在軌道平面內(nèi)垂直于x軸,我們稱其為軌道平面直角坐標(biāo)系,在衛(wèi)星坐標(biāo)計(jì)算中,它是一種過(guò)渡性的坐標(biāo)系。下面我們討論觀測(cè)瞬間GPS衛(wèi)星在地面坐標(biāo)系中坐標(biāo)的計(jì)算方法:

1.計(jì)算衛(wèi)星運(yùn)行的平均角速度na為衛(wèi)星軌道的長(zhǎng)半軸,GM為地球引力常數(shù)(含大氣層),其值為398600.5×1014m3/s2它們都有確定值。利用導(dǎo)航電文中給出的攝動(dòng)改正數(shù)Δn,則可算出衛(wèi)星運(yùn)行的實(shí)際平均角速度:

n=n0+Δn

2.計(jì)算歸化時(shí)間tk

tk=t-t0e

3.計(jì)算觀測(cè)瞬間的衛(wèi)星平近點(diǎn)角從Mk

Mk=M0+ntk

4.計(jì)算偏近點(diǎn)角Ek

Ek

=Mk+esinEk

(Ek,Mk以弧度計(jì))Ek

=Mk+esinEk

(Ek,Mk以弧度計(jì))迭代法Ek

=Mk+esinEk

(Ek,Mk以弧度計(jì))微分迭代法:取近似值:計(jì)算相應(yīng)的偏近點(diǎn)角改正數(shù):重復(fù)上面的運(yùn)算,直到dM可以忽略為止。

5.計(jì)算真近點(diǎn)角Vk

6.計(jì)算升交距角Φk

Φk=Vk+ωω為衛(wèi)星電文給出的近地點(diǎn)角距。7.?dāng)z動(dòng)改正項(xiàng)的計(jì)算8.計(jì)算經(jīng)過(guò)攝動(dòng)改正的升交距角μk、衛(wèi)星的矢徑rk和軌道傾角ikμk

=Φk

+δμ

rk

=a(1-cosEk)+δrik

=i0+δi

+itk

9.計(jì)算衛(wèi)星在軌道平面直角坐標(biāo)系的坐標(biāo)

xk=rk

cosμk

yk=rk

sinμk

10.觀測(cè)時(shí)刻升交點(diǎn)經(jīng)度的計(jì)算

=7.29211567×10-5rad/s,、、toe可從衛(wèi)星電文中獲取。

11.計(jì)算衛(wèi)星在地心固定坐標(biāo)系中的直角坐標(biāo)

12.衛(wèi)星在協(xié)議地球坐標(biāo)系中坐標(biāo)的計(jì)算

程序如下:§6-4GPS單點(diǎn)絕對(duì)定位程序設(shè)計(jì)

GPS絕對(duì)定位也叫單點(diǎn)定位,它是利用一臺(tái)接收機(jī)觀測(cè)衛(wèi)星獨(dú)立地確定出自身在WGS-84地心坐標(biāo)系的絕對(duì)位置。這一位置在WGS-84坐標(biāo)系中是唯一的,所以稱為絕對(duì)定位。因?yàn)槔靡慌_(tái)接收機(jī)能完成定位工作,又稱為單點(diǎn)定位。GPS絕對(duì)定位的實(shí)質(zhì)是基于測(cè)量學(xué)中的空間距離后方交會(huì)。

基本思想:在GPS觀測(cè)中,得到衛(wèi)星的位置和衛(wèi)星到測(cè)點(diǎn)的距離(偽距),然后就以衛(wèi)星為球心、以距離為半徑做球面。如果同時(shí)觀測(cè)了3顆衛(wèi)星,我們便得到3個(gè)球面,即可組成包括3個(gè)未知數(shù)(X,Y,Z)的3個(gè)方程式。這3個(gè)球面相交的一點(diǎn),就是要求的測(cè)點(diǎn)的位置。也就是說(shuō),對(duì)這3個(gè)方程式求解,便得到該點(diǎn)的坐標(biāo)。由于GPS衛(wèi)星在天空獨(dú)立地運(yùn)行,每顆衛(wèi)星的GPS時(shí)間經(jīng)過(guò)改正后形成為統(tǒng)一的UTC時(shí)間。用戶接收機(jī)觀測(cè)得到的衛(wèi)星時(shí)間和接收機(jī)的本地時(shí)間是不同的,這就是說(shuō),衛(wèi)星鐘和接收機(jī)鐘無(wú)法保持同步。所以,接收機(jī)實(shí)際觀測(cè)的測(cè)點(diǎn)到衛(wèi)星之間的距離,不是實(shí)際的距離,而包含有衛(wèi)星鐘和接收機(jī)鐘之間的鐘差所引入的誤差,稱之為偽距。接收機(jī)測(cè)量的是偽距.其中包括3個(gè)坐標(biāo)分量未知數(shù)和1個(gè)鐘差未知數(shù)。為了實(shí)時(shí)求解這4個(gè)未知數(shù),以實(shí)現(xiàn)絕對(duì)定位,必須至少同時(shí)觀測(cè)和得到4顆衛(wèi)星的偽距觀測(cè)值。這就是說(shuō),它的每一次定位代表了該測(cè)點(diǎn)在該時(shí)刻的位置,與其他測(cè)點(diǎn)和其他時(shí)刻無(wú)關(guān)。

1.同時(shí)觀測(cè)4顆衛(wèi)星的絕對(duì)定位基本方程由于接收機(jī)測(cè)量的是偽距,在觀測(cè)值中存在著接收機(jī)鐘差,加之測(cè)量點(diǎn)的三維坐標(biāo)為待求值,一共有4個(gè)未知數(shù)。要求解出這4個(gè)未知數(shù),必須有4個(gè)方程式。為此,要實(shí)現(xiàn)單點(diǎn)絕對(duì)定位必須同時(shí)觀測(cè)4個(gè)衛(wèi)星(圖),組成定位的基本方程。設(shè)ρ為偽距觀測(cè)量,R為接收機(jī)到衛(wèi)星的真距離,τ為接收機(jī)鐘差,則觀測(cè)方程為

式中,假定偽距觀測(cè)量ρ已經(jīng)過(guò)星歷中的對(duì)流層和電離層改正;

為衛(wèi)星的瞬時(shí)地心坐標(biāo),可由衛(wèi)星星歷電文中求出;

為接收機(jī)的地心坐標(biāo),是待求量。代入待測(cè)點(diǎn)的初始值,進(jìn)行線性化:三個(gè)坐標(biāo)分量的系數(shù)是接收機(jī)到衛(wèi)星的單位矢徑分別向三個(gè)坐標(biāo)軸投影的方向余弦。lmn規(guī)定上標(biāo)為衛(wèi)星號(hào),下標(biāo)i為測(cè)站號(hào),則組成偽距定位的基本方程采用矩陣表示在計(jì)算過(guò)程中,下列幾個(gè)問(wèn)題必須注意:(1)衛(wèi)星之間的鐘差是利用導(dǎo)航電文中給出的鐘差改正數(shù)統(tǒng)一到UTC時(shí)間。這里考慮的鐘差是指衛(wèi)星與接收機(jī)之間的鐘差。(2)在計(jì)算中采用了接收機(jī)的概略坐標(biāo),第一次計(jì)算出的結(jié)果是不精確的。因此,必須反復(fù)迭代計(jì)算,直到滿足規(guī)定的限差為止。(3)在一般導(dǎo)航型接收機(jī)中,都是采用這一數(shù)學(xué)模型計(jì)算位置的?,F(xiàn)有的接收機(jī)都能同時(shí)跟蹤四個(gè)以上的衛(wèi)星,但在計(jì)算中仍然利用四個(gè)衛(wèi)星,不過(guò)是經(jīng)過(guò)挑選的四個(gè)衛(wèi)星。為此,按衛(wèi)星的星座分布分成若干組,計(jì)算其PDOP,最后選擇和利用一組其PDOP為最小的衛(wèi)星作為計(jì)算數(shù)據(jù),以得到最高的定位精度。

2.同時(shí)觀測(cè)4顆以上衛(wèi)星在測(cè)地型接收機(jī)和高質(zhì)量的導(dǎo)航型接收機(jī)中,都具有8個(gè)以上的通道,能同時(shí)跟蹤7顆以上的衛(wèi)星。為了提高定位精度,在計(jì)算位置過(guò)程中,利用了所有的衛(wèi)星觀測(cè)值。在這樣情況下,出現(xiàn)了多余觀測(cè),觀測(cè)值的個(gè)數(shù)超過(guò)了未知數(shù)的個(gè)數(shù),使得上式的右端不等于零,于是其精度為式中,

為殘差向量。根據(jù)最小二乘法的原理,最后得到接收機(jī)的位置解為式中,m0為偽距測(cè)量中誤差,Qx為權(quán)系數(shù)陣。這種多余觀測(cè)的優(yōu)點(diǎn)在于消除了衛(wèi)星定位的系統(tǒng)誤差。僅用4顆衛(wèi)星的差分定位中,當(dāng)中間更換衛(wèi)星時(shí),位置會(huì)出現(xiàn)較大的偏移,等過(guò)了數(shù)秒后又逐漸回到原位。定位精度越高,這一現(xiàn)象越明顯。當(dāng)應(yīng)用4顆以上的衛(wèi)星定位時(shí),這一現(xiàn)象就不存在了。程序如下:abs_pos.c——單點(diǎn)絕對(duì)定位程序#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靜態(tài)相對(duì)定位程序設(shè)計(jì)簡(jiǎn)介在GPS相對(duì)定位中,至少要應(yīng)用兩臺(tái)精密測(cè)地型GPS接收機(jī)。兩臺(tái)GPS接收機(jī)分別安置在基線的兩端點(diǎn),同步觀測(cè)同一組GPS衛(wèi)星,以求解出基線端點(diǎn)的相對(duì)位置或基線向量。當(dāng)然,這一方法也可以推廣到多臺(tái)接收機(jī)

相對(duì)定位基本方程假定在一個(gè)站上安置GPS接收機(jī)進(jìn)行觀測(cè),記錄下的不是偽距觀測(cè)值,而是相位觀測(cè)值。設(shè)Φ為相位觀測(cè)量,R為接收機(jī)到衛(wèi)星的真距離,τ為接收機(jī)鐘差,σ為對(duì)流層和電離層的延遲,則觀測(cè)方程為在GPS相對(duì)定位中,至少要應(yīng)用兩臺(tái)精密測(cè)地型GPS接收機(jī)。兩臺(tái)GPS接收機(jī)分別安置在基線的兩端點(diǎn),同步觀測(cè)同一組GPS衛(wèi)星,以求解出基線端點(diǎn)的相對(duì)位置或基線向量。當(dāng)然,這一方法也可以推廣到多臺(tái)接收機(jī)同時(shí)在多個(gè)點(diǎn)上進(jìn)行觀測(cè),以求解多條基線向量。由此看出,GPS相對(duì)定位不是直接求解絕對(duì)位置,而是求解兩點(diǎn)之間的相對(duì)基線向量。式中,Φ為相位小數(shù),N為相位整周數(shù),又稱為相位模糊度;σ為信號(hào)通過(guò)對(duì)流層和電離層的延遲改正;(Xs,Ys,Zs)為衛(wèi)星的瞬時(shí)地心坐標(biāo),可由衛(wèi)星星歷電文中求出;(Xp,Yp,Zp)為接收機(jī)的地心坐標(biāo),是未知量。2.單差觀測(cè)方程假定在T1、T2兩個(gè)測(cè)站上分別安置GPS接收機(jī)進(jìn)行同時(shí)觀測(cè),記錄相位觀測(cè)量,則得到基本觀測(cè)方程為如果觀測(cè)了4顆衛(wèi)星,方程式中的未知數(shù)除了3個(gè)位置參數(shù)外,還有2個(gè)接收機(jī)鐘差,8個(gè)相位整周數(shù)和8個(gè)信號(hào)通過(guò)對(duì)流層和電離層的延遲改正數(shù)。假定兩個(gè)測(cè)站相距很近,例如小于10km,對(duì)于遠(yuǎn)在20000km外的衛(wèi)星而言,衛(wèi)星信號(hào)到達(dá)兩測(cè)站所通過(guò)的路徑基本相同。這就是說(shuō),同一衛(wèi)星信號(hào)到達(dá)兩接收機(jī)的電離層和對(duì)流層延遲是相同的

。在GPS相對(duì)測(cè)量中,將兩個(gè)測(cè)站同一時(shí)刻的觀測(cè)量相減,就可以消除掉電離層和對(duì)流層延遲帶來(lái)的誤差,同時(shí)還可以消除掉衛(wèi)星鐘差和軌道誤差,于是得到單差(SD)觀測(cè)方程。單差觀測(cè)為兩接收機(jī)t時(shí)刻觀測(cè)同一顆衛(wèi)星的相位整周期的差值。為兩接收機(jī)t時(shí)刻觀測(cè)同一顆衛(wèi)星的相位小數(shù)的差值。為兩接收機(jī)t時(shí)刻觀測(cè)同一顆衛(wèi)星的距離差值。為兩個(gè)接收機(jī)的絕對(duì)鐘差,與觀測(cè)衛(wèi)星和觀測(cè)時(shí)間無(wú)關(guān)。三個(gè)坐標(biāo)分量,還有j個(gè)相位整周數(shù)N以及2個(gè)接收機(jī)鐘差。

3、雙差觀測(cè)方程將同一時(shí)刻觀測(cè)的兩顆衛(wèi)星的單差方程求差,得到雙差觀測(cè)方程::為兩歷元間兩測(cè)站得到的相位整周數(shù)差之差。:為兩歷元間兩側(cè)站得到的相位小數(shù)差之差:為兩歷元間兩側(cè)站到衛(wèi)星的距離差之差。未知數(shù)3個(gè)坐標(biāo)分量,J個(gè)相位整周數(shù)N。(1)如果已知T1,T2兩個(gè)測(cè)站的概略坐標(biāo),可以求解3個(gè)坐標(biāo)分量,J個(gè)相位整周數(shù)N?!?dòng)雙差法。此法求解的相位整周數(shù)不是整數(shù),而是實(shí)數(shù),將此實(shí)數(shù)湊整,求解出的相位整周數(shù)固定為整數(shù)。然后帶入雙差觀測(cè)方程中求解,——固定雙差法。(2)如果不知道T1,T2兩個(gè)測(cè)站的概略坐標(biāo),可進(jìn)行三差計(jì)算。

4、三差計(jì)算雙差觀測(cè)方程中,只剩下基線向量和相位整周數(shù)差值部分,在接收機(jī)不失鎖的情況下,相位整周數(shù)為固定值,因此對(duì)相鄰雙差觀測(cè)方程再取差,便得到三差觀測(cè)方程:其中:三個(gè)坐標(biāo)分量未知理論上只需要三個(gè)觀測(cè)方程求解,實(shí)際上存在多余觀測(cè),可以組成誤差方程,然后組成法方程求解,但是由于經(jīng)過(guò)三次差分處理,精度不高,一般不采用GPS相對(duì)定位處理過(guò)程是以求解單條基線向量為出發(fā)點(diǎn),因此與絕對(duì)定位不同,總是以兩個(gè)測(cè)站的觀測(cè)數(shù)據(jù)為基礎(chǔ),總是采用雙差分觀測(cè)方程,以測(cè)站間的基線向量坐標(biāo)B()為未知數(shù),建立誤差方程和法方程式進(jìn)行求解。Pdop:位置精度強(qiáng)弱度(0.5--99.9);為緯度、經(jīng)度和高程等誤差平方和的開(kāi)根號(hào)值,所以Pdop的平方=Hdop

的平方+Vdop

的平方。具體含義:歸因于衛(wèi)星的幾何分布,天空中衛(wèi)星分布程度越好,定位精度越高(數(shù)值越小精度越高)。

PDOP位置精度因子(PositionDilutionofPrecision)

有利于用戶所在位置的誤差和衛(wèi)星所在位置誤差之間關(guān)系的無(wú)單位圖形。在幾何上,PDOP按由接收機(jī)和所能觀測(cè)到的四顆衛(wèi)星的連線所組成的錐狀物的體積比例來(lái)平分1。對(duì)于好的定位而言,PDOP值小,例如3。比7大的值被認(rèn)為是較差。因此,小的PDOP值與相隔較遠(yuǎn)的衛(wèi)星相關(guān)。

PDOP是星座精度的最佳指示器,雖然PDOP不單獨(dú)確定好的基線。小于等于4的PDOP產(chǎn)生最佳位置。5到7之間的PDOP可接受,大于等于7的PDOP較差。也能在接收機(jī)上設(shè)置PDOP截止值略去PDOP高于指定的限制值的星座。在Trimble測(cè)量接收機(jī)中默認(rèn)的PDOP截止值為7。注意該截止值僅僅影響定位,對(duì)隨后的基線處理沒(méi)有大的影響。快速計(jì)劃程序可計(jì)算區(qū)域觀測(cè)期間的PDOP。通過(guò)輸入位置和重要數(shù)據(jù),預(yù)報(bào)可見(jiàn)的衛(wèi)星和幾何位置。實(shí)驗(yàn)五:GPS程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康呐c要求

⒈初步掌握GPS測(cè)量數(shù)據(jù)文件的數(shù)據(jù)格式;⒉初步了解GPS測(cè)量常用軟件設(shè)計(jì)方法、過(guò)程、程序代碼編寫方法及程序調(diào)試過(guò)程。二、實(shí)驗(yàn)安排

⒈本實(shí)驗(yàn)需要4學(xué)時(shí)。⒉實(shí)驗(yàn)每個(gè)小組1人,用C語(yǔ)言在計(jì)算機(jī)上完成程序代碼的編寫,并調(diào)試通過(guò),然后用實(shí)際算例印證程序的正確性。2.時(shí)間安排:測(cè)繪B05-1:第八周周三3-4、9-10;三、實(shí)驗(yàn)步驟及要點(diǎn)⒈課余時(shí)間完成預(yù)先布置的衛(wèi)星位置或偽距定位計(jì)算等數(shù)據(jù)處理問(wèn)題,完成程序代碼的紙上編寫和設(shè)計(jì)工作;⒉在計(jì)算機(jī)上寫入程序代碼,進(jìn)行調(diào)試;

⒊用預(yù)先準(zhǔn)備好的算例進(jìn)行印證,要求每人至少準(zhǔn)備2組典型算例,并打印測(cè)試結(jié)果,附在實(shí)驗(yàn)報(bào)告中。四、要求

1.代碼編寫要獨(dú)立完成,算法可以小組為單位進(jìn)行研討。

2.每次完成實(shí)驗(yàn)后應(yīng)該撰寫實(shí)驗(yàn)報(bào)告。作業(yè):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格式的廣播星歷文件(部分)各參數(shù)的含義?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格式的觀測(cè)數(shù)據(jù)文件(部分)各參數(shù)的含義?

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論