Finding passes over radar systemΒΆ

  • radar passes
  • radar passes

Out:

a    : 7.2000e+06   x : -1.2919e+06
e    : 5.0000e-02   y : 2.4776e+06
i    : 7.5000e+01   z : 6.4974e+06
omega: 0.0000e+00   vx: -2.0314e+03
Omega: 7.9000e+01   vy: -6.8229e+03
anom : 7.2000e+01   vz: 2.5835e+03
Temporal points: 675849
Pass Station [0, 0] | Rise 0:00:00.127839 (3.4 min) 0:03:23.264533 Fall
Pass Station [0, 0] | Rise 1:42:08.745262 (4.8 min) 1:46:58.045663 Fall
Pass Station [0, 0] | Rise 3:26:18.937886 (4.8 min) 3:31:06.704215 Fall
Pass Station [0, 0] | Rise 5:09:51.673586 (5.9 min) 5:15:47.578278 Fall
Pass Station [0, 0] | Rise 6:53:14.437819 (6.2 min) 6:59:27.984338 Fall
Pass Station [0, 0] | Rise 23:40:05.679676 (5.0 min) 23:45:07.764010 Fall

import numpy as np
import matplotlib.pyplot as plt
import pyorb

import sorts
eiscat3d = sorts.radars.eiscat3d

from sorts.propagator import SGP4
Prop_cls = SGP4
Prop_opts = dict(
    settings = dict(
        out_frame='ITRS',
    ),
)
prop = Prop_cls(**Prop_opts)

orb = pyorb.Orbit(M0 = pyorb.M_earth, direct_update=True, auto_update=True, degrees=True, a=7200e3, e=0.05, i=75, omega=0, Omega=79, anom=72, epoch=53005.0)
print(orb)

t = sorts.equidistant_sampling(
    orbit = orb,
    start_t = 0,
    end_t = 3600*24*1,
    max_dpos=1e3,
)

print(f'Temporal points: {len(t)}')
states = prop.propagate(t, orb.cartesian[:,0], orb.epoch, A=1.0, C_R = 1.0, C_D = 1.0)

passes = eiscat3d.find_passes(t, states)

for ps in passes[0][0]: #tx-0 and rx-0
    print(ps)


fig = plt.figure(figsize=(15,15))
ax = fig.add_subplot(111, projection='3d')
ax.plot(states[0,:], states[1,:], states[2,:])

fig = plt.figure(figsize=(15,15))
axes = [
    [
        fig.add_subplot(221, projection='3d'),
        fig.add_subplot(222),
    ],
    [
        fig.add_subplot(223),
        fig.add_subplot(224),
    ],
]

for pi, ps in enumerate(passes[0][0]):
    zang = ps.zenith_angle()
    snr = ps.calculate_snr(eiscat3d.tx[0], eiscat3d.rx[0], diameter=0.05)

    axes[0][0].plot(ps.enu[0][0,:], ps.enu[0][1,:], ps.enu[0][2,:], '-', label=f'pass-{pi}')
    axes[0][0].set_xlabel('East-North-Up coordinates')

    axes[0][1].plot((ps.t - ps.start())/3600.0, zang[0], '-', label=f'pass-{pi}')
    axes[0][1].set_xlabel('Time past epoch [h]')
    axes[0][1].set_ylabel('Zenith angle from TX [deg]')

    axes[1][0].plot((ps.t - ps.start())/3600.0, ps.range()[0]*1e-3, '-', label=f'pass-{pi}')
    axes[1][0].set_xlabel('Time past epoch [h]')
    axes[1][0].set_ylabel('Range from TX [km]')

    axes[1][1].plot((ps.t - ps.start())/3600.0, 10*np.log10(snr), '-', label=f'pass-{pi}')
    axes[1][1].set_xlabel('Time past epoch [h]')
    axes[1][1].set_ylabel('Optimal SNR [dB]')

axes[1][1].legend()
plt.show()

Total running time of the script: ( 0 minutes 59.897 seconds)

Gallery generated by Sphinx-Gallery