GPS单点定位实验报告Word文件下载.docx
《GPS单点定位实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《GPS单点定位实验报告Word文件下载.docx(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()
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
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&
Y="
Y0&
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))&
σY="
σ0*Sqr(Qx(1,1))&
σZ="
σ0*Sqr(Qx(2,2))
PrivateSubForm_Load()
MSFlexGrid1.ColWidth
(1)=1300
MSFlexGrid1.ColWidth
(2)=1300
MSFlexGrid1.ColWidth(3)=1300
MSFlexGrid1.ColWidth(4)=1300
"
'
矩阵相减
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)
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)
Ifi<
jThen
t=a(i,j)
a(i,j)=a(j,i)
a(j,i)=t
zz=a
ReDimb(UBound(a,2),UBound(a,1))
Fori=0ToUBound(a,2)
Forj=0ToUBound(a,1)
b(i,j)=a(j,i)
zz=b
两矩阵相乘
PublicFunctionxc(a,b)
DimiAsInteger,jAsInteger,kAsInteger
IfUBound(a,2)<
UBound(b,1)Then
这两个矩阵不能够相乘"
ExitFunction
ReDimsd(UBound(a,1),UBound(b,2))
Forj=0ToUBound(b,2)
Fork=0ToUBound(b,1)
sd(i,j)=sd(i,j)+a(i,k)*b(k,j)
xc=sd
PublicFunctionqiuni(a)
Dimc,m%,n%,p#,l%,i%,j%,ab#
m=UBound(a,1)
n=UBound(a,2)
Ifm<
nThen
该矩阵不可逆!
!
ReDimc(m,2*n+1)
Fori=0Tom
Forj=0Ton
c(i,j)=a(i,j)
Nextj
Forj=m+1To2*m+1
c(i,j)=0
i=0
Forj=m+1To2*m+1
c(i,j)=1
i=i+1
Fork=0Ton
Ifc(k,k)=0Then
Fori=k+1Ton
Ifc(i,k)<
0Then
GoTothis
EndIf
Nexti
Ifi=n+1Then
MsgBox("
该矩阵不可逆!
!
ExitFunction
this:
Forj=0To2*m+1
p=c(k,j)
c(k,j)=c(i,j)
c(i,j)=p
ab=1#/c(k,k)
Forj=0To2*m+1
c(k,j)=c(k,j)*ab
Fori=0Ton
Ifi<
kThen
Ifj<
c(i,j)=c(i,j)-c(i,k)*c(k,j)
c(i,k)=0
Forj=0Tom
a(i,j)=c(i,j+n+1)
a(i,j)=Round(a(i,j),4)
qiuni=a
四.实验结果图
五.实验总结
此次实验让我深入了解单点定位的计算过程,加强了对单点定位基本公式和误差方程式,法线方程式的记忆。
并通过上机调试程序加强了自己动手能力的培养。
通过此次实验为以后的GPS的学习打下了基础。