GPS单点定位实验报告.docx
《GPS单点定位实验报告.docx》由会员分享,可在线阅读,更多相关《GPS单点定位实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
GPS单点定位实验报告
GPS原理与应用实验
题目:
GPS单点定位
专业:
测绘工程
班级:
12-01
学号:
2012212600
姓名:
王威
指导教师:
陶庭叶
时间:
2014.11
1、实验目的......................................................3
2、实验原理………..........................................3
3、实验内容……..............................................3
4、实验效果图..................................................9
5、实验总结......................................................9
一.实验目的
1.深入了解单点定位的计算过程;
2.加强单点定位基本公式和误差方程式,法线方程式的记忆;
3.通过上机调试程序加强动手能力的培养。
二.实验原理
一个接收机接受三个火三个以上卫星信号,得出卫星坐标和伪距,利用间接平差计算接收机的坐标。
三.实验内容
列出伪距观测方程
伪距方程线性化
得出各个坐标的l,m,n
组成误差方程组AiX+Li=Vi
间接平差得出新的接收机坐标X,Y,Z
输入原始数据
循环多次
精度评定
打印输出
1.程序流程图
2、实验数据
3、实验程序代码
PrivateSubCommand1_Click()
CommonDialog1.Filter="TXTfiles|*.txt|"
CommonDialog1.FilterIndex=1
CommonDialog1.ShowOpen
OpenMe.CommonDialog1.FileNameForInputAs#1
DoWhileNotEOF
(1)
LineInput#1,Text
textbuff=textbuff+Text+vbCrLf
Loop
Close#1
kk=MSFlexGrid1.Rows-1
Dima
ReDima(kk-1)
a=Split(textbuff,vbCrLf)
Forj=1Tokk
Fori=1To5
MSFlexGrid1.TextMatrix(j,i)=a(j-1+5*(i-1))
Nexti
Nextj
Fork=1Tokk
MSFlexGrid1.TextMatrix(k,0)="第"&k&"个点"
Nextk
MSFlexGrid1.TextMatrix(0,1)="X"
MSFlexGrid1.TextMatrix(0,2)="Y"
MSFlexGrid1.TextMatrix(0,3)="Z"
MSFlexGrid1.TextMatrix(0,4)="伪距"
MSFlexGrid1.TextMatrix(0,5)="钟差"
EndSub
PrivateSubCommand2_Click()
kk=MSFlexGrid1.Rows-1
X0=0:
Y0=0:
Z0=0
c=299792458
Dima()
ReDima(kk-1,3)
Dimll()
ReDimll(kk-1,0)
Forii=1To100
Fori=1Tokk
l=(MSFlexGrid1.TextMatrix(i,1)-X0)/Sqr((MSFlexGrid1.TextMatrix(i,1)-X0)^2+(MSFlexGrid1.TextMatrix(i,2)-Y0)^2+(MSFlexGrid1.TextMatrix(i,3)-Z0)^2)
m=(MSFlexGrid1.TextMatrix(i,2)-Y0)/Sqr((MSFlexGrid1.TextMatrix(i,1)-X0)^2+(MSFlexGrid1.TextMatrix(i,2)-Y0)^2+(MSFlexGrid1.TextMatrix(i,3)-Z0)^2)
n=(MSFlexGrid1.TextMatrix(i,3)-Z0)/Sqr((MSFlexGrid1.TextMatrix(i,1)-X0)^2+(MSFlexGrid1.TextMatrix(i,2)-Y0)^2+(MSFlexGrid1.TextMatrix(i,3)-Z0)^2)
a(i-1,0)=l
a(i-1,1)=m
a(i-1,2)=n
a(i-1,3)=-1
lk=MSFlexGrid1.TextMatrix(i,4)-Sqr((MSFlexGrid1.TextMatrix(i,1)-X0)^2+(MSFlexGrid1.TextMatrix(i,2)-Y0)^2+(MSFlexGrid1.TextMatrix(i,3)-Z0)^2)+c*MSFlexGrid1.TextMatrix(i,5)
ll(i-1,0)=lk
Nexti
gzs=xc(qiuni(xc(zz(a),a)),xc(zz(a),ll))
X0=X0-gzs(0,0)
Y0=Y0-gzs(1,0)
Z0=Z0-gzs(2,0)
j=j+1
Nextii
Text2.Text="X="&X0&vbCrLf&vbCrLf&"Y="&Y0&vbCrLf&vbCrLf&"Z="&Z0
V=jian(ll,xc(a,gzs))
zjl=xc(zz(V),V)
σ0=Sqr(zjl(0,0))/(kk-3)
Qx=qiuni(xc(zz(a),a))
Text3.Text="σX="&σ0*Sqr(Qx(0,0))&vbCrLf&vbCrLf&"σY="&σ0*Sqr(Qx(1,1))&vbCrLf&vbCrLf&"σZ="&σ0*Sqr(Qx(2,2))
EndSub
PrivateSubForm_Load()
MSFlexGrid1.ColWidth
(1)=1300
MSFlexGrid1.ColWidth
(2)=1300
MSFlexGrid1.ColWidth(3)=1300
MSFlexGrid1.ColWidth(4)=1300
Text2.Text=""
Text3.Text=""
EndSub
'矩阵相减
PublicFunctionjian(m,n)
Dimi,jAsInteger
IfUBound(m,1)<>UBound(n,1)OrUBound(m,2)<>UBound(n,2)Then
MsgBox("请确认输入数组是否可以相减!
")
Else
Dimc()
ReDimc(UBound(m,1),UBound(n,2))
Fori=0ToUBound(c,1)
Forj=0ToUBound(c,2)
c(i,j)=m(i,j)-n(i,j)
Nextj
Nexti
jian=c
EndIf
EndFunction
'矩阵的转置
PublicFunctionzz(a)
DimiAsInteger,jAsInteger,tAsInteger,b()
IfUBound(a,1)=UBound(a,2)Then
Fori=0ToUBound(a,1)
Forj=0ToUBound(a,2)
Ifit=a(i,j)
a(i,j)=a(j,i)
a(j,i)=t
EndIf
Nextj
Nexti
zz=a
Else
ReDimb(UBound(a,2),UBound(a,1))
Fori=0ToUBound(a,2)
Forj=0ToUBound(a,1)
b(i,j)=a(j,i)
Nextj
Nexti
zz=b
EndIf
EndFunction
'两矩阵相乘
PublicFunctionxc(a,b)
DimiAsInteger,jAsInteger,kAsInteger
IfUBound(a,2)<>UBound(b,1)Then
MsgBox("这两个矩阵不能够相乘")
ExitFunction
EndIf
ReDimsd(UBound(a,1),UBound(b,2))
Fori=0ToUBound(a,1)
Forj=0ToUBound(b,2)
Fork=0ToUBound(b,1)
sd(i,j)=sd(i,j)+a(i,k)*b(k,j)
Nextk
Nextj
Nexti
xc=sd
EndFunction
PublicFunctionqiuni(a)
Dimc,m%,n%,p#,l%,i%,j%,ab#
m=UBound(a,1)
n=UBound(a,2)
Ifm<>nThen
MsgBox("该矩阵不可逆!
!
!
")
ExitFunction
EndIf
ReDimc(m,2*n+1)
Fori=0Tom
Forj=0Ton
c(i,j)=a(i,j)
Nextj
Nexti
Fori=0Tom
Forj=m+1To2*m+1
c(i,j)=0
Nextj
Nexti
i=0
Forj=m+1To2*m+1
c(i,j)=1
i=i+1
Nextj
Fork=0Ton
Ifc(k,k)=0Then
Fori=k+1Ton
Ifc(i,k)<>0Then
GoTothis
EndIf
Nexti
Ifi=n+1Then
MsgBox("该矩阵不可逆!
!
!
")
ExitFunction
EndIf
this:
Forj=0To2*m+1
p=c(k,j)
c(k,j)=c(i,j)
c(i,j)=p
Nextj
EndIf
ab=1#/c(k,k)
Forj=0To2*m+1
c(k,j)=c(k,j)*ab
Nextj
Fori=0Ton
Ifi<>kThen
Forj=0To2*m+1
Ifj<>kThen
c(i,j)=c(i,j)-c(i,k)*c(k,j)
EndIf
Nextj
c(i,k)=0
EndIf
Nexti
Nextk
Fori=0Tom
Forj=0Tom
a(i,j)=c(i,j+n+1)
a(i,j)=Round(a(i,j),4)
Nextj
Nexti
qiuni=a
EndFunction
四.实验结果图
五.实验总结
此次实验让我深入了解单点定位的计算过程,加强了对单点定位基本公式和误差方程式,法线方程式的记忆。
并通过上机调试程序加强了自己动手能力的培养。
通过此次实验为以后的GPS的学习打下了基础。
欢迎下载,谢谢观看!
资料仅供参考学习