测距码测定卫地距
原理:首先架设卫星钟和接收机钟均无误差,都能与标准的GPS时间保持严格同步。在某一时刻t,卫星在卫星钟的控制下发出某一结构的测距码,与此同时,接收机则在接收机钟的控制下产生相同的测距码。由卫星所产生的复制码经
Δ
t
\varDelta t
Δt时间的传播后到达接收机并被接收机所接收。由接收机所产生的复制码则经过一个时间延迟器延迟时间
τ
\tau
τ后与接收到的卫星信号进行比对。如果这两个信号尚未对齐,就调整延迟时间
τ
\tau
τ,直至这两个信号对齐为止。此时,复制码的延迟时间
τ
\tau
τ就等于卫星信号的传播时间
Δ
t
\varDelta t
Δt,将其乘以真空中的光速
c
c
c 后即可得到卫地间的伪距
ρ
\rho
ρ:
ρ
=
τ
∗
c
=
Δ
t
∗
c
\rho = \tau * c = \varDelta t * c
ρ=τ∗c=Δt∗c
由于卫星钟和接收机钟实际上不可避免地存在误差,此外还有电离层、对流层等的影响。求得的
ρ
\rho
ρ并不等于卫星与测站的真实距离,故称为伪距。
观测方程
在伪距测量中,直接量测值是信号到达接收机的时刻tr与信号离开卫星的时刻(卫星钟量测)之差,此差值与真空中的光速c乘积即为观测值p,即:
ρ
r
s
=
c
⋅
(
t
r
−
t
s
)
\rho _{r}^{s}=c\cdot \left( t_{r}^{}-t_{s}^{} \right)
ρrs=c⋅(tr−ts)
但实际上,卫星钟与接收机钟均有误差
t
r
′
=
t
r
−
δ
t
r
t_{r}^{'}=t_r-\delta t_r
tr′=tr−δtr
t
s
′
=
t
s
−
δ
t
s
t_{s}^{'}=t_s-\delta t_s
ts′=ts−δts
代入得:
R
r
s
=
c
⋅
(
t
r
′
−
t
s
′
)
+
c
⋅
(
δ
t
r
−
δ
t
s
)
=
ρ
r
s
+
c
⋅
(
δ
t
r
−
δ
t
s
)
R_{r}^{s}=c\cdot \left( t_{r}^{'}-t_{s}^{'} \right) +c\cdot \left( \delta t_r-\delta t_s \right) = \rho _{r}^{s}+c\cdot \left( \delta t_r-\delta t_s \right)
Rrs=c⋅(tr′−ts′)+c⋅(δtr−δts)=ρrs+c⋅(δtr−δts)
加上电离层、对流层、多路径等各种带来的误差:
R
r
s
=
ρ
r
s
+
c
⋅
(
δ
t
r
−
δ
t
s
)
+
δ
Σ
R_{r}^{s}=\rho _{r}^{s}+c\cdot \left( \delta t_r-\delta t_s \right)+\delta _{\varSigma}
Rrs=ρrs+c⋅(δtr−δts)+δΣ
R
r
s
R^{s}_{r}
Rrs 表示伪距,伪距=真实距离+误差距离,加上电离层、对流层带来的误差
根据卫星与测站坐标,卫星
(
x
i
,
y
i
,
z
i
)
(x_{i},y_{i},z_{i})
(xi,yi,zi)与测站间
(
x
,
y
,
z
)
(x,y,z)
(x,y,z)几何距离为
ρ
r
s
=
(
x
i
−
x
)
2
+
(
y
i
−
y
)
2
+
(
z
i
−
z
)
2
\rho_{r}^{s}=\sqrt{\left( x_i-x \right) ^2+\left( y_i-y \right) ^2+\left( z_i-z \right) ^2}
ρrs=(xi−x)2+(yi−y)2+(zi−z)2
R
r
s
=
(
x
i
−
x
)
2
+
(
y
i
−
y
)
2
+
(
z
i
−
z
)
2
+
c
⋅
(
δ
t
r
−
δ
t
s
)
+
δ
Σ
R_{r}^{s}=\sqrt{\left( x_i-x \right) ^2+\left( y_i-y \right) ^2+\left( z_i-z \right) ^2}+c\cdot \left( \delta t_r-\delta t_s \right)+\delta _{\varSigma}
Rrs=(xi−x)2+(yi−y)2+(zi−z)2+c⋅(δtr−δts)+δΣ
如何求解出方程呢?式中存在未知数
(
x
,
y
,
z
)
(x,y,z)
(x,y,z)和
δ
t
r
\delta t_r
δtr ,卫星位置
(
x
i
,
y
i
,
z
i
)
(x_{i},y_{i},z_{i})
(xi,yi,zi)、卫星钟差
δ
t
s
\delta t_s
δts是可以通过广播星历得到的,一般伪距定位不考虑电离层等误差改正。故方程中存在四个未知数,欲求解出测站坐标,至少需要四个方程,即在测站位置需同时接收到4颗及以上的卫星,才能对方程进行求解。为方便方程的解算,通常需对伪距方程进行线性化,在多数情况下,接收到的卫星数量会大于4颗,一般采用最小二乘法对方程进行解算。
对
ρ
r
s
=
(
x
i
−
x
)
2
+
(
y
i
−
y
)
2
+
(
z
i
−
z
)
2
\rho_{r}^{s}=\sqrt{\left( x_i-x \right) ^2+\left( y_i-y \right) ^2+\left( z_i-z \right) ^2}
ρrs=(xi−x)2+(yi−y)2+(zi−z)2在
x
=
(
x
r
0
,
y
r
0
,
z
r
0
)
x=\left( x_{r}^{0},y_{r}^{0},z_{r}^{0} \right)
x=(xr0,yr0,zr0)进行泰勒展开,
{
ρ
=
F
(
x
0
)
+
∂
F
(
x
)
∂
x
∣
x
0
d
x
+
ε
d
x
=
x
−
x
0
=
[
Δ
x
Δ
y
Δ
z
]
∂
F
(
x
)
∂
x
=
(
∂
F
∂
x
r
,
∂
F
∂
y
r
,
∂
F
∂
z
r
)
\begin{cases} \rho =F\left( x_0 \right) +\frac{\partial F\left( x \right)}{\partial x}\mid_{x_0}^{}dx+\varepsilon\\ dx=x-x_0=\left[ \begin{array}{c} \varDelta x\\ \varDelta y\\ \varDelta z\\\end{array} \right]\\ \,\,\frac{\partial F\left( x \right)}{\partial x}=\left( \frac{\partial F}{\partial x_r},\frac{\partial F}{\partial y_r},\frac{\partial F}{\partial z_r} \right)\\\end{cases}
⎩
⎨
⎧ρ=F(x0)+∂x∂F(x)∣x0dx+εdx=x−x0=⎣
⎡ΔxΔyΔz⎦
⎤∂x∂F(x)=(∂xr∂F,∂yr∂F,∂zr∂F)
代入
R
r
s
R_{r}^{s}
Rrs,记为
R
R
R,保留未知量,得
R
∼
\overset{\sim}R
R∼:
R
∼
=
R
−
ρ
0
+
c
⋅
δ
t
r
−
δ
Σ
R
∼
=
[
−
(
x
s
−
x
r
0
)
ρ
0
,
−
(
y
s
−
y
r
0
)
ρ
0
,
−
(
z
s
−
z
r
0
)
ρ
0
,
1
]
[
Δ
x
r
Δ
y
r
Δ
z
r
c
δ
t
r
]
+
ε
\overset{\sim}{R}=R-\rho _0+c\cdot \delta t_r-\delta _{\varSigma}\\\overset{\sim}{R}=\left[ \frac{-\left( x_s-x_{r}^{0} \right)}{\rho _0},\frac{-\left( y_s-y_{r}^{0} \right)}{\rho _0},\frac{-\left( z_s-z_{r}^{0} \right)}{\rho _0},1 \right] \left[ \begin{array}{c} \varDelta x_r\\ \varDelta y_r\\ \varDelta z_r\\ c\delta t_r\\\end{array} \right] +\varepsilon
R∼=R−ρ0+c⋅δtr−δΣR∼=[ρ0−(xs−xr0),ρ0−(ys−yr0),ρ0−(zs−zr0),1]⎣
⎡ΔxrΔyrΔzrcδtr⎦
⎤+ε
记为
L
=
A
X
+
υ
L=AX+\upsilon
L=AX+υ
多个
L
=
A
X
+
υ
L=AX+\upsilon
L=AX+υ进行联立,采用最小二乘法进行求解
注意点:
-
x
=
(
x
r
0
,
y
r
0
,
z
r
0
)
x=\left( x_{r}^{0},y_{r}^{0},z_{r}^{0} \right)
x=(xr0,yr0,zr0)表示为用户接收机天线位置的近似值,通常初始化为
(
0
,
0
,
0
)
(0,0,0)
(0,0,0)。我们将计算出来的
x
=
(
x
r
0
,
y
r
0
,
z
r
0
)
x=\left( x_{r}^{0},y_{r}^{0},z_{r}^{0} \right)
x=(xr0,yr0,zr0)作为下一次的
(
x
r
,
y
r
,
z
r
)
(x_r,y_r,z_r)
(xr,yr,zr),通过多次迭代计算后,就可以获取误差值最小的
(
x
r
,
y
r
,
z
r
)
(x_r,y_r,z_r)
(xr,yr,zr) ,也就是我们需要计算的接收机天线位置坐标。
x = d x + x 0 = [ Δ x Δ y Δ z ] + [ x 0 y 0 z 0 ] x=dx+x_0=\left[ \begin{array}{c} \varDelta x\\ \varDelta y\\ \varDelta z\\\end{array} \right] +\left[ \begin{array}{c} x_0\\ y_0\\ z_0\\\end{array} \right] x=dx+x0=⎣ ⎡ΔxΔyΔz⎦ ⎤+⎣ ⎡x0y0z0⎦ ⎤
程序实现步骤:
- 读取卫星星历数据、原始观测量数据(即卫星的伪距、载波等);
- 通过卫星星历以及伪距信息计算出卫星基于ECEF的坐标、每个卫星的钟差;
- 将接收机天线位置初始化为(0,0,0);
- 根据推导的方程中各公式,结合卫星坐标、时间、伪距信息计算出对应的数值;
- 根据最小二乘法,将上述的数据整理为对应的矩阵;
- 根据矩阵计算法则计算出的值;
- 重复4-6步,并设定值的变化满足一个很小的值的时候,结束迭代;
- 输出对应的坐标。