您好,欢迎访问三七文档
课程编号:1300610课程性质:必修卫星导航定位算法与程序设计实习报告学院:测绘学院专业:测绘工程地点:武汉大学班级:0802班姓名:赵文学号:2008301610187教师:王甫红2012年2月27日至2012年3月2日1111、引言、引言、引言、引言GPS是美国从20世纪70年代开始研制的,于1994年全面建成,具有在海、陆、空进行全方位实时三维导航与定位能力的新一代卫星导航与定位系统。尤其是经过近几年的研究,GPS更在测绘、航空遥感和气象等方面有了新的应用,并以全天候、高精度、自动化、高效益等显著特点,赢得广大用户的信赖。随着对定位精度要求的不断提高,人们对GPS卫星星历的精度和实时性提出了越来越高的要求。卫星的星历,是描述有关卫星运动轨道的信息。利用GPS进行定位,就是根据已知的卫星轨道信息和用户的观测资料,通过数据处理来确定接收机的位置及其载体的航行速度。所以,精确的轨道信息是精密定位的基础。GPS的卫星星历按照精度可分为精密星历和广播星历。精密星历是由国际GPS服务中心(IGS)通过Internet发布,它的轨道精度可达到10cm左右,足以满足精密定位的需要。但是精密星历只能在卫星观测的11d后获得,无法为实时定位、导航、气象等实时性要求很强的应用提供有效的服务。广播星历是通过接收机接收卫星发射的含有轨道信息的导航电文,经过解码获得的卫星星历推算得到卫星位置,可以实现实时的导航和定位。2222、、、、RINEXRINEXRINEXRINEX文件读取文件读取文件读取文件读取编程用MATLAB2010为平台。我们一般使用的是RINEX观测文件和导航文件。观测文件记录测站伪距值,载波相位值、观测时间等参数,导航文件则主要记录与卫星位置有关的参数。导航文件结构较简单,先读取导航文件。其步骤为:①利用fgetl函数,一行行的读取并比较,直到找出文件头结束的一行”ENDOFHEADER”,因为文件头部分没有我们感兴趣的参数,所以不必读取。②建立结构体EPHDAT,以存储与卫星位置相关的参数。继续fgetl,读取参数,参数所占大小均有严格规定,因此可一一读取并记录。不过,我们一般读取前35个参数,省略最后三个空闲值。每个卫星均有8行参数,因此每8行均需重新记录。此循环直至文件末尾,此时fgetl赋值为-1,循环即可结束。接下来是观测文件读取,观测文件较复杂,需小心对待。其步骤为:①建立结构体HeadOdat和Obsdat,分别存储文件头和文件主体信息。文件头包含测站近似坐标和观测类型信息,这是必须要记录的两项.可利用fgetl函数,查找关键词”APPROXPOSITIONXYZ”和”#/TYPESOFOBSERV”,并记录相对应行的值。②继续fgetl,记录观测值。观测值类型随文件头定义。因此调出文件头观测类型信息,经比对而确定类型顺序,并记录。此时应注意类型个数,如果超过5个,每个历元观测值占据两行位置,应提前预留空间。以此继续,直至文件末尾。3333、、、、GPSGPSGPSGPS卫星轨道坐标计算数学模型卫星轨道坐标计算数学模型卫星轨道坐标计算数学模型卫星轨道坐标计算数学模型广播星历就是卫星GPS将含有轨道信息的导航电文发送给用户接收机,然后经过解码获得的卫星星历。GPS用户通过卫星广播星历,可以获得16个卫星星历参数,其中,1个参考时刻,6个相应参考时刻的开普勒轨道参数和9个摄动力影响的参数。这些参数的定义如下表所示:参数名称参数名称oet星历参数的参考历元n∆平均运行速度差sa轨道长半轴的方根Ω̇升交点赤经变化率se轨道偏心率i̇轨道倾角变化率0i参考时刻的轨道倾角,usucCC升交距角的调和改正项振幅0Ω参考时刻的升交点赤经,isicCC轨道倾角的调和改正项振幅sω近地点角距,rsrcCC卫星地心距的调和改正项振幅sM参考时刻的平近点角根据上述数据,便可外推出观测时刻t的轨道参数,从而计算卫星在不同参考系中的相应坐标。3.13.13.13.1用广播星历参数计算卫星位置用广播星历参数计算卫星位置用广播星历参数计算卫星位置用广播星历参数计算卫星位置在利用GPS信号进行导航定位时,为了解算用户在地心坐标系中的位置,GPS接收机需要测定测站到卫星的距离并且要知道同一卫星在同一时刻的地心坐标。卫星的地心坐标是从卫星的导航电文中提供的开普勒轨道参数和轨道摄动修正量按一定公式计算的。1)计算卫星运行的平均角速度n:卫星的平均角速度0n用下式计算:320/nGMa=(1)式中,GM=398600.532()/kms是WGS-84坐标系中地球引力常数。利用导航电文中给出的摄动改正数n∆,用下式求卫星运行的平均角速度n:0nnn=+∆(2)2)对观测时刻't做卫星钟差改正:'ttt=−∆201020()()eetaattatt∆=+−+−(3)在计算卫星钟差t∆改正时,t可近似取't。3)观测时刻的平近点角sM的计算:00()seMMntt=+−(4)4)计算偏近点角sE:sinssssEMeE=+(5)(5)式可用迭代法进行计算,即先令ssEM=代入上式,求出sE再代入上式计算,由于偏心率e很小(只有0.01),因此收敛很快,只需迭代两次便可求出偏近点角。5)真近点角的计算∴()2arctan(1sin)/ssssfeEEeω=−−(6)6)计算升交角距0u及轨道摄动改正项:升交角距:00sufω=+摄动改正项:000000sin2cos2sin2cos2sin2cos2uusucrrsrciisiccucucucucucuδδδ=+=+=+(7)7)计算经过摄动改正的升交角距u、卫星到地心距离r、轨道倾角i000(1cos)()usssrieuuraeEiiittδδδ=+=−+=++−(8)8)计算卫星轨道平面坐标系中的坐标:卫星在轨道平面坐标系中的坐标为`sincos00urYurX==(9)9)计算观测时刻升交点经度:oeeoeetWttW−−−Ω+Ω=))((0λ(10)其中We指地球自转速率,eW=7.29211567×510/rads−。10)计算卫星在地心坐标系中空间直角坐标:000cossincossinsinsincoscoscossin0sincosXXiiYiiYZiiZλλλλλλ−⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥=−⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦(11)4444、、、、GPSGPSGPSGPS单点定位数学模型单点定位数学模型单点定位数学模型单点定位数学模型由于接收机测量的是伪距,在观测值中存在着接收机钟差,加之测量点的三维坐标为待求值,一共有4个未知数。要求解出这4个未知数,必须有4个方程式。为此,要实现单点绝对定位必须同时观测4颗卫星,才能组成定位的基本方程。设ρ为伪距观测量,R为接收机到卫星的真距离,τ为接收机钟差,则观测方程为Rcρτ=+×222()()()spspspXXYYZZcτ=−+−+−+×(12)式中,假定伪距观测量ρ已经过星历中的对流层和电离层改正;(,,)sssXYZ为卫星的瞬时地心坐标,可由卫星星历电文中求出;(,,)pppXYZ为接收机的地心坐标,是待求量。为了求解方便和数据处理的需要,将式(12)进行微分,作线性化处理,并将接收机的概略坐标000(,,)pppXYZ作为初始值代入,得到s0s0s0000XZd=ddYdZdpppXYYZXtRRRρ−−−+++(13)式中,ddtcτ=为接收机钟差对应的空间距离,2220000()()()spspspRXXYYZZ=−+−+−从式(13)中看出,三个坐标分量的系数是接收机到卫星的单位矢径分别向三个坐标轴投影的方向余弦。采用符号spXXlR−=spYYmR−=spZZnR−=(14)规定上标为卫星号,下标i为测站号,则组成伪距定位的基本方程1111221131134114ddX1ddY1dZ1d1ddiiiiiiiiiiiiiiiiiiilmnlmnlmnlmntρρρρ⎡⎤⎡⎤−⎡⎤⎢⎥⎢⎥⎢⎥−⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥−⎢⎥⎢⎥⎢⎥−⎢⎥⎣⎦⎣⎦⎣⎦(15)采用矩阵表示1234ddddTiiiiilρρρρ⎡⎤=⎣⎦观测量1112113114111111iiiiiiiiiiiiilmnlmnAlmnlmn−⎡⎤⎢⎥−⎢⎥=⎢⎥−⎢⎥−⎣⎦状态矩阵[]dXdYdZdTiiiiXt=未知数则式(15)变为0iiiAXl−=(16)对式(16)求解,便得到接收机地心坐标的唯一解1()TTiXAAAl−=(17)5555、计算实例及误差分析、计算实例及误差分析、计算实例及误差分析、计算实例及误差分析本程序以2011年9月28日WLXY点的RINEX格式广播星历WLXY2710.11n和观测数据WLXY2710.11o为例,取了全部连续观测历元,在不同历元求出坐标值,最后求出坐标平差值。平差值与参考值各个分量差值如下表。X(m)Y(m)Z(m)参考值-2267521.4235008960.4233221750.266平差值-2267515.1945008977.6563221746.555差值6.22917.2333.711从表中可以看出,平差值与参考值相差均达到了10m左右,这对精度要求较高的测量无疑是力不从心的,但可以应用于导航等精度要求较低的领域。加之其数据处理简单,观测值易于获取,因此广泛应用与车辆与船舶导航方面。将平差值各个分量与有解历元各个分量想减,得到其差值,并绘制出所有差值分布图,其图如下。从图中可以看出,大部分的历元结果是接近于平差值的,但有一小部分误差达到了几百米。究其原因,这是与当时观测条件发生突变,从而导致的粗差,在进一步处理中可以将之略去,以期达到精度提高的目的。6666、实习总结、实习总结、实习总结、实习总结GPS技术是最近几十年异军突起的一项新科技。相对于传统测量,其优势不言而喻。伪距单点定位虽说精度很低,但对车辆导航来说已经足以。掌握其原理并编程实现之,是测绘人士应该有的技能。针对这次实习,我首先潜心钻研了单点定位的相关原理和RINEX文件结构。单点定位是利用三颗卫星与测站之间的距离,以空间交会为原理来确定测站坐标。卫星位置可通过RINEX文件提供的卫星轨道信息内推,距离则由接收机获取。但在数据处理中,我们将接收机钟差也当做未知量处理,加上X、Y、Z坐标,就有四个未知量。因此我们要观测四颗以上卫星,从而建立方程解算未知量。如今接收机通道技术已经可以提供至少8颗卫星的观测,在一般条件下,达到四颗卫星以上的跟踪,那是轻而易举的。接下来就是具体编程,平台选用了MATLAB。我看中了它简洁化的语言,强大的矩阵支持能力。依照进度安排,我首先面对的是RINEX文件读取。以往编程,我们只需抄抄公式,做做界面就行。这是我第一次面对文件读取,因而有些手足无措。我当初设想将信息存入矩阵中,导航文件为n行35列(n代表卫星个数),观测文件则根据观测类型和历元值开辟空间。通过查阅资料,我知道了fgetl、fid等读取文件的命令,再结合具体文件结构,将各类信息依次存入矩阵中。计算卫星位置也是一大难点,主要是发射时刻的确定。由于GPS采用电磁波测距,其速度高达30万km/s,因而时间要求极其苛刻,才能达到m级的精度。但是在发射时刻确定方面,我显然遭遇了失败。GPS卫星高度20200km左右,折算成时间只需0.06-0.07秒,但计算结果为0.09s左右,与之相差甚大!我反复观察公式,没有揪出错误根源,因而放弃了编程,转头查阅资料,后来和另一个程序比较,我才知道是我没有对卫星位置做地球自转改正,因而才有这一失败。结合找来的程序,我发现了自己程序的种种问题:逻辑混乱、滥用循环、随意命名……因此我舍去了自己的“半成品”,仔细阅读别人的高作。当然找来的这个程序也有大大小小的毛病。对RINEX文件宽度定义为81列,这显然是不对的。没有对流层和电离层改正,没有对未知量循环求解,因此我一一改正。对流层改正需要卫星高度角,我就写了个小程序,利用书上的公式计算并返回到主函数中。电离层则比较简单,如果有双频观测值,只需双频间求差;如果没
本文标题:GPS单点定位
链接地址:https://www.777doc.com/doc-5872714 .html