1. GPS卫星位置的计算
1.1 用广播星历计算卫星位置
1.1.1. 计算卫星运动的平均角速度 n n n
首先根据广播星历中给出的参数
A
\sqrt{A}
A 计算参考时刻
t
o
e
t_{\mathrm{oe}}
toe 的平均角速度
n
0
n_0
n0 :
n
0
=
G
M
(
A
)
3
n_0=\frac{\sqrt{G M}}{(\sqrt{A})^3}
n0=(A)3GM
式中,
G
M
G M
GM 为万有引力常数
G
G
G 与地球总质量
M
M
M 之乘积, 其值为
G
M
=
3.986005
×
1
0
14
m
3
/
s
2
G M=3.986005 \times 10^{14} \mathrm{~m}^3 / \mathrm{s}^2
GM=3.986005×1014 m3/s2 。 然后根据广播星历中给定的摄动参数
Δ
n
\Delta n
Δn 计算观测时刻卫星的平均角速度
n
n
n :
n
=
n
0
+
Δ
n
n=n_0+\Delta n
n=n0+Δn
1.1.2. 计算观测睶间卫星的平近点角 M M M
M
=
M
0
+
n
(
t
−
t
o
e
)
M=M_0+n\left(t-t_{o e}\right)
M=M0+n(t−toe)
式中,
M
0
M_0
M0 为参考时刻
t
o
e
t_{o e}
toe 时的平近点角, 由广播星历给出。
为什么要用参考时刻
t
o
e
t_{o e}
toe 来替代卫星过近地点时刻
t
0
t_0
t0 来计算呢? 原因很简单, 因为广播 星历每
2
h
2 \mathrm{~h}
2 h 更新一次, 将参考时刻设在中央时刻时, 外推间隔小于等于
1
h
1 \mathrm{~h}
1 h 。而卫星的运行周 期为
12
h
12 \mathrm{~h}
12 h 左右, 采用卫星过近地点时刻
t
0
t_0
t0 来计算时, 外推间隔最大有可能达
6
h
6 \mathrm{~h}
6 h 。用
t
o
e
t_{o e}
toe 来取 代卫星过近地点时刻
t
0
t_0
t0 后, 外推间隔将大大减小, 用较简单的模型也能获得精度较高的结 果。
1.1.3. 计算偏近点角
用弧度表示的开普勒方程为:
E
=
M
+
e
sin
E
E=M+e \sin E
E=M+esinE
用角度表示的开普勒方程为:
E
∘
=
M
∘
+
ρ
∘
⋅
e
sin
E
∘
E^{\circ}=M^{\circ}+\rho^{\circ} \cdot e \sin E^{\circ}
E∘=M∘+ρ∘⋅esinE∘
解上述方程可用迭代法或微分改正法。
1.1.4. 计算真近点角 f f f
{
cos
f
=
cos
E
−
e
1
−
e
cos
E
sin
f
=
1
−
e
2
sin
E
1
−
e
cos
E
\left\{\begin{array}{l} \cos f=\frac{\cos E-e}{1-e \cos E} \\ \sin f=\frac{\sqrt{1-e^2} \sin E}{1-e \cos E} \end{array}\right.
{cosf=1−ecosEcosE−esinf=1−ecosE1−e2sinE
式中,
e
e
e 为卫星轨道的偏心率, 由广播星历给出。
所以,
f
=
arctan
1
−
e
2
sin
E
cos
E
−
e
f=\arctan \frac{\sqrt{1-e^2} \sin E}{\cos E-e}
f=arctancosE−e1−e2sinE
1.1.5. 计算升交角距 u ′ u^{\prime} u′
u
′
=
ω
+
f
u^{\prime}=\omega+f
u′=ω+f
式中,
ω
\omega
ω 为近地点角距, 由广播星历给出。
1.1.6. 计算摄动改正项 δ μ 、 δ r 、 δ i \delta_\mu 、 \delta_r 、 \delta_i δμ、δr、δi
广播星历中给出了下列 6 个摄动参数:
C
u
c
,
C
w
e
,
C
r
c
,
C
r
,
C
i
c
,
C
i
s
C_{u c}, C_{\mathrm{we}}, C_{r c}, C_r, C_{i c}, C_{i s}
Cuc,Cwe,Crc,Cr,Cic,Cis, 据此可求出由于
J
2
J_2
J2 项 而引起的升交角距
u
u
u 的改正项
δ
u
\delta_u
δu 、卫星矢径
r
r
r 的改正项
δ
r
\delta_r
δr 和卫星轨道倾角
i
i
i 的摄动改正项
δ
i
\delta_i
δi 。 计算公式如下:
{
δ
u
=
C
u
k
cos
2
u
′
+
C
w
sin
2
u
′
δ
r
=
C
r
c
cos
2
u
′
+
C
r
r
sin
2
u
′
δ
i
=
C
i
c
cos
2
u
′
+
C
i
u
sin
2
u
′
\left\{\begin{array}{l} \delta_u=C_{u k} \cos 2 u^{\prime}+C_w \sin 2 u^{\prime} \\ \delta_r=C_{r c} \cos 2 u^{\prime}+C_{r r} \sin 2 u^{\prime} \\ \delta_i=C_{i c} \cos 2 u^{\prime}+C_{i u} \sin 2 u^{\prime} \end{array}\right.
⎩
⎨
⎧δu=Cukcos2u′+Cwsin2u′δr=Crccos2u′+Crrsin2u′δi=Ciccos2u′+Ciusin2u′
1.1.7. 对 u ′ 、 r ′ 、 i 0 u^{\prime} 、 r^{\prime} 、 i_0 u′、r′、i0 进行掇动改正
{
u
=
u
′
+
δ
u
r
=
r
′
+
δ
r
=
a
(
1
−
e
cos
E
)
+
δ
r
i
=
i
0
+
δ
i
+
d
i
d
t
(
t
−
t
∂
t
)
\left\{\begin{array}{l} u=u^{\prime}+\delta_u \\ r=r^{\prime}+\delta_r=a(1-e \cos E)+\delta_r \\ i=i_0+\delta_i+\frac{\mathrm{d} i}{\mathrm{~d} t}\left(t-t_{\partial t}\right) \end{array}\right.
⎩
⎨
⎧u=u′+δur=r′+δr=a(1−ecosE)+δri=i0+δi+ dtdi(t−t∂t)
式中,
a
a
a 为卫星轨道的长半径,
a
=
(
A
)
2
,
A
a=(\sqrt{A})^2, \sqrt{A}
a=(A)2,A 由广播星历给出;
i
0
i_0
i0 为
t
o
e
t_{\mathrm{oe}}
toe 时刻的轨道倾角, 由 广播星历中的开普勒六参数给出;
d
i
d
t
\frac{\mathrm{d} i}{\mathrm{~d} t}
dtdi 为
i
i
i 的变化率, 由广播星历中的摄动九参数给出。
1.1.8. 计算卫星在轨道面坐标系中的位置
在轨道平面直角坐标系中 (坐标原点位于地心,
X
X
X 轴指向升交点) 卫星的平面直角坐 标为:
{
x
=
r
cos
u
y
=
r
sin
u
\left\{\begin{array}{l} x=r \cos u \\ y=r \sin u \end{array}\right.
{x=rcosuy=rsinu
1.1.9. 计算观测瞬间升交点的经度 L L L
若参考时刻
t
o
e
t_{\mathrm{oe}}
toe 时升交点的赤经为
Ω
t
α
e
\Omega_{t_{\alpha e}}
Ωtαe, 升交点对时间的变化率为
Ω
˙
\dot{\Omega}
Ω˙, 那么观测瞬间
t
t
t 的 升交点赤经
Ω
\Omega
Ω 应为:
Ω
=
Ω
t
e
e
+
Ω
˙
(
t
−
t
o
t
)
\boldsymbol{\Omega}=\Omega_{t_{e e}}+\dot{\Omega}\left(t-t_{o t}\right)
Ω=Ωtee+Ω˙(t−tot)
Ω
˙
\dot{\Omega}
Ω˙ 可从广播星历的摄动参数中给出。
设本周开始时刻 (星期日 0 时) 格林尼治恒星时为
G
A
S
T
veek
\mathrm{GAST}_{\text {veek }}
GASTveek , 则观测瞬间的格林尼治恒 星时为:
GAST
=
G
A
S
T
week
+
ω
e
t
\text { GAST }=\mathrm{GAST}_{\text {week }}+\omega_e t
GAST =GASTweek +ωet
式中,
ω
e
\omega_e
ωe 为地球自转角速度, 其值为
ω
e
=
7.292115
×
1
0
−
5
r
a
d
/
s
。
\omega_e=7.292115 \times 10^{-5} \mathrm{rad} / \mathrm{s}_{\text {。 }}
ωe=7.292115×10−5rad/s。
t
t
t 为本周内的时间
(
s
)
(\mathrm{s})
(s) 。显然, 上述 @埓中把地球自转看成是完全匀速的, 末顾及地球 自转的不均匀性。这样就可求得观测䀰间昲交点的经度值为:
L
=
Ω
−
G
A
S
T
=
Ω
t
o
e
−
G
A
S
T
week
+
Ω
˙
(
t
−
t
o
e
)
−
ω
e
t
Ω
0
=
Ω
t
o
e
−
G
A
S
T
week
\begin{gathered} L=\Omega-\mathrm{GAST}=\Omega_{t_{o e}}-\mathrm{GAST}_{\text {week }}+\dot{\Omega}\left(t-t_{o e}\right)-\omega_e t \\ \Omega_0=\Omega_{t_{o e}}-\mathrm{GAST}_{\text {week }} \end{gathered}
L=Ω−GAST=Ωtoe−GASTweek +Ω˙(t−toe)−ωetΩ0=Ωtoe−GASTweek
则有:
L
=
Ω
0
+
Ω
˙
(
t
−
t
o
e
)
−
ω
e
t
=
Ω
0
+
(
Ω
˙
−
ω
e
)
t
−
Ω
˙
⋅
t
o
e
L=\Omega_0+\dot{\Omega}\left(t-t_{o e}\right)-\omega_e t=\Omega_0+\left(\dot{\Omega}-\omega_e\right) t-\dot{\Omega} \cdot t_{o e}
L=Ω0+Ω˙(t−toe)−ωet=Ω0+(Ω˙−ωe)t−Ω˙⋅toe
注意: 广播星历中给出的并不是参考时刻
t
o
e
t_{o e}
toe 的升交点赤经
Ω
t
e
c
\Omega_{t_{e c}}
Ωtec, 而是该值与本周起始时 刻的格林尼治恒星时
G
A
S
T
w
e
c
k
\mathrm{GAST}_{\mathrm{weck}}
GASTweck 之差。
1.1.10. 计算卫星在睬时地球坐标系中的位置
已知升交点的大地经度
L
L
L 以及轨道平面的倾角
i
i
i 后, 就可通过两次旋转方便地求得卫 星在地固坐标系中的位置:
(
X
Y
Z
)
=
R
Z
(
−
L
)
R
X
(
−
i
)
(
x
y
0
)
=
(
x
cos
L
−
y
cos
i
sin
L
x
sin
L
+
y
cos
i
cos
L
y
sin
i
)
\left(\begin{array}{l} X \\ Y \\ Z \end{array}\right)=\boldsymbol{R}_Z(-L) \boldsymbol{R}_X(-i)\left(\begin{array}{l} x \\ y \\ 0 \end{array}\right)=\left(\begin{array}{c} x \cos L-y \cos i \sin L \\ x \sin L+y \cos i \cos L \\ y \sin i \end{array}\right)
⎝
⎛XYZ⎠
⎞=RZ(−L)RX(−i)⎝
⎛xy0⎠
⎞=⎝
⎛xcosL−ycosisinLxsinL+ycosicosLysini⎠
⎞
1.1.11. 计算卫星在协议地球坐标系中的位畳
观测瞬间卫星在协议地球坐标系中的位置为:
(
x
y
z
)
=
R
Y
(
−
x
p
)
R
x
(
−
y
p
)
⋅
(
X
Y
Z
)
=
(
1
0
x
p
0
1
−
y
p
−
x
p
y
p
1
)
⋅
(
X
Y
Z
)
\begin{aligned} \left(\begin{array}{l} x \\ y \\ z \end{array}\right) &=\boldsymbol{R}_Y\left(-x_p\right) \boldsymbol{R}_x\left(-y_p\right) \cdot\left(\begin{array}{l} X \\ Y \\ Z \end{array}\right) \\ &=\left(\begin{array}{ccc} 1 & 0 & x_p \\ 0 & 1 & -y_p \\ -x_p & y_p & 1 \end{array}\right) \cdot\left(\begin{array}{l} X \\ Y \\ Z \end{array}\right) \end{aligned}
⎝
⎛xyz⎠
⎞=RY(−xp)Rx(−yp)⋅⎝
⎛XYZ⎠
⎞=⎝
⎛10−xp01ypxp−yp1⎠
⎞⋅⎝
⎛XYZ⎠
⎞
在 GPS 定位中, 常常需要多次计算卫星的位置和速度, 如用上述方法计算需占用较多的内存和计算时间。为此, 常将卫星星历用一个时间多项式来表示, 在内存中仅保存该多项式的系数, 供计算时调用。在各种多项式中, 切比雪夫多项式的拟合效果最佳, 即使在该时 间段的两端近似性也很好。用
n
n
n 阶切比雪夫多项式来逼近时间段
[
t
0
,
t
0
+
Δ
t
]
\left[t_0, t_0+\Delta t\right]
[t0,t0+Δt] 中的卫星星历时, 先将变量
t
∈
[
t
0
,
t
0
+
Δ
t
]
t \in\left[t_0, t_0+\Delta t\right]
t∈[t0,t0+Δt] 变换为变量
τ
∈
[
−
1
,
1
]
:
\tau \in[-1,1]:
τ∈[−1,1]:
τ
=
2
Δ
t
(
t
−
t
0
)
−
1
\tau=\frac{2}{\Delta t}\left(t-t_0\right)-1
τ=Δt2(t−t0)−1
于是卫星坐标可表示为:
X
(
t
)
=
∑
i
=
0
n
C
x
i
T
i
(
t
)
X(t)=\sum_{i=0}^n C_{x_i} T_i(t)
X(t)=i=0∑nCxiTi(t)
式中,
n
n
n 为多项式的阶数;
C
x
i
C_{x_i}
Cxi 为切比雪夫多项式的系数。根据已知的卫星坐标, 用最小二乘 法拟合出多项式系数
C
x
i
C_{x_i}
Cxi, 就可用式(3-27) 计算出该时段中任一时刻的卫星位置。切比雪 夫多项式
T
i
T_i
Ti 的递推公式如下:
T
0
(
τ
)
=
1
T_0(\tau)=1
T0(τ)=1
T 1 ( τ ) = τ T n ( τ ) = 2 τ T n − 1 ( τ ) − T n − 2 ( τ ) , ∣ τ ∣ ⩽ 1 , n ⩾ 2 \begin{aligned} &T_1(\tau)=\tau \\ &T_n(\tau)=2 \tau T_{n-1}(\tau)-T_{n-2}(\tau),|\tau| \leqslant 1, n \geqslant 2 \end{aligned} T1(τ)=τTn(τ)=2τTn−1(τ)−Tn−2(τ),∣τ∣⩽1,n⩾2
2 用精密星历计算卫星位置
精密星历是按一定的时间间隔 (通常为
15
m
i
n
15 \mathrm{~min}
15 min ) 来给出卫星在空间的三维坐标、三维运 动速度及卫星钟改正数等信息。著名的 IGS 综合精密星历需
1
∼
2
1 \sim 2
1∼2 周后才能获得。由 NGS 提出的格式被广泛采用,其中 ASCII 格式的 SP1 和二进制格式的 ECF1 格式不仅给出了卫 星的三维位置信息
(
k
m
)
(\mathrm{km})
(km), 也给出了卫星的三维运动速度信息
(
k
m
/
s
)
(\mathrm{km} / \mathrm{s})
(km/s) 。而 SP2(ASCII 格式) 和 ECF2 (二进制格式) 则仅给出了卫星三维位置信息。速度信息需通过位置信息用数值微 分的方法来求出。采用这种格式时存储量可减少一半左右。在 SP3(ASCII 格式) 和 ECF3 (二进制格式) 中增加了卫星钟的改正数信息。
观测瞬间的卫星位置及运动速度可采用内揷法求得。其中拉格朗日 (Lagrange) 多项式 内揷法被广泛采用, 因为这种内揷法速度快且易于编程。拉格朗日揷值公式十分简单: 已知 函数
y
=
f
(
x
)
y=f(x)
y=f(x) 的
n
+
1
n+1
n+1 个节点
x
0
,
x
1
,
x
2
,
⋯
,
x
n
x_0, x_1, x_2, \cdots, x_n
x0,x1,x2,⋯,xn 及其对应的函数值
y
0
,
y
1
,
y
2
,
⋯
,
y
n
y_0, y_1, y_2, \cdots, y_n
y0,y1,y2,⋯,yn, 对揷值区 间内任一点
x
x
x, 可用下面的拉格朗日揷值多项式来计算函数值:
f
(
x
)
=
∑
k
=
0
n
∏
i
=
0
,
i
≠
k
n
(
x
−
x
i
x
k
−
x
i
)
y
k
f(x)=\sum_{k=0}^n \prod_{i=0, i \neq k}^n\left(\frac{x-x_i}{x_k-x_i}\right) y_k
f(x)=k=0∑ni=0,i=k∏n(xk−xix−xi)yk
Remondi 的研究表明, 对 GPS 卫星而言, 如果要精确至
1
0
−
8
10^{-8}
10−8, 用
30
m
i
n
30 \mathrm{~min}
30 min 的历元间隔和 9 阶内插已足够保证精度。