gnatss.ops.kalman module#

gnatss.ops.kalman.ecef2geodetic(x: float, y: float, z: float, semimajor_axis: float = 6378137.0, semiminor_axis: float = 6356752.31424518, eps=np.float32(1.1920929e-07)) tuple#

convert ECEF (meters) to geodetic coordinates

rewrite of pymap3d.ecef2geodetic to use numba for speedup… not as robust

gnatss.ops.kalman.kalman_init(row, cov_err=0.25, gnss_pos_psd=3.125e-05, vel_psd=0.0025, start_dt=0.05)#
gnatss.ops.kalman.predict(dt, X, P, Q, F, gnss_pos_psd=3.125e-05, vel_psd=0.0025)#
gnatss.ops.kalman.rot_vel(row, lat, lon)#
——————- Rotate ENU velocity into ECEF velocity ——————————–

dX = | -sg -sa*cg ca*cg | | de | de = | -sg cg 0 | | dX | dY = | cg -sa*sg ca*sg | | dn | and dn = |-sa*cg -sa*sg ca | | dY | dZ = | 0 ca sa | | du | du = | ca*cg ca*sg sa | | dZ |


gnatss.ops.kalman.rts_smoother(Ts, Xs, Ps, F, Q, start_dt=0.05)#
gnatss.ops.kalman.run_filter_simulation(records: NDArray, start_dt=0.05, gnss_pos_psd=3.125e-05, vel_psd=0.0025, cov_err=0.25) NDArray#

Performs Kalman filtering of the GPS_GEOCENTRIC and GPS_COV_DIAG fields

Parameters:
recordsNumpy Array

Numpy Array containing the fields # TODO -> Fill field names after verification of algorithm

Returns:
DataFrame

Pandas Dataframe containing Time and Kalman filtered GPS_GEOCENTRIC and GPS_COV_DIAG columns

gnatss.ops.kalman.updateQ(Q, gnss_pos_psd=3.125e-05, vel_psd=0.0025)#
gnatss.ops.kalman.update_position(row, Nx, X, P, R_position)#
gnatss.ops.kalman.update_rpos(row, R_position)#
gnatss.ops.kalman.update_vel_cov(row, R_velocity, rot)#
gnatss.ops.kalman.update_velocity(Nx, X, P, R_velocity, v_xyz)#