Class SecondOrderNonLinearFingerprintPositionEstimator3D


public class SecondOrderNonLinearFingerprintPositionEstimator3D extends NonLinearFingerprintPositionEstimator3D
3D 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

    • SecondOrderNonLinearFingerprintPositionEstimator3D

      public SecondOrderNonLinearFingerprintPositionEstimator3D()
      Constructor.
    • SecondOrderNonLinearFingerprintPositionEstimator3D

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

      public SecondOrderNonLinearFingerprintPositionEstimator3D(List<? extends RssiFingerprintLocated<? extends RadioSource,? extends RssiReading<? extends RadioSource>,com.irurueta.geometry.Point3D>> locatedFingerprints, RssiFingerprint<? extends RadioSource,? extends RssiReading<? extends RadioSource>> fingerprint, List<? extends RadioSourceLocated<com.irurueta.geometry.Point3D>> 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 3D position estimation 3 located total readings are required among all fingerprints).
    • SecondOrderNonLinearFingerprintPositionEstimator3D

      public SecondOrderNonLinearFingerprintPositionEstimator3D(List<? extends RssiFingerprintLocated<? extends RadioSource,? extends RssiReading<? extends RadioSource>,com.irurueta.geometry.Point3D>> locatedFingerprints, RssiFingerprint<? extends RadioSource,? extends RssiReading<? extends RadioSource>> fingerprint, List<? extends RadioSourceLocated<com.irurueta.geometry.Point3D>> sources, FingerprintPositionEstimatorListener<com.irurueta.geometry.Point3D> 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 3D position estimation 3 located total readings are required among all fingerprints).
    • SecondOrderNonLinearFingerprintPositionEstimator3D

      public SecondOrderNonLinearFingerprintPositionEstimator3D(List<? extends RssiFingerprintLocated<? extends RadioSource,? extends RssiReading<? extends RadioSource>,com.irurueta.geometry.Point3D>> locatedFingerprints, RssiFingerprint<? extends RadioSource,? extends RssiReading<? extends RadioSource>> fingerprint, List<? extends RadioSourceLocated<com.irurueta.geometry.Point3D>> sources, com.irurueta.geometry.Point3D 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 3D position estimation 3 located total readings are required among all fingerprints).
    • SecondOrderNonLinearFingerprintPositionEstimator3D

      public SecondOrderNonLinearFingerprintPositionEstimator3D(List<? extends RssiFingerprintLocated<? extends RadioSource,? extends RssiReading<? extends RadioSource>,com.irurueta.geometry.Point3D>> locatedFingerprints, RssiFingerprint<? extends RadioSource,? extends RssiReading<? extends RadioSource>> fingerprint, List<? extends RadioSourceLocated<com.irurueta.geometry.Point3D>> sources, com.irurueta.geometry.Point3D initialPosition, FingerprintPositionEstimatorListener<com.irurueta.geometry.Point3D> 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. For 3D position estimation 3 located total readings are required among all fingerprints).
  • Method Details

    • getType

      Gets type of position estimator.
      Specified by:
      getType in class NonLinearFingerprintPositionEstimator<com.irurueta.geometry.Point3D>
      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.Point3D>
      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.Point3D fingerprintPosition, com.irurueta.geometry.Point3D radioSourcePosition, com.irurueta.geometry.Point3D 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.Point3D>
      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.