Package com.irurueta.navigation.indoor
Class WeightedKNearestNeighboursPositionSolver<P extends com.irurueta.geometry.Point<?>>
java.lang.Object
com.irurueta.navigation.indoor.WeightedKNearestNeighboursPositionSolver<P>
- Type Parameters:
P- aPointtype.
- Direct Known Subclasses:
WeightedKNearestNeighboursPositionSolver2D,WeightedKNearestNeighboursPositionSolver3D
public abstract class WeightedKNearestNeighboursPositionSolver<P extends com.irurueta.geometry.Point<?>>
extends Object
Estimates position using Wi-Fi signals indoor and the Weighted k-Nearest
Neighbours (WkNN) algorithm.
WkNN algorithm is based on https://github.com/ajnas/WiFiPS.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final doubleDefault minimum allowed distance between received Wi-Fi fingerprints.protected double[]Euclidean distances between WiFi signal fingerprints (expressed in dB's).private doubleMinimum allowed distance between received Wi-Fi signal strengths.protected double[]Estimated inhomogeneous position coordinates.protected RssiFingerprintLocated<WifiAccessPoint,RssiReading<WifiAccessPoint>, P>[] Known located Wi-Fi fingerprints.Listener to be notified of events raised by this instance.protected booleanIndicates if this instance is locked because indoor is being estimated.static final intMinimum required number of fingerprints and their distances. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedConstructor.protectedWeightedKNearestNeighboursPositionSolver(RssiFingerprintLocated<WifiAccessPoint, RssiReading<WifiAccessPoint>, P>[] fingerprints, double[] distances) Constructor.protectedWeightedKNearestNeighboursPositionSolver(RssiFingerprintLocated<WifiAccessPoint, RssiReading<WifiAccessPoint>, P>[] fingerprints, double[] distances, WeightedKNearestNeighboursPositionSolverListener<P> listener) Constructor.protectedWeightedKNearestNeighboursPositionSolver(WeightedKNearestNeighboursPositionSolverListener<P> listener) Constructor. -
Method Summary
Modifier and TypeMethodDescriptiondouble[]Gets euclidean distances between WiFi signal fingerprints (expressed in dB's).doubleGets minimum allowed distance between Wi-Fi signal fingerprints.abstract PGets estimated position.voidgetEstimatedPosition(P estimatedPosition) Gets estimated position and stores result into provided instance.double[]Gets estimated inhomogeneous position coordinates.Gets known located Wi-Fi fingerprints.Gets listener to be notified of events raised by this instance.abstract intGets number of dimensions of location points.protected voidinternalSetFingerprintsAndDistances(RssiFingerprintLocated<WifiAccessPoint, RssiReading<WifiAccessPoint>, P>[] fingerprints, double[] distances) Sets known located Wi-Fi fingerprints and Euclidean distances between Wi-Fi signal fingerprints.booleanisLocked()Returns boolean indicating if estimator is locked because estimation is under progress.booleanisReady()Indicates whether solver is ready to find a solution.voidsetEpsilon(double epsilon) Sets minimum allowed distance between WiFi signal fingerprints.voidsetFingerprintsAndDistances(RssiFingerprintLocated<WifiAccessPoint, RssiReading<WifiAccessPoint>, P>[] fingerprints, double[] distances) Sets known located Wi-Fi fingerprints and Euclidean distances between Wi-Fi signal fingerprints.voidSets listener to be notified of events raised by this instance.voidsolve()Estimates position.
-
Field Details
-
DEFAULT_EPSILON
public static final double DEFAULT_EPSILONDefault minimum allowed distance between received Wi-Fi fingerprints.- See Also:
-
MIN_FINGERPRINTS
public static final int MIN_FINGERPRINTSMinimum required number of fingerprints and their distances. If only 1 fingerprint is used, this algorithm will return provided fingerprint position, however, some accuracy might be lost due to numerical computations. For that reason, when only one fingerprint is provided, this algorithm will simply return the fingerprint position.- See Also:
-
fingerprints
protected RssiFingerprintLocated<WifiAccessPoint,RssiReading<WifiAccessPoint>, fingerprintsP extends com.irurueta.geometry.Point<?>>[] Known located Wi-Fi fingerprints. -
distances
protected double[] distancesEuclidean distances between WiFi signal fingerprints (expressed in dB's). -
listener
protected WeightedKNearestNeighboursPositionSolverListener<P extends com.irurueta.geometry.Point<?>> listenerListener to be notified of events raised by this instance. -
estimatedPositionCoordinates
protected double[] estimatedPositionCoordinatesEstimated inhomogeneous position coordinates. -
locked
protected boolean lockedIndicates if this instance is locked because indoor is being estimated. -
epsilon
private double epsilonMinimum allowed distance between received Wi-Fi signal strengths.
-
-
Constructor Details
-
WeightedKNearestNeighboursPositionSolver
protected WeightedKNearestNeighboursPositionSolver()Constructor.
-
-
Method Details
-
getListener
Gets listener to be notified of events raised by this instance.- Returns:
- listener to be notified of events raised by this instance.
-
getFingerprints
Gets known located Wi-Fi fingerprints.- Returns:
- known located Wi-Fi fingerprints.
-
getDistances
public double[] getDistances()Gets euclidean distances between WiFi signal fingerprints (expressed in dB's).- Returns:
- euclidean distances between WiFi signal fingerprints.
-
isReady
public boolean isReady()Indicates whether solver is ready to find a solution.- Returns:
- true if solver is ready, false otherwise.
-
isLocked
public boolean isLocked()Returns boolean indicating if estimator is locked because estimation is under progress.- Returns:
- true if solver is locked, false otherwise.
-
getEpsilon
public double getEpsilon()Gets minimum allowed distance between Wi-Fi signal fingerprints.- Returns:
- minimum allowed distance between Wi-Fi signal fingerprints.
-
setEpsilon
public void setEpsilon(double epsilon) throws com.irurueta.navigation.LockedException Sets minimum allowed distance between WiFi signal fingerprints.- Parameters:
epsilon- minimum allowed distance between WiFi signal fingerprints. strengths.- Throws:
IllegalArgumentException- if provided value is zero or negative.com.irurueta.navigation.LockedException- if instance is busy solving the indoor problem.
-
solve
public void solve() throws com.irurueta.navigation.NotReadyException, com.irurueta.navigation.LockedExceptionEstimates position.- Throws:
com.irurueta.navigation.NotReadyException- if solver is not ready.com.irurueta.navigation.LockedException- if instance is busy solving position.
-
getEstimatedPositionCoordinates
public double[] getEstimatedPositionCoordinates()Gets estimated inhomogeneous position coordinates.- Returns:
- estimated inhomogeneous position coordinates.
-
getEstimatedPosition
Gets estimated position and stores result into provided instance.- Parameters:
estimatedPosition- instance where estimated position will be stored.
-
getEstimatedPosition
Gets estimated position.- Returns:
- estimated position.
-
getNumberOfDimensions
public abstract int getNumberOfDimensions()Gets number of dimensions of location points.- Returns:
- number of dimensions of location points.
-