Program Listing for File measurements.cc

Return to documentation for file (measurements/measurements.cc)

#include "lupnt/measurements/measurements.h"

#include "lupnt/core/constants.h"

namespace lupnt {

  Vec1 Range(const VecX& r1, const VecX& r2) { return Vec1((r2 - r1).norm()); }

  Vec1 RangeRate(const VecX& r1, const VecX& r2, const VecX& v1, const VecX& v2) {
    return Vec1((v2 - v1).dot(r2 - r1) / (r2 - r1).norm());
  }

  Vec1 RangeRate(const VecX& rv1, const VecX& rv2) {
    const int dim = rv1.size() / 2;
    VecX r1 = rv1.head(dim), r2 = rv2.head(dim);
    VecX v1 = rv1.tail(dim), v2 = rv2.tail(dim);
    return RangeRate(r1, r2, v1, v2);
  }

  Vec2 RangeAndRangeRate(const VecX& r1, const VecX& r2, const VecX& v1, const VecX& v2) {
    Real r_norm = (r2 - r1).norm();
    return Vec2(r_norm, (v2 - v1).dot(r2 - r1) / r_norm);
  }

  Vec2 RangeAndRangeRate(const VecX& rv1, const VecX& rv2) {
    const int dim = rv1.size() / 2;
    VecX r1 = rv1.head(dim), r2 = rv2.head(dim);
    VecX v1 = rv1.tail(dim), v2 = rv2.tail(dim);
    return RangeAndRangeRate(r1, r2, v1, v2);
  }

  Vec1 Pseudorange(const VecX& r1, const VecX& r2, Real b1, Real b2) {
    return Range(r1, r2).array() + C * (b1 - b2);
  }

  Vec1 PseudorangeRate(const VecX& r1, const VecX& r2, const VecX& v1, const VecX& v2, Real d1,
                       Real d2) {
    return RangeRate(r1, r2, v1, v2).array() + C * (d1 - d2);
  }

  Vec1 PseudorangeRate(const VecX& rv1, const VecX& rv2, Real d1, Real d2) {
    const int dim = rv1.size() / 2;
    VecX r1 = rv1.head(dim), r2 = rv2.head(dim);
    VecX v1 = rv1.tail(dim), v2 = rv2.tail(dim);
    return PseudorangeRate(r1, r2, v1, v2, d1, d2);
  }

}  // namespace lupnt