GPS从入门到放弃(八) — GPS卫星速度解算
在阅读这一篇强烈建议先阅读GPS卫星位置解算。
为了计算卫星速度,需要对卫星的位置求导。
计算各参变量对时间的导数如下:
M˙k=n
E˙k=1−ecosEkM˙k
ν˙k=1−ecosEk1−e2
E˙k
Φ˙k=ν˙k
δu˙k=2Φ˙k(Cuscos2Φk−Cucsin2Φk)
δr˙k=2Φ˙k(Crscos2Φk−Crcsin2Φk)
δi˙k=2Φ˙k(Ciscos2Φk−Cicsin2Φk)
Ω˙k=Ω˙−Ω˙e
i˙k=i˙+δi˙k
r˙k=AeE˙ksinEk+δr˙k
u˙k=Φ˙k+δu˙k
计算卫星在轨道平面内的速度和WGS-84坐标系中的速度如下:
x˙k′=r˙kcosuk−rku˙ksinuk
y˙k′=r˙ksinuk+rku˙kcosuk
x˙k=−ykΩ˙k−(y˙k′cosik−zki˙k)sinΩk+x˙k′cosΩk
y˙k=xkΩ˙k+(y˙k′cosik−zki˙k)cosΩk+x˙k′sinΩk
z˙k=y˙k′sinik+yk′i˙kcosik
在之前的位置解算的过程中,我们已经求得了很多中间变量,利用以上公式,即可求得卫星速度。
代码如下:
M_k_Dot = n
E_k_Dot = M_k_Dot/(1-e*math.cos(E_k))
nu_k_Dot = math.sqrt(1-e**2)*E_k_Dot/(1-e*math.cos(E_k))
Phi_k_Dot = nu_k_Dot
delta_u_k_Dot = 2*Phi_k_Dot*(Cus*math.cos(2*Phi_k) - Cuc*math.sin(2*Phi_k))
delta_r_k_Dot = 2*Phi_k_Dot*(Crs*math.cos(2*Phi_k) - Crc*math.sin(2*Phi_k))
delta_i_k_Dot = 2*Phi_k_Dot*(Cis*math.cos(2*Phi_k) - Cic*math.sin(2*Phi_k))
Omega_k_Dot = Omega_Dot - Omega_e_Dot
i_k_Dot = i_Dot + delta_i_k_Dot
r_k_Dot = A*e*E_k_Dot*math.sin(E_k) + delta_r_k_Dot
u_k_Dot = Phi_k_Dot + delta_u_k_Dot
x_p_k_Dot = r_k_Dot*math.cos(u_k) - r_k*u_k_Dot*math.sin(u_k)
y_p_k_Dot = r_k_Dot*math.sin(u_k) + r_k*u_k_Dot*math.cos(u_k)
x_k_Dot = -y_k*Omega_k_Dot - (y_p_k_Dot*math.cos(i_k) - z_k*i_k_Dot)*math.sin(Omega_k) + x_p_k_Dot*math.cos(Omega_k)
y_k_Dot = x_k*Omega_k_Dot + (y_p_k_Dot*math.cos(i_k) - z_k*i_k_Dot)*math.cos(Omega_k) + x_p_k_Dot*math.sin(Omega_k)
z_k_Dot = y_p_k_Dot*math.sin(i_k) + y_p_k*i_k_Dot*math.cos(i_k)
print("x_k_Dot={}".format(x_k_Dot))
print("y_k_Dot={}".format(y_k_Dot))
print("z_k_Dot={}".format(z_k_Dot))
用GPS卫星位置解算中的数据进行解算,可以得到卫星在WGS-84坐标系中的速度为:
⎣⎡x˙ky˙kz˙k⎦⎤=⎣⎡1088.40932985282189.0005213284817−1527.1796186285617⎦⎤(米/秒)