Class SecondOrderNonLinearFingerprintPositionEstimator2D


public class SecondOrderNonLinearFingerprintPositionEstimator2D extends NonLinearFingerprintPositionEstimator2D
2D position estimator based on located fingerprints containing only RSSI readings and having as well prior knowledge of the location of radio sources associated to those readings. This implementation uses a second-order Taylor approximation over provided located fingerprints to determine an approximate position for a non-located fingerprint using a non-linear solving algorithm. An initial position can be provided as a starting point to solve the position, otherwise the average point of selected nearest fingerprints is used as a starting point.
  • Constructor Details

    • SecondOrderNonLinearFingerprintPositionEstimator2D

      public SecondOrderNonLinearFingerprintPositionEstimator2D()
      Constructor.
    • SecondOrderNonLinearFingerprintPositionEstimator2D

      public SecondOrderNonLinearFingerprintPositionEstimator2D(FingerprintPositionEstimatorListener<com.irurueta.geometry.Point2D> listener)
      Constructor.
      Parameters:
      listener - listener in charge of handling events.
    • SecondOrderNonLinearFingerprintPositionEstimator2D

      public SecondOrderNonLinearFingerprintPositionEstimator2D(List<? extends RssiFingerprintLocated<? extends RadioSource,? extends RssiReading<? extends RadioSource>,com.irurueta.geometry.Point2D>> locatedFingerprints, RssiFingerprint<? extends RadioSource,? extends RssiReading<? extends RadioSource>> fingerprint, List<? extends RadioSourceLocated<com.irurueta.geometry.Point2D>> sources)
      Constructor.
      Parameters:
      locatedFingerprints - located fingerprints containing RSSI readings.
      fingerprint - fingerprint containing readings at an unknown location for provided located fingerprints.
      sources - located radio sources.
      Throws:
      IllegalArgumentException - if provided non located fingerprint is null, located fingerprints value is null or there are not enough fingerprints or readings within provided fingerprints (for 2D position estimation at least 2 located total readings are required among all fingerprints, for example 2 readings are required in a single fingerprint, or at least 2 fingerprints at different locations containing a single reading are required).
    • SecondOrderNonLinearFingerprintPositionEstimator2D

      public SecondOrderNonLinearFingerprintPositionEstimator2D(List<? extends RssiFingerprintLocated<? extends RadioSource,? extends RssiReading<? extends RadioSource>,com.irurueta.geometry.Point2D>> locatedFingerprints, RssiFingerprint<? extends RadioSource,? extends RssiReading<? extends RadioSource>> fingerprint, List<? extends RadioSourceLocated<com.irurueta.geometry.Point2D>> sources, FingerprintPositionEstimatorListener<com.irurueta.geometry.Point2D> listener)
      Constructor.
      Parameters:
      locatedFingerprints - located fingerprints containing RSSI readings.
      fingerprint - fingerprint containing readings at an unknown location for provided located fingerprints.
      sources - located radio sources.
      listener - listener in charge of handling events.
      Throws:
      IllegalArgumentException - if provided non located fingerprint is null, located fingerprints value is null or there are not enough fingerprints or readings within provided fingerprints (for 2D position estimation at least 2 located total readings are required among all fingerprints, for example 2 readings are required in a single fingerprint, or at least 2 fingerprints at different locations containing a single reading are required).
    • SecondOrderNonLinearFingerprintPositionEstimator2D

      public SecondOrderNonLinearFingerprintPositionEstimator2D(List<? extends RssiFingerprintLocated<? extends RadioSource,? extends RssiReading<? extends RadioSource>,com.irurueta.geometry.Point2D>> locatedFingerprints, RssiFingerprint<? extends RadioSource,? extends RssiReading<? extends RadioSource>> fingerprint, List<? extends RadioSourceLocated<com.irurueta.geometry.Point2D>> sources, com.irurueta.geometry.Point2D initialPosition)
      Constructor.
      Parameters:
      locatedFingerprints - located fingerprints containing RSSI readings.
      fingerprint - fingerprint containing readings at an unknown location for provided located fingerprints.
      sources - located radio sources.
      initialPosition - initial position to start the solving algorithm or null.
      Throws:
      IllegalArgumentException - if provided non located fingerprint is null, located fingerprints value is null or there are not enough fingerprints or readings within provided fingerprints (for 2D position estimation at least 2 located total readings are required among all fingerprints, for example 2 readings are required in a single fingerprint, or at least 2 fingerprints at different locations containing a single reading are required).
    • SecondOrderNonLinearFingerprintPositionEstimator2D

      public SecondOrderNonLinearFingerprintPositionEstimator2D(List<? extends RssiFingerprintLocated<? extends RadioSource,? extends RssiReading<? extends RadioSource>,com.irurueta.geometry.Point2D>> locatedFingerprints, RssiFingerprint<? extends RadioSource,? extends RssiReading<? extends RadioSource>> fingerprint, List<? extends RadioSourceLocated<com.irurueta.geometry.Point2D>> sources, com.irurueta.geometry.Point2D initialPosition, FingerprintPositionEstimatorListener<com.irurueta.geometry.Point2D> listener)
      Constructor.
      Parameters:
      locatedFingerprints - located fingerprints containing RSSI readings.
      fingerprint - fingerprint containing readings at an unknown location for provided located fingerprints.
      sources - located radio sources.
      initialPosition - initial position to start the solving algorithm or null.
      listener - listener in charge of handling events.
      Throws:
      IllegalArgumentException - if provided non located fingerprint is null, located fingerprints value is null or there are not enough fingerprints or readings within provided fingerprints (for 2D position estimation at least 2 located total readings are required among all fingerprints, for example 2 readings are required in a single fingerprint, or at least 2 fingerprints at different locations containing a single reading are required).
  • Method Details

    • getType

      Gets type of position estimator.
      Specified by:
      getType in class NonLinearFingerprintPositionEstimator<com.irurueta.geometry.Point2D>
      Returns:
      type of position estimator.
    • evaluate

      protected double evaluate(int i, double[] point, double[] params, double[] derivatives)
      Evaluates a non-linear multi dimension function at provided point using provided parameters and returns its evaluation and derivatives of the function respect the function parameters.
      Specified by:
      evaluate in class NonLinearFingerprintPositionEstimator<com.irurueta.geometry.Point2D>
      Parameters:
      i - number of sample being evaluated.
      point - point where function will be evaluated.
      params - initial parameters estimation to be tried. These will change as the Levenberg-Marquardt algorithm iterates to the best solution. These are used as input parameters along with point to evaluate function.
      derivatives - partial derivatives of the function respect to each provided parameter.
      Returns:
      function evaluation at provided point.
    • propagateVariances

      protected Double propagateVariances(double fingerprintRssi, double pathlossExponent, com.irurueta.geometry.Point2D fingerprintPosition, com.irurueta.geometry.Point2D radioSourcePosition, com.irurueta.geometry.Point2D estimatedPosition, Double fingerprintRssiVariance, Double pathlossExponentVariance, com.irurueta.algebra.Matrix fingerprintPositionCovariance, com.irurueta.algebra.Matrix radioSourcePositionCovariance)
      Propagates provided variances into RSSI variance of non-located fingerprint reading.
      Specified by:
      propagateVariances in class NonLinearFingerprintPositionEstimator<com.irurueta.geometry.Point2D>
      Parameters:
      fingerprintRssi - closest located fingerprint reading RSSI expressed in dBm's.
      pathlossExponent - path-loss exponent.
      fingerprintPosition - position of closest fingerprint.
      radioSourcePosition - radio source position associated to fingerprint reading.
      estimatedPosition - position to be estimated. Usually this is equal to the initial position used by a non-linear algorithm.
      fingerprintRssiVariance - variance of fingerprint RSSI or null if unknown.
      pathlossExponentVariance - variance of path-loss exponent or null if unknown.
      fingerprintPositionCovariance - covariance of fingerprint position or null if unknown.
      radioSourcePositionCovariance - covariance of radio source position or null if unknown.
      Returns:
      variance of RSSI measured at non located fingerprint reading.