Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef LIBSWIFTNAV_SINGLE_DIFF_H
00014 #define LIBSWIFTNAV_SINGLE_DIFF_H
00015
00016 #include "common.h"
00017 #include "track.h"
00018 #include "almanac.h"
00019 #include "ephemeris.h"
00020 #include "gpstime.h"
00021
00022 typedef struct {
00023 double pseudorange;
00024 double carrier_phase;
00025 double doppler;
00026 double sat_pos[3];
00027 double sat_vel[3];
00028 double snr;
00029 u8 prn;
00030 } sdiff_t;
00031
00032 u8 propagate(u8 n, double ref_ecef[3],
00033 navigation_measurement_t *m_in_base, gps_time_t *t_base,
00034 navigation_measurement_t *m_in_rover, gps_time_t *t_rover,
00035 navigation_measurement_t *m_out_base);
00036
00037 u8 single_diff(u8 n_a, navigation_measurement_t *m_a,
00038 u8 n_b, navigation_measurement_t *m_b,
00039 sdiff_t *sds);
00040 void double_diff(u8 n, sdiff_t *sds, sdiff_t *dds, u8 ref_idx);
00041
00042 int sdiff_search_prn(const void *a, const void *b);
00043
00044 u8 make_propagated_sdiffs(u8 n_local, navigation_measurement_t *m_local,
00045 u8 n_remote, navigation_measurement_t *m_remote,
00046 double *remote_dists, double remote_pos_ecef[3],
00047 ephemeris_t *es, gps_time_t t,
00048 sdiff_t *sds);
00049
00050 void almanacs_to_single_diffs(u8 n, almanac_t *alms, gps_time_t timestamp, sdiff_t *sdiffs);
00051
00052 s8 copy_sdiffs_put_ref_first(u8 ref_prn, u8 num_sdiffs, sdiff_t *sdiffs, sdiff_t *sdiffs_with_ref_first);
00053
00054 u8 filter_sdiffs(u8 num_sdiffs, sdiff_t *sdiffs, u8 num_sats_to_drop, u8 *sats_to_drop);
00055
00056 #endif
00057