Skip to content

Instantly share code, notes, and snippets.

@fnoble
Forked from mookerji/sdiff_empty.c
Last active September 22, 2016 21:52
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save fnoble/b05000e1961cab909ae5 to your computer and use it in GitHub Desktop.
Save fnoble/b05000e1961cab909ae5 to your computer and use it in GitHub Desktop.
single diff measurement question (intersection of two structs via prns)
// Compiles with gcc -O0 single_diff_libswiftnav.c
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <stdio.h>
#include <inttypes.h>
typedef uint8_t u8;
typedef uint16_t u16;
typedef struct {
double pseudorange;
double carrier_phase;
double doppler;
double snr;
u8 prn;
} navigation_measurement_t;
typedef struct {
double pseudorange;
double carrier_phase;
double doppler;
double snr;
u8 prn;
} sdiff_t;
/** Given given two lists of undifferenced input observations
* (navigation_measurement_t), nav_meas_1 and nav_meas_2,
* constructs the pseudorange, carrier_phase, and
* Doppler sdiffs (single difference observations) using the
* intersection of their PRNs.
*
* Also:
* 0. SNR in the output is the min of the SNRs of inputs 1 and 2.
* 1. `sat_pos` and `sat_vel` are taken from input 1.
*
* Returns the number of sdiffs in the intersection.
*
* \param nav_meas1_len Number of measurements in `nav_meas1`
* \oaram nav_meas1 Array of undifferenced observations
* \param nav_meas2_len Number of measurements in `nav_meas2`
* \oaram nav_meas2 Array of navigation measurements
* \param sdiff Single difference observations
*
* \return The number of observations written to `sdiff`
*
*/
u8 single_diff(u8 nav_meas1_len,
navigation_measurement_t *nav_meas1,
u8 nav_meas2_len,
navigation_measurement_t *nav_meas2,
sdiff_t *sdiff)
{
return 0;
}
int main() {
// Fake measurements
navigation_measurement_t nm1 = {.prn = 1};
navigation_measurement_t nm2 = {.prn = 2};
navigation_measurement_t nm3 = {.prn = 3};
navigation_measurement_t nm4 = {.prn = 4};
// Array of measurements.
navigation_measurement_t nms_no_match1[2];
navigation_measurement_t nms_no_match2[2];
// Single differences
sdiff_t sds_out[3];
memcpy(&nms_no_match1[0], &nm1, sizeof(navigation_measurement_t));
memcpy(&nms_no_match1[1], &nm2, sizeof(navigation_measurement_t));
memcpy(&nms_no_match2[0], &nm1, sizeof(navigation_measurement_t));
memcpy(&nms_no_match2[1], &nm3, sizeof(navigation_measurement_t));
u8 num_match = single_diff(2, nms_no_match1,
2, nms_no_match2,
sds_out);
printf("%d", num_match);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment