gps_helper

class gps_helper.gps_helper.GPSDataSource(gps_tle_file, rx_sv_list=('PRN 03', 'PRN 09', 'PRN 22', 'PRN 26'), ref_lla=(38.8454167, -104.7215556, 1903.0), ts=1.0, tle_source='celestrak')[source]

Obtain GPS SV position in ECEF via TLEs and SGP4 orbit propagation. Additionally integrate user trajectories in ENU about an input lla location. The resulting data sets

Mark Wickert January 2018

Rx_sv_list = None

Perform coordinate conversion

create_sv_data_set(yr2, mon, day, hr, minute, sec=0)[source]

This method returns a numpy ndarrays containing target TDOA in seconds, FDOA in Hz, and the time span in minutes

Parameters:
  • yr2 (year as two digit integer, added to year 2000 (e.g., 2018 <=> 18)) –
  • mon (month as two digit integer) –
  • day (day as two digits, but can include fractional values) –
  • hr (hour as two digits, but can include fractional values) –
  • minute (minute as two digits, but can include fractional values) –
  • sec (second as two digit integer, but can include fractional values; seconds default is 0) –
Returns:

  • SV_Pos (A 3D ndarray containing the SV (x,y,x) position values (columns) for each of 4) – satellites (rows) in meters corresponding to the times in t (slice)
  • SV_Vel (A 3D ndarray containing the SV (x,y,x) velocity values (columns) for each of 4) – satellites (rows) in meters corresponding to the times in t (slice)

Notes

This function requires N_sim_steps to be initialized for the SV_Pos and SV_Vel arrays to be created, and t_delta needs to be precalculated so that offsets can be passed to GPSDataSource.propagate_ecef().

Examples

days2mdh(year, days)[source]

This function converts the day of the year, days, to the equivalent month day, hour, minute and second. From Vallado’s original code translated to Python.

Parameters:
  • year (The year as a four digit number, e.g., 2013) –
  • days (day of the year as a decimal number) –
Returns:

  • mo (month as two digit integer)
  • day (day as two digits)
  • hour (hour as two digits)
  • minute (minute as two digits,)
  • sec (second as two digit integer, but can include fractional values)

Notes

A support function in the class, currently not utilized by any methods.

gstime(jdut1)[source]

This method converts the Julian date to Greenwich sidereal time (gst)

Parameters:jut1 (Julian date) –
Returns:gst
Return type:Greenwich sidereal time

Notes

A support function from the original David Vallado SGP4 recoded to Python. This is a private method.

Examples

>>> # Inside propagate_ecf() make this call:
>>> gst = self.gstime(jday(year,mon,day,hr,minute,sec));
init_sat_obs()[source]

Initialize SGP4 satellite objects in list satellite

propagate_ecef(satellite, year, mon, day, hr, minute, sec)[source]

This method is responsible for propagating the satellite object, denoted satellite, to a specified GMT time. Coded to Python from the work of Charles Rino, (c) 2010, in MATLAB. See the function body details.

Parameters:
  • satellite (Input satellite object created by the sgp4 method twolinerv()) –
  • year (year as four digit integer, e.g., 2013) –
  • mon (month as two digit integer) –
  • day (day as two digits, but can include fractional values) –
  • hr (hour as two digits, but can include fractional values) –
  • minute (minute as two digits, but can include fractional values) –
  • sec (second as two digit integer, but can include fractional values) –
Returns:

  • xsat_ecef (Satellite position in ECF coordinates)
  • vsat_ecef (Satellite velocity in ECF coordinates)
  • gst (Greenwich sidereal time)

Notes

This is a private function used only by the class. When the class constructor is called, primary and secondary satellite objects are created using the input TLEs, e.g., self.sat_primary = twoline2rv(self.tle_primary[0],

self.tle_primary[1],wgs84)

self.sat_secondary = twoline2rv(self.tle_secondary[0],self.tle_secondary[1],wgs84) The function propagate_ecf is used in all calculations where TDOA and FDOA are calculated.

Examples

>>> # As called from r_r_dot_ecf
>>> position, velocity, gst =
                      self.propagate_ecef(sv,2000+yr2,
                                         mon,day,hr,
                                         minute,sec)
ref_ecef = None

Read GPS TLEs into dictionary

user_traj_gen(route_list, vmph, yr2=18, mon=1, day=14, hr=20, minute=0, sec=0)[source]

GPS user trajectory generator

Mark Wickert January 2018

gps_helper.gps_helper.earth_model()[source]

Define the constants from the WGS-84 ellipsoidal Earth model.

Parameters:None
Returns:
  • a (semi-major axis of the Earth ellipsoid model)
  • f (flattening)

Notes

The World Geodetic System (WGS) is a standard for use in cartography, geodesy, and navigation. The latest revision is WGS-84.

gps_helper.gps_helper.ecef2enu(r_ecef, r_ref, phi_ref, lam_ref)[source]

Convert ECEF coordinates to ENU using an ECEF reference location r_ref having lat = phi_ref and lon = lam_ref

gps_helper.gps_helper.enu2ecef(r_enu, r_ref, phi_ref, lam_ref)[source]

Convert ENU coordinates to ECEF using an ECEF reference location r_ref having lat = phi_ref and lon = lam_ref

gps_helper.gps_helper.llh2ecef(llh)[source]

Convert lat,lon,hgt geographic coords to X,Y,Z Earth Centered Earth Fixed (ecef) or just (ecf) coords.

Parameters:llh (A three element ndarray containing latitude(lat), longitude (lon), and altitude (a) or height (hgt), all in meters) –
Returns:
  • x (The ecef x coordinate)
  • y (The ecef y coordinate)
  • z (The ecef z coordinate)

Notes

This is a function that computes: N = a/sqrt( 1 - f*(2-f)*sin(lat)*sin(lat) ) X = (N + h)*cos(lat)*cos(lon) Y = (N + h)*cos(lat)*sin(lon) Z = ((1-f)^2 * N + h)*sin(lat) by also calling EarthModel()

Examples

gps_helper.gps_helper.sv_user_traj_3d(gps_ds, sv_pos, user_pos, ele=10, azim=20)[source]
Parameters:
  • gps_ds
  • sv_pos – Satellite position locations in ECEF
  • user_pos – User position locations in ECEF
  • ele – Elevation for the camera/view angle (the default is 20)
  • azim – Azimuth for the camera/view angle (the default is 20)
Returns:

gps_helper.gps_helper.sv_user_traj_3d_interactive(gps_ds, sv_pos, user_pos, ele=10.0, azim=20.0)[source]

This method will provide an interactive 3d model plotted using mayavi to show all trajectories.

Parameters:
  • gps_ds
  • sv_pos – Satellite position locations in ECEF
  • user_pos – User position locations in ECEF
Returns: