CPD Results
The following document contains the results of PMD's CPD 7.14.0.
Duplications
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerAndGyroscopeIntervalDetectorThresholdFactorOptimizer.java | 540 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerGyroscopeAndMagnetometerIntervalDetectorThresholdFactorOptimizer.java | 693 |
&& gyroscopeQualityScoreMapper != null
&& mseRule != null;
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @return time interval between input measurements.
*/
public double getTimeInterval() {
return generator.getTimeInterval();
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final double timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @return time interval between input measurements.
*/
public Time getTimeIntervalAsTime() {
return generator.getTimeIntervalAsTime();
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param result instance where the time interval will be stored.
*/
public void getTimeIntervalAsTime(final Time result) {
generator.getTimeIntervalAsTime(result);
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final Time timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @return a minimum number of input measurements required in a static interval
* to be taken into account.
*/
public int getMinStaticSamples() {
return generator.getMinStaticSamples();
}
/**
* Sets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @param minStaticSamples a minimum number of input measurements required in
* a static interval to be taken into account.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMinStaticSamples(final int minStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMinStaticSamples(minStaticSamples);
}
/**
* Gets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @return maximum number of input measurements allowed in dynamic intervals.
*/
public int getMaxDynamicSamples() {
return generator.getMaxDynamicSamples();
}
/**
* Sets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @param maxDynamicSamples maximum number of input measurements allowed in
* dynamic intervals.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMaxDynamicSamples(final int maxDynamicSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMaxDynamicSamples(maxDynamicSamples);
}
/**
* Gets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous accelerometer noise level.
*
* @return length of input measurements to keep within the window.
*/
public int getWindowSize() {
return generator.getWindowSize();
}
/**
* Sets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous noise level.
* Window size must always be larger than the allowed minimum value, which is 2
* and must have an odd value.
*
* @param windowSize length of number of samples to keep within the window.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is not valid.
*/
public void setWindowSize(final int windowSize) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setWindowSize(windowSize);
}
/**
* Gets number of input measurements provided to the
* {@link #getDataSource()} to be processed initially while keeping the sensor
* static to find the base noise level when the device is static.
*
* @return number of samples to be processed initially.
*/
public int getInitialStaticSamples() {
return generator.getInitialStaticSamples();
}
/**
* Sets number of input parameters provided to the {@link #getDataSource()}
* to be processed initially while keeping the sensor static to
* find the base noise level when the device is static.
*
* @param initialStaticSamples number of samples ot be processed initially.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than
* {@link TriadStaticIntervalDetector#MINIMUM_INITIAL_STATIC_SAMPLES}.
*/
public void setInitialStaticSamples(final int initialStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInitialStaticSamples(initialStaticSamples);
}
/**
* Gets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @return factor to determine that a sudden movement has occurred.
*/
public double getInstantaneousNoiseLevelFactor() {
return generator.getInstantaneousNoiseLevelFactor();
}
/**
* Sets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @param instantaneousNoiseLevelFactor factor to determine that a sudden
* movement has occurred during
* initialization.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setInstantaneousNoiseLevelFactor(final double instantaneousNoiseLevelFactor) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInstantaneousNoiseLevelFactor(instantaneousNoiseLevelFactor);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public double getBaseNoiseLevelAbsoluteThreshold() {
return generator.getBaseNoiseLevelAbsoluteThreshold();
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final double baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public Acceleration getBaseNoiseLevelAbsoluteThresholdAsMeasurement() {
return generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement();
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getBaseNoiseLevelAbsoluteThresholdAsMeasurement(final Acceleration result) {
generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement(result);
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final Acceleration baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found expressed in
* meters per squared second (m/s^2).
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public double getAccelerometerBaseNoiseLevel() {
return baseNoiseLevel;
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public Acceleration getAccelerometerBaseNoiseLevelAsMeasurement() {
return createMeasurement(baseNoiseLevel, getDefaultUnit());
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getAccelerometerBaseNoiseLevelAsMeasurement(final Acceleration result) {
result.setValue(baseNoiseLevel);
result.setUnit(getDefaultUnit());
}
/**
* Gets gyroscope base noise level PSD (Power Spectral Density)
* expressed in (rad^2/s).
*
* @return gyroscope base noise level PSD.
*/
public double getGyroscopeBaseNoiseLevelPsd() {
return angularSpeedNoiseRootPsd * angularSpeedNoiseRootPsd;
}
/**
* Gets gyroscope base noise level root PSD (Power Spectral Density)
* expressed in (rad * s^-0.5)
*
* @return gyroscope base noise level root PSD.
*/
@Override
public double getGyroscopeBaseNoiseLevelRootPsd() {
return angularSpeedNoiseRootPsd;
}
/**
* Gets accelerometer base noise level PSD (Power Spectral Density)
* expressed in (m^2 * s^-3).
*
* @return accelerometer base noise level PSD.
*/
public double getAccelerometerBaseNoiseLevelPsd() {
return baseNoiseLevel * baseNoiseLevel * getTimeInterval();
}
/**
* Gets accelerometer base noise level root PSD (Power Spectral Density)
* expressed in (m * s^-1.5).
*
* @return accelerometer base noise level root PSD.
*/
@Override
public double getAccelerometerBaseNoiseLevelRootPsd() {
return baseNoiseLevel * Math.sqrt(getTimeInterval());
}
/**
* Gets the threshold to determine static/dynamic period changes expressed in
* meters per squared second (m/s^2) for the best calibration solution that
* has been found.
*
* @return threshold to determine static/dynamic period changes for the best
* solution.
*/
public double getThreshold() {
return threshold;
}
/**
* Gets the threshold to determine static/dynamic period changes for the best
* calibration solution that has been found.
*
* @return threshold to determine static/dynamic period changes for the best
* solution.
*/
public Acceleration getThresholdAsMeasurement() {
return createMeasurement(threshold, getDefaultUnit());
}
/**
* Get the threshold to determine static/dynamic period changes for the best
* calibration solution that has been found.
*
* @param result instance where the result will be stored.
*/
public void getThresholdAsMeasurement(final Acceleration result) {
result.setValue(threshold);
result.setUnit(getDefaultUnit());
}
/**
* Gets estimated standard deviation norm of accelerometer bias expressed in
* meters per squared second (m/s^2).
* This can be used as the initial accelerometer bias uncertainty for
* {@link INSLooselyCoupledKalmanInitializerConfig} or {@link INSTightlyCoupledKalmanInitializerConfig}.
*
* @return estimated standard deviation norm of accelerometer bias or null
* if not available.
*/
public Double getEstimatedAccelerometerBiasStandardDeviationNorm() {
return estimatedAccelerometerCovariance != null
? Math.sqrt(getEstimatedAccelerometerBiasFxVariance()
+ getEstimatedAccelerometerBiasFyVariance()
+ getEstimatedAccelerometerBiasFzVariance())
: null;
}
/**
* Gets estimated x coordinate variance of accelerometer bias expressed in (m^2/s^4).
*
* @return estimated x coordinate variance of accelerometer bias or null if not available.
*/
public Double getEstimatedAccelerometerBiasFxVariance() {
return estimatedAccelerometerCovariance != null
? estimatedAccelerometerCovariance.getElementAt(0, 0) : null;
}
/**
* Gets estimated y coordinate variance of accelerometer bias expressed in (m^2/s^4).
*
* @return estimated y coordinate variance of accelerometer bias or null if not available.
*/
public Double getEstimatedAccelerometerBiasFyVariance() {
return estimatedAccelerometerCovariance != null
? estimatedAccelerometerCovariance.getElementAt(1, 1) : null;
}
/**
* Gets estimated z coordinate variance of accelerometer bias expressed in (m^2/s^4).
*
* @return estimated z coordinate variance of accelerometer bias or null if not available.
*/
public Double getEstimatedAccelerometerBiasFzVariance() {
return estimatedAccelerometerCovariance != null
? estimatedAccelerometerCovariance.getElementAt(2, 2) : null;
}
/**
* Gets an array containing x,y,z components of estimated accelerometer biases
* expressed in meters per squared second (m/s^2).
*
* @return array containing x,y,z components of estimated accelerometer biases.
*/
public double[] getEstimatedAccelerometerBiases() {
return estimatedAccelerometerBiases;
}
/**
* Gets estimated accelerometer scale factors and cross-coupling errors.
* This is the product of matrix Ta containing cross-coupling errors and Ka
* containing scaling factors.
* So that:
* <pre>
* Ma = [sx mxy mxz] = Ta*Ka
* [myx sy myz]
* [mzx mzy sz ]
* </pre>
* Where:
* <pre>
* Ka = [sx 0 0 ]
* [0 sy 0 ]
* [0 0 sz]
* </pre>
* and
* <pre>
* Ta = [1 -alphaXy alphaXz ]
* [alphaYx 1 -alphaYz]
* [-alphaZx alphaZy 1 ]
* </pre>
* Hence:
* <pre>
* Ma = [sx mxy mxz] = Ta*Ka = [sx -sy * alphaXy sz * alphaXz ]
* [myx sy myz] [sx * alphaYx sy -sz * alphaYz]
* [mzx mzy sz ] [-sx * alphaZx sy * alphaZy sz ]
* </pre>
* This instance allows any 3x3 matrix. However, typically alphaYx, alphaZx and alphaZy
* are considered to be zero if the accelerometer z-axis is assumed to be the same
* as the body z-axis. When this is assumed, myx = mzx = mzy = 0 and the Ma matrix
* becomes upper diagonal:
* <pre>
* Ma = [sx mxy mxz]
* [0 sy myz]
* [0 0 sz ]
* </pre>
* Values of this matrix are unit-less.
*
* @return estimated accelerometer scale factors and cross-coupling errors, or null
* if not available.
*/
public Matrix getEstimatedAccelerometerMa() {
return estimatedAccelerometerMa;
}
/**
* Gets estimated standard deviation norm of gyroscope bias expressed in
* radians per second (rad/s).
* This can be used as the initial gyroscope bias uncertainty for
* {@link INSLooselyCoupledKalmanInitializerConfig} or {@link INSTightlyCoupledKalmanInitializerConfig}.
*
* @return estimated standard deviation norm of gyroscope bias or null
* if not available.
*/
public Double getEstimatedGyroscopeBiasStandardDeviationNorm() {
return estimatedGyroscopeCovariance != null
? Math.sqrt(getEstimatedGyroscopeBiasXVariance()
+ getEstimatedGyroscopeBiasYVariance()
+ getEstimatedGyroscopeBiasZVariance())
: null;
}
/**
* Gets estimated x coordinate variance of gyroscope bias expressed in (rad^2/s^2).
*
* @return estimated x coordinate variance of gyroscope bias or null if not available.
*/
public Double getEstimatedGyroscopeBiasXVariance() {
return estimatedGyroscopeCovariance != null
? estimatedGyroscopeCovariance.getElementAt(0, 0) : null;
}
/**
* Gets estimated y coordinate variance of gyroscope bias expressed in (rad^2/s^2).
*
* @return estimated y coordinate variance of gyroscope bias or null if not available.
*/
public Double getEstimatedGyroscopeBiasYVariance() {
return estimatedGyroscopeCovariance != null
? estimatedGyroscopeCovariance.getElementAt(1, 1) : null;
}
/**
* Gets estimated z coordinate variance of gyroscope bias expressed in (rad^2/s^2).
*
* @return estimated z coordinate variance of gyroscope bias or null if not available.
*/
public Double getEstimatedGyroscopeBiasZVariance() {
return estimatedGyroscopeCovariance != null
? estimatedGyroscopeCovariance.getElementAt(2, 2) : null;
}
/**
* Gets the array containing x,y,z components of estimated gyroscope biases
* expressed in radians per second (rad/s).
*
* @return array containing x,y,z components of estimated gyroscope biases.
*/
public double[] getEstimatedGyroscopeBiases() {
return estimatedGyroscopeBiases;
}
/**
* Gets estimated gyroscope scale factors and cross-coupling errors.
* This is the product of matrix Tg containing cross-coupling errors and Kg
* containing scaling factors.
* So that:
* <pre>
* Mg = [sx mxy mxz] = Tg*Kg
* [myx sy myz]
* [mzx mzy sz ]
* </pre>
* Where:
* <pre>
* Kg = [sx 0 0 ]
* [0 sy 0 ]
* [0 0 sz]
* </pre>
* and
* <pre>
* Tg = [1 -alphaXy alphaXz ]
* [alphaYx 1 -alphaYz]
* [-alphaZx alphaZy 1 ]
* </pre>
* Hence:
* <pre>
* Mg = [sx mxy mxz] = Tg*Kg = [sx -sy * alphaXy sz * alphaXz ]
* [myx sy myz] [sx * alphaYx sy -sz * alphaYz]
* [mzx mzy sz ] [-sx * alphaZx sy * alphaZy sz ]
* </pre>
* This instance allows any 3x3 matrix. However, typically alphaYx, alphaZx and alphaZy
* are considered to be zero if the gyroscope z-axis is assumed to be the same
* as the body z-axis. When this is assumed, myx = mzx = mzy = 0 and the Mg matrix
* becomes upper diagonal:
* <pre>
* Mg = [sx mxy mxz]
* [0 sy myz]
* [0 0 sz ]
* </pre>
* Values of this matrix are unit-less.
*
* @return estimated gyroscope scale factors and cross-coupling errors.
*/
public Matrix getEstimatedGyroscopeMg() {
return estimatedGyroscopeMg;
}
/**
* Gets estimated G-dependent cross-biases introduced on the gyroscope by the
* specific forces sensed by the accelerometer.
*
* @return a 3x3 matrix containing g-dependent cross biases.
*/
public Matrix getEstimatedGyroscopeGg() {
return estimatedGyroscopeGg;
} | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerIntervalDetectorThresholdFactorOptimizer.java | 275 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/MagnetometerIntervalDetectorThresholdFactorOptimizer.java | 271 |
final QualityScoreMapper<StandardDeviationBodyKinematics> qualityScoreMapper) throws LockedException {
if (running) {
throw new LockedException();
}
this.qualityScoreMapper = qualityScoreMapper;
}
/**
* Gets the minimum threshold factor.
*
* @return minimum threshold factor.
*/
public double getMinThresholdFactor() {
return minThresholdFactor;
}
/**
* Gets the maximum threshold factor.
*
* @return maximum threshold factor.
*/
public double getMaxThresholdFactor() {
return maxThresholdFactor;
}
/**
* Sets a range of threshold factor values to get an optimized
* threshold factor value.
*
* @param minThresholdFactor minimum threshold.
* @param maxThresholdFactor maximum threshold.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if either minimum or maximum values are
* negative, or if the minimum value is larger
* than the maximum one.
*/
public void setThresholdFactorRange(final double minThresholdFactor, final double maxThresholdFactor)
throws LockedException {
if (running) {
throw new LockedException();
}
if (minThresholdFactor < 0.0 || maxThresholdFactor < 0.0 || minThresholdFactor >= maxThresholdFactor) {
throw new IllegalArgumentException();
}
this.minThresholdFactor = minThresholdFactor;
this.maxThresholdFactor = maxThresholdFactor;
}
/**
* Indicates whether this optimizer is ready to start optimization.
*
* @return true if this optimizer is ready, false otherwise.
*/
@Override
public boolean isReady() {
return super.isReady() && calibrator != null && qualityScoreMapper != null;
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @return time interval between input measurements.
*/
public double getTimeInterval() {
return generator.getTimeInterval();
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final double timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @return time interval between input measurements.
*/
public Time getTimeIntervalAsTime() {
return generator.getTimeIntervalAsTime();
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param result instance where the time interval will be stored.
*/
public void getTimeIntervalAsTime(final Time result) {
generator.getTimeIntervalAsTime(result);
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final Time timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @return a minimum number of input measurements required in a static interval
* to be taken into account.
*/
public int getMinStaticSamples() {
return generator.getMinStaticSamples();
}
/**
* Sets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @param minStaticSamples a minimum number of input measurements required in
* a static interval to be taken into account.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMinStaticSamples(final int minStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMinStaticSamples(minStaticSamples);
}
/**
* Gets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @return maximum number of input measurements allowed in dynamic intervals.
*/
public int getMaxDynamicSamples() {
return generator.getMaxDynamicSamples();
}
/**
* Sets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @param maxDynamicSamples maximum number of input measurements allowed in
* dynamic intervals.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMaxDynamicSamples(final int maxDynamicSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMaxDynamicSamples(maxDynamicSamples);
}
/**
* Gets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous accelerometer noise level.
*
* @return length of input measurements to keep within the window.
*/
public int getWindowSize() {
return generator.getWindowSize();
}
/**
* Sets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous noise level.
* Window size must always be larger than the allowed minimum value, which is 2
* and must have an odd value.
*
* @param windowSize length of number of samples to keep within the window.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is not valid.
*/
public void setWindowSize(final int windowSize) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setWindowSize(windowSize);
}
/**
* Gets number of input measurements provided to the
* {@link #getDataSource()} to be processed initially while keeping the sensor
* static to find the base noise level when the device is static.
*
* @return number of samples to be processed initially.
*/
public int getInitialStaticSamples() {
return generator.getInitialStaticSamples();
}
/**
* Sets number of input parameters provided to the {@link #getDataSource()}
* to be processed initially while keeping the sensor static to
* find the base noise level when the device is static.
*
* @param initialStaticSamples number of samples ot be processed initially.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than
* {@link TriadStaticIntervalDetector#MINIMUM_INITIAL_STATIC_SAMPLES}.
*/
public void setInitialStaticSamples(final int initialStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInitialStaticSamples(initialStaticSamples);
}
/**
* Gets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @return factor to determine that a sudden movement has occurred.
*/
public double getInstantaneousNoiseLevelFactor() {
return generator.getInstantaneousNoiseLevelFactor();
}
/**
* Sets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @param instantaneousNoiseLevelFactor factor to determine that a sudden
* movement has occurred during
* initialization.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setInstantaneousNoiseLevelFactor(final double instantaneousNoiseLevelFactor) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInstantaneousNoiseLevelFactor(instantaneousNoiseLevelFactor);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public double getBaseNoiseLevelAbsoluteThreshold() {
return generator.getBaseNoiseLevelAbsoluteThreshold();
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final double baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public Acceleration getBaseNoiseLevelAbsoluteThresholdAsMeasurement() {
return generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement();
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getBaseNoiseLevelAbsoluteThresholdAsMeasurement(final Acceleration result) {
generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement(result);
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final Acceleration baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found expressed in
* meters per squared second (m/s^2).
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public double getAccelerometerBaseNoiseLevel() {
return baseNoiseLevel;
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public Acceleration getAccelerometerBaseNoiseLevelAsMeasurement() {
return createMeasurement(baseNoiseLevel, getDefaultUnit());
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getAccelerometerBaseNoiseLevelAsMeasurement(final Acceleration result) {
result.setValue(baseNoiseLevel);
result.setUnit(getDefaultUnit());
}
/**
* Gets accelerometer base noise level PSD (Power Spectral Density)
* expressed in (m^2 * s^-3) of the best solution that has been found.
*
* @return accelerometer base noise level PSD of the best solution that has
* been found.
*/
public double getAccelerometerBaseNoiseLevelPsd() {
return baseNoiseLevel * baseNoiseLevel * getTimeInterval();
}
/**
* Gets accelerometer base noise level root PSD (Power Spectral Density)
* expressed in (m * s^-1.5) of the best solution that has been found.
*
* @return accelerometer base noise level root PSD of the best solution that has
* been found.
*/
@Override
public double getAccelerometerBaseNoiseLevelRootPsd() {
return baseNoiseLevel * Math.sqrt(getTimeInterval());
}
/**
* Gets the threshold to determine static/dynamic period changes expressed in
* meters per squared second (m/s^2) for the best calibration solution that
* has been found.
*
* @return threshold to determine static/dynamic period changes for the best
* solution.
*/
public double getThreshold() {
return threshold;
}
/**
* Gets the threshold to determine static/dynamic period changes for the best
* calibration solution that has been found.
*
* @return threshold to determine static/dynamic period changes for the best
* solution.
*/
public Acceleration getThresholdAsMeasurement() {
return createMeasurement(threshold, getDefaultUnit());
}
/**
* Get the threshold to determine static/dynamic period changes for the best
* calibration solution that has been found.
*
* @param result instance where the result will be stored.
*/
public void getThresholdAsMeasurement(final Acceleration result) {
result.setValue(threshold);
result.setUnit(getDefaultUnit());
} | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerIntervalDetectorThresholdFactorOptimizer.java | 275 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/GyroscopeIntervalDetectorThresholdFactorOptimizer.java | 292 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/MagnetometerIntervalDetectorThresholdFactorOptimizer.java | 271 |
final QualityScoreMapper<StandardDeviationBodyKinematics> qualityScoreMapper) throws LockedException {
if (running) {
throw new LockedException();
}
this.qualityScoreMapper = qualityScoreMapper;
}
/**
* Gets the minimum threshold factor.
*
* @return minimum threshold factor.
*/
public double getMinThresholdFactor() {
return minThresholdFactor;
}
/**
* Gets the maximum threshold factor.
*
* @return maximum threshold factor.
*/
public double getMaxThresholdFactor() {
return maxThresholdFactor;
}
/**
* Sets a range of threshold factor values to get an optimized
* threshold factor value.
*
* @param minThresholdFactor minimum threshold.
* @param maxThresholdFactor maximum threshold.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if either minimum or maximum values are
* negative, or if the minimum value is larger
* than the maximum one.
*/
public void setThresholdFactorRange(final double minThresholdFactor, final double maxThresholdFactor)
throws LockedException {
if (running) {
throw new LockedException();
}
if (minThresholdFactor < 0.0 || maxThresholdFactor < 0.0 || minThresholdFactor >= maxThresholdFactor) {
throw new IllegalArgumentException();
}
this.minThresholdFactor = minThresholdFactor;
this.maxThresholdFactor = maxThresholdFactor;
}
/**
* Indicates whether this optimizer is ready to start optimization.
*
* @return true if this optimizer is ready, false otherwise.
*/
@Override
public boolean isReady() {
return super.isReady() && calibrator != null && qualityScoreMapper != null;
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @return time interval between input measurements.
*/
public double getTimeInterval() {
return generator.getTimeInterval();
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final double timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @return time interval between input measurements.
*/
public Time getTimeIntervalAsTime() {
return generator.getTimeIntervalAsTime();
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param result instance where the time interval will be stored.
*/
public void getTimeIntervalAsTime(final Time result) {
generator.getTimeIntervalAsTime(result);
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final Time timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @return a minimum number of input measurements required in a static interval
* to be taken into account.
*/
public int getMinStaticSamples() {
return generator.getMinStaticSamples();
}
/**
* Sets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @param minStaticSamples a minimum number of input measurements required in
* a static interval to be taken into account.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMinStaticSamples(final int minStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMinStaticSamples(minStaticSamples);
}
/**
* Gets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @return maximum number of input measurements allowed in dynamic intervals.
*/
public int getMaxDynamicSamples() {
return generator.getMaxDynamicSamples();
}
/**
* Sets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @param maxDynamicSamples maximum number of input measurements allowed in
* dynamic intervals.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMaxDynamicSamples(final int maxDynamicSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMaxDynamicSamples(maxDynamicSamples);
}
/**
* Gets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous accelerometer noise level.
*
* @return length of input measurements to keep within the window.
*/
public int getWindowSize() {
return generator.getWindowSize();
}
/**
* Sets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous noise level.
* Window size must always be larger than the allowed minimum value, which is 2
* and must have an odd value.
*
* @param windowSize length of number of samples to keep within the window.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is not valid.
*/
public void setWindowSize(final int windowSize) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setWindowSize(windowSize);
}
/**
* Gets number of input measurements provided to the
* {@link #getDataSource()} to be processed initially while keeping the sensor
* static to find the base noise level when the device is static.
*
* @return number of samples to be processed initially.
*/
public int getInitialStaticSamples() {
return generator.getInitialStaticSamples();
}
/**
* Sets number of input parameters provided to the {@link #getDataSource()}
* to be processed initially while keeping the sensor static to
* find the base noise level when the device is static.
*
* @param initialStaticSamples number of samples ot be processed initially.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than
* {@link TriadStaticIntervalDetector#MINIMUM_INITIAL_STATIC_SAMPLES}.
*/
public void setInitialStaticSamples(final int initialStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInitialStaticSamples(initialStaticSamples);
}
/**
* Gets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @return factor to determine that a sudden movement has occurred.
*/
public double getInstantaneousNoiseLevelFactor() {
return generator.getInstantaneousNoiseLevelFactor();
}
/**
* Sets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @param instantaneousNoiseLevelFactor factor to determine that a sudden
* movement has occurred during
* initialization.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setInstantaneousNoiseLevelFactor(final double instantaneousNoiseLevelFactor) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInstantaneousNoiseLevelFactor(instantaneousNoiseLevelFactor);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public double getBaseNoiseLevelAbsoluteThreshold() {
return generator.getBaseNoiseLevelAbsoluteThreshold();
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final double baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public Acceleration getBaseNoiseLevelAbsoluteThresholdAsMeasurement() {
return generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement();
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getBaseNoiseLevelAbsoluteThresholdAsMeasurement(final Acceleration result) {
generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement(result);
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final Acceleration baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found expressed in
* meters per squared second (m/s^2).
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public double getAccelerometerBaseNoiseLevel() {
return baseNoiseLevel;
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public Acceleration getAccelerometerBaseNoiseLevelAsMeasurement() {
return createMeasurement(baseNoiseLevel, getDefaultUnit());
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getAccelerometerBaseNoiseLevelAsMeasurement(final Acceleration result) {
result.setValue(baseNoiseLevel);
result.setUnit(getDefaultUnit());
}
/**
* Gets accelerometer base noise level PSD (Power Spectral Density)
* expressed in (m^2 * s^-3) of the best solution that has been found.
*
* @return accelerometer base noise level PSD of the best solution that has
* been found.
*/
public double getAccelerometerBaseNoiseLevelPsd() { | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerAndGyroscopeIntervalDetectorThresholdFactorOptimizer.java | 541 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/GyroscopeIntervalDetectorThresholdFactorOptimizer.java | 350 |
&& mseRule != null;
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @return time interval between input measurements.
*/
public double getTimeInterval() {
return generator.getTimeInterval();
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final double timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @return time interval between input measurements.
*/
public Time getTimeIntervalAsTime() {
return generator.getTimeIntervalAsTime();
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param result instance where the time interval will be stored.
*/
public void getTimeIntervalAsTime(final Time result) {
generator.getTimeIntervalAsTime(result);
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final Time timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @return a minimum number of input measurements required in a static interval
* to be taken into account.
*/
public int getMinStaticSamples() {
return generator.getMinStaticSamples();
}
/**
* Sets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @param minStaticSamples a minimum number of input measurements required in
* a static interval to be taken into account.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMinStaticSamples(final int minStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMinStaticSamples(minStaticSamples);
}
/**
* Gets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @return maximum number of input measurements allowed in dynamic intervals.
*/
public int getMaxDynamicSamples() {
return generator.getMaxDynamicSamples();
}
/**
* Sets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @param maxDynamicSamples maximum number of input measurements allowed in
* dynamic intervals.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMaxDynamicSamples(final int maxDynamicSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMaxDynamicSamples(maxDynamicSamples);
}
/**
* Gets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous accelerometer noise level.
*
* @return length of input measurements to keep within the window.
*/
public int getWindowSize() {
return generator.getWindowSize();
}
/**
* Sets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous noise level.
* Window size must always be larger than the allowed minimum value, which is 2
* and must have an odd value.
*
* @param windowSize length of number of samples to keep within the window.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is not valid.
*/
public void setWindowSize(final int windowSize) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setWindowSize(windowSize);
}
/**
* Gets number of input measurements provided to the
* {@link #getDataSource()} to be processed initially while keeping the sensor
* static to find the base noise level when the device is static.
*
* @return number of samples to be processed initially.
*/
public int getInitialStaticSamples() {
return generator.getInitialStaticSamples();
}
/**
* Sets number of input parameters provided to the {@link #getDataSource()}
* to be processed initially while keeping the sensor static to
* find the base noise level when the device is static.
*
* @param initialStaticSamples number of samples ot be processed initially.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than
* {@link TriadStaticIntervalDetector#MINIMUM_INITIAL_STATIC_SAMPLES}.
*/
public void setInitialStaticSamples(final int initialStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInitialStaticSamples(initialStaticSamples);
}
/**
* Gets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @return factor to determine that a sudden movement has occurred.
*/
public double getInstantaneousNoiseLevelFactor() {
return generator.getInstantaneousNoiseLevelFactor();
}
/**
* Sets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @param instantaneousNoiseLevelFactor factor to determine that a sudden
* movement has occurred during
* initialization.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setInstantaneousNoiseLevelFactor(final double instantaneousNoiseLevelFactor) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInstantaneousNoiseLevelFactor(instantaneousNoiseLevelFactor);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public double getBaseNoiseLevelAbsoluteThreshold() {
return generator.getBaseNoiseLevelAbsoluteThreshold();
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final double baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public Acceleration getBaseNoiseLevelAbsoluteThresholdAsMeasurement() {
return generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement();
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getBaseNoiseLevelAbsoluteThresholdAsMeasurement(final Acceleration result) {
generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement(result);
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final Acceleration baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found expressed in
* meters per squared second (m/s^2).
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public double getAccelerometerBaseNoiseLevel() {
return baseNoiseLevel;
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public Acceleration getAccelerometerBaseNoiseLevelAsMeasurement() {
return createMeasurement(baseNoiseLevel, getDefaultUnit());
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getAccelerometerBaseNoiseLevelAsMeasurement(final Acceleration result) {
result.setValue(baseNoiseLevel);
result.setUnit(getDefaultUnit());
}
/**
* Gets gyroscope base noise level PSD (Power Spectral Density)
* expressed in (rad^2/s).
*
* @return gyroscope base noise level PSD.
*/
public double getGyroscopeBaseNoiseLevelPsd() {
return angularSpeedNoiseRootPsd * angularSpeedNoiseRootPsd;
}
/**
* Gets gyroscope base noise level root PSD (Power Spectral Density)
* expressed in (rad * s^-0.5)
*
* @return gyroscope base noise level root PSD.
*/
@Override
public double getGyroscopeBaseNoiseLevelRootPsd() {
return angularSpeedNoiseRootPsd;
}
/**
* Gets accelerometer base noise level PSD (Power Spectral Density)
* expressed in (m^2 * s^-3).
*
* @return accelerometer base noise level PSD.
*/
public double getAccelerometerBaseNoiseLevelPsd() {
return baseNoiseLevel * baseNoiseLevel * getTimeInterval();
}
/**
* Gets accelerometer base noise level root PSD (Power Spectral Density)
* expressed in (m * s^-1.5).
*
* @return accelerometer base noise level root PSD.
*/
@Override
public double getAccelerometerBaseNoiseLevelRootPsd() {
return baseNoiseLevel * Math.sqrt(getTimeInterval());
}
/**
* Gets the threshold to determine static/dynamic period changes expressed in
* meters per squared second (m/s^2) for the best calibration solution that
* has been found.
*
* @return threshold to determine static/dynamic period changes for the best
* solution.
*/
public double getThreshold() {
return threshold;
}
/**
* Gets the threshold to determine static/dynamic period changes for the best
* calibration solution that has been found.
*
* @return threshold to determine static/dynamic period changes for the best
* solution.
*/
public Acceleration getThresholdAsMeasurement() {
return createMeasurement(threshold, getDefaultUnit());
}
/**
* Get the threshold to determine static/dynamic period changes for the best
* calibration solution that has been found.
*
* @param result instance where the result will be stored.
*/
public void getThresholdAsMeasurement(final Acceleration result) {
result.setValue(threshold);
result.setUnit(getDefaultUnit());
} | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerGyroscopeAndMagnetometerIntervalDetectorThresholdFactorOptimizer.java | 694 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/GyroscopeIntervalDetectorThresholdFactorOptimizer.java | 350 |
&& mseRule != null;
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @return time interval between input measurements.
*/
public double getTimeInterval() {
return generator.getTimeInterval();
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final double timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @return time interval between input measurements.
*/
public Time getTimeIntervalAsTime() {
return generator.getTimeIntervalAsTime();
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param result instance where the time interval will be stored.
*/
public void getTimeIntervalAsTime(final Time result) {
generator.getTimeIntervalAsTime(result);
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final Time timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @return a minimum number of input measurements required in a static interval
* to be taken into account.
*/
public int getMinStaticSamples() {
return generator.getMinStaticSamples();
}
/**
* Sets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @param minStaticSamples a minimum number of input measurements required in
* a static interval to be taken into account.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMinStaticSamples(final int minStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMinStaticSamples(minStaticSamples);
}
/**
* Gets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @return maximum number of input measurements allowed in dynamic intervals.
*/
public int getMaxDynamicSamples() {
return generator.getMaxDynamicSamples();
}
/**
* Sets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @param maxDynamicSamples maximum number of input measurements allowed in
* dynamic intervals.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMaxDynamicSamples(final int maxDynamicSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMaxDynamicSamples(maxDynamicSamples);
}
/**
* Gets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous accelerometer noise level.
*
* @return length of input measurements to keep within the window.
*/
public int getWindowSize() {
return generator.getWindowSize();
}
/**
* Sets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous noise level.
* Window size must always be larger than the allowed minimum value, which is 2
* and must have an odd value.
*
* @param windowSize length of number of samples to keep within the window.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is not valid.
*/
public void setWindowSize(final int windowSize) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setWindowSize(windowSize);
}
/**
* Gets number of input measurements provided to the
* {@link #getDataSource()} to be processed initially while keeping the sensor
* static to find the base noise level when the device is static.
*
* @return number of samples to be processed initially.
*/
public int getInitialStaticSamples() {
return generator.getInitialStaticSamples();
}
/**
* Sets number of input parameters provided to the {@link #getDataSource()}
* to be processed initially while keeping the sensor static to
* find the base noise level when the device is static.
*
* @param initialStaticSamples number of samples ot be processed initially.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than
* {@link TriadStaticIntervalDetector#MINIMUM_INITIAL_STATIC_SAMPLES}.
*/
public void setInitialStaticSamples(final int initialStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInitialStaticSamples(initialStaticSamples);
}
/**
* Gets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @return factor to determine that a sudden movement has occurred.
*/
public double getInstantaneousNoiseLevelFactor() {
return generator.getInstantaneousNoiseLevelFactor();
}
/**
* Sets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @param instantaneousNoiseLevelFactor factor to determine that a sudden
* movement has occurred during
* initialization.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setInstantaneousNoiseLevelFactor(final double instantaneousNoiseLevelFactor) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInstantaneousNoiseLevelFactor(instantaneousNoiseLevelFactor);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public double getBaseNoiseLevelAbsoluteThreshold() {
return generator.getBaseNoiseLevelAbsoluteThreshold();
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final double baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public Acceleration getBaseNoiseLevelAbsoluteThresholdAsMeasurement() {
return generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement();
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getBaseNoiseLevelAbsoluteThresholdAsMeasurement(final Acceleration result) {
generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement(result);
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final Acceleration baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found expressed in
* meters per squared second (m/s^2).
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public double getAccelerometerBaseNoiseLevel() {
return baseNoiseLevel;
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public Acceleration getAccelerometerBaseNoiseLevelAsMeasurement() {
return createMeasurement(baseNoiseLevel, getDefaultUnit());
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getAccelerometerBaseNoiseLevelAsMeasurement(final Acceleration result) {
result.setValue(baseNoiseLevel);
result.setUnit(getDefaultUnit());
}
/**
* Gets gyroscope base noise level PSD (Power Spectral Density)
* expressed in (rad^2/s).
*
* @return gyroscope base noise level PSD.
*/
public double getGyroscopeBaseNoiseLevelPsd() {
return angularSpeedNoiseRootPsd * angularSpeedNoiseRootPsd;
}
/**
* Gets gyroscope base noise level root PSD (Power Spectral Density)
* expressed in (rad * s^-0.5)
*
* @return gyroscope base noise level root PSD.
*/
@Override
public double getGyroscopeBaseNoiseLevelRootPsd() {
return angularSpeedNoiseRootPsd;
}
/**
* Gets accelerometer base noise level PSD (Power Spectral Density)
* expressed in (m^2 * s^-3).
*
* @return accelerometer base noise level PSD.
*/
public double getAccelerometerBaseNoiseLevelPsd() {
return baseNoiseLevel * baseNoiseLevel * getTimeInterval();
}
/**
* Gets accelerometer base noise level root PSD (Power Spectral Density)
* expressed in (m * s^-1.5).
*
* @return accelerometer base noise level root PSD.
*/
@Override
public double getAccelerometerBaseNoiseLevelRootPsd() {
return baseNoiseLevel * Math.sqrt(getTimeInterval());
}
/**
* Gets the threshold to determine static/dynamic period changes expressed in
* meters per squared second (m/s^2) for the best calibration solution that
* has been found.
*
* @return threshold to determine static/dynamic period changes for the best
* solution.
*/
public double getThreshold() {
return threshold;
}
/**
* Gets the threshold to determine static/dynamic period changes for the best
* calibration solution that has been found.
*
* @return threshold to determine static/dynamic period changes for the best
* solution.
*/
public Acceleration getThresholdAsMeasurement() {
return createMeasurement(threshold, getDefaultUnit());
}
/**
* Get the threshold to determine static/dynamic period changes for the best
* calibration solution that has been found.
*
* @param result instance where the result will be stored.
*/
public void getThresholdAsMeasurement(final Acceleration result) {
result.setValue(threshold);
result.setUnit(getDefaultUnit());
} | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerAndGyroscopeIntervalDetectorThresholdFactorOptimizer.java | 541 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerIntervalDetectorThresholdFactorOptimizer.java | 332 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/MagnetometerIntervalDetectorThresholdFactorOptimizer.java | 329 |
&& mseRule != null;
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @return time interval between input measurements.
*/
public double getTimeInterval() {
return generator.getTimeInterval();
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final double timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @return time interval between input measurements.
*/
public Time getTimeIntervalAsTime() {
return generator.getTimeIntervalAsTime();
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param result instance where the time interval will be stored.
*/
public void getTimeIntervalAsTime(final Time result) {
generator.getTimeIntervalAsTime(result);
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final Time timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @return a minimum number of input measurements required in a static interval
* to be taken into account.
*/
public int getMinStaticSamples() {
return generator.getMinStaticSamples();
}
/**
* Sets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @param minStaticSamples a minimum number of input measurements required in
* a static interval to be taken into account.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMinStaticSamples(final int minStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMinStaticSamples(minStaticSamples);
}
/**
* Gets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @return maximum number of input measurements allowed in dynamic intervals.
*/
public int getMaxDynamicSamples() {
return generator.getMaxDynamicSamples();
}
/**
* Sets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @param maxDynamicSamples maximum number of input measurements allowed in
* dynamic intervals.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMaxDynamicSamples(final int maxDynamicSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMaxDynamicSamples(maxDynamicSamples);
}
/**
* Gets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous accelerometer noise level.
*
* @return length of input measurements to keep within the window.
*/
public int getWindowSize() {
return generator.getWindowSize();
}
/**
* Sets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous noise level.
* Window size must always be larger than the allowed minimum value, which is 2
* and must have an odd value.
*
* @param windowSize length of number of samples to keep within the window.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is not valid.
*/
public void setWindowSize(final int windowSize) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setWindowSize(windowSize);
}
/**
* Gets number of input measurements provided to the
* {@link #getDataSource()} to be processed initially while keeping the sensor
* static to find the base noise level when the device is static.
*
* @return number of samples to be processed initially.
*/
public int getInitialStaticSamples() {
return generator.getInitialStaticSamples();
}
/**
* Sets number of input parameters provided to the {@link #getDataSource()}
* to be processed initially while keeping the sensor static to
* find the base noise level when the device is static.
*
* @param initialStaticSamples number of samples ot be processed initially.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than
* {@link TriadStaticIntervalDetector#MINIMUM_INITIAL_STATIC_SAMPLES}.
*/
public void setInitialStaticSamples(final int initialStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInitialStaticSamples(initialStaticSamples);
}
/**
* Gets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @return factor to determine that a sudden movement has occurred.
*/
public double getInstantaneousNoiseLevelFactor() {
return generator.getInstantaneousNoiseLevelFactor();
}
/**
* Sets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @param instantaneousNoiseLevelFactor factor to determine that a sudden
* movement has occurred during
* initialization.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setInstantaneousNoiseLevelFactor(final double instantaneousNoiseLevelFactor) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInstantaneousNoiseLevelFactor(instantaneousNoiseLevelFactor);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public double getBaseNoiseLevelAbsoluteThreshold() {
return generator.getBaseNoiseLevelAbsoluteThreshold();
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final double baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public Acceleration getBaseNoiseLevelAbsoluteThresholdAsMeasurement() {
return generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement();
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getBaseNoiseLevelAbsoluteThresholdAsMeasurement(final Acceleration result) {
generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement(result);
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final Acceleration baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found expressed in
* meters per squared second (m/s^2).
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public double getAccelerometerBaseNoiseLevel() {
return baseNoiseLevel;
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public Acceleration getAccelerometerBaseNoiseLevelAsMeasurement() {
return createMeasurement(baseNoiseLevel, getDefaultUnit());
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getAccelerometerBaseNoiseLevelAsMeasurement(final Acceleration result) {
result.setValue(baseNoiseLevel);
result.setUnit(getDefaultUnit());
}
/**
* Gets gyroscope base noise level PSD (Power Spectral Density)
* expressed in (rad^2/s).
*
* @return gyroscope base noise level PSD.
*/
public double getGyroscopeBaseNoiseLevelPsd() { | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerGyroscopeAndMagnetometerIntervalDetectorThresholdFactorOptimizer.java | 694 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerIntervalDetectorThresholdFactorOptimizer.java | 332 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/MagnetometerIntervalDetectorThresholdFactorOptimizer.java | 329 |
&& mseRule != null;
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @return time interval between input measurements.
*/
public double getTimeInterval() {
return generator.getTimeInterval();
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()} expressed in seconds (s).
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final double timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @return time interval between input measurements.
*/
public Time getTimeIntervalAsTime() {
return generator.getTimeIntervalAsTime();
}
/**
* Gets the time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param result instance where the time interval will be stored.
*/
public void getTimeIntervalAsTime(final Time result) {
generator.getTimeIntervalAsTime(result);
}
/**
* Sets time interval between input measurements provided to the
* {@link #getDataSource()}.
*
* @param timeInterval time interval between input measurements.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is negative.
*/
public void setTimeInterval(final Time timeInterval) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setTimeInterval(timeInterval);
}
/**
* Gets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @return a minimum number of input measurements required in a static interval
* to be taken into account.
*/
public int getMinStaticSamples() {
return generator.getMinStaticSamples();
}
/**
* Sets minimum number of input measurements provided to the
* {@link #getDataSource()} required in a static interval to be taken
* into account.
* Smaller static intervals will be discarded.
*
* @param minStaticSamples a minimum number of input measurements required in
* a static interval to be taken into account.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMinStaticSamples(final int minStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMinStaticSamples(minStaticSamples);
}
/**
* Gets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @return maximum number of input measurements allowed in dynamic intervals.
*/
public int getMaxDynamicSamples() {
return generator.getMaxDynamicSamples();
}
/**
* Sets maximum number of input measurements provided to the
* {@link #getDataSource()} allowed in dynamic intervals.
*
* @param maxDynamicSamples maximum number of input measurements allowed in
* dynamic intervals.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than 2.
*/
public void setMaxDynamicSamples(final int maxDynamicSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setMaxDynamicSamples(maxDynamicSamples);
}
/**
* Gets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous accelerometer noise level.
*
* @return length of input measurements to keep within the window.
*/
public int getWindowSize() {
return generator.getWindowSize();
}
/**
* Sets length of number of input measurements provided to the
* {@link #getDataSource()} to keep within the window being processed
* to determine instantaneous noise level.
* Window size must always be larger than the allowed minimum value, which is 2
* and must have an odd value.
*
* @param windowSize length of number of samples to keep within the window.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is not valid.
*/
public void setWindowSize(final int windowSize) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setWindowSize(windowSize);
}
/**
* Gets number of input measurements provided to the
* {@link #getDataSource()} to be processed initially while keeping the sensor
* static to find the base noise level when the device is static.
*
* @return number of samples to be processed initially.
*/
public int getInitialStaticSamples() {
return generator.getInitialStaticSamples();
}
/**
* Sets number of input parameters provided to the {@link #getDataSource()}
* to be processed initially while keeping the sensor static to
* find the base noise level when the device is static.
*
* @param initialStaticSamples number of samples ot be processed initially.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is less than
* {@link TriadStaticIntervalDetector#MINIMUM_INITIAL_STATIC_SAMPLES}.
*/
public void setInitialStaticSamples(final int initialStaticSamples) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInitialStaticSamples(initialStaticSamples);
}
/**
* Gets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @return factor to determine that a sudden movement has occurred.
*/
public double getInstantaneousNoiseLevelFactor() {
return generator.getInstantaneousNoiseLevelFactor();
}
/**
* Sets factor to determine that a sudden movement has occurred during
* initialization if instantaneous noise level exceeds accumulated noise
* level by this factor amount.
* This factor is unit-less.
*
* @param instantaneousNoiseLevelFactor factor to determine that a sudden
* movement has occurred during
* initialization.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setInstantaneousNoiseLevelFactor(final double instantaneousNoiseLevelFactor) throws LockedException {
if (running) {
throw new LockedException();
}
generator.setInstantaneousNoiseLevelFactor(instantaneousNoiseLevelFactor);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public double getBaseNoiseLevelAbsoluteThreshold() {
return generator.getBaseNoiseLevelAbsoluteThreshold();
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
* This threshold is expressed in meters per squared second (m/s^2).
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final double baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @return overall absolute threshold to determine whether there has been
* excessive motion.
*/
public Acceleration getBaseNoiseLevelAbsoluteThresholdAsMeasurement() {
return generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement();
}
/**
* Gets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getBaseNoiseLevelAbsoluteThresholdAsMeasurement(final Acceleration result) {
generator.getBaseNoiseLevelAbsoluteThresholdAsMeasurement(result);
}
/**
* Sets the overall absolute threshold to determine whether there has been
* excessive motion during the whole initialization phase.
*
* @param baseNoiseLevelAbsoluteThreshold overall absolute threshold to
* determine whether there has been
* excessive motion.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setBaseNoiseLevelAbsoluteThreshold(final Acceleration baseNoiseLevelAbsoluteThreshold)
throws LockedException {
if (running) {
throw new LockedException();
}
generator.setBaseNoiseLevelAbsoluteThreshold(baseNoiseLevelAbsoluteThreshold);
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found expressed in
* meters per squared second (m/s^2).
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public double getAccelerometerBaseNoiseLevel() {
return baseNoiseLevel;
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @return accelerometer base noise level of the best solution that has been
* found.
*/
public Acceleration getAccelerometerBaseNoiseLevelAsMeasurement() {
return createMeasurement(baseNoiseLevel, getDefaultUnit());
}
/**
* Gets accelerometer base noise level that has been detected during
* initialization of the best solution that has been found.
* This is equal to the standard deviation of the accelerometer measurements
* during the initialization phase.
*
* @param result instance where the result will be stored.
*/
public void getAccelerometerBaseNoiseLevelAsMeasurement(final Acceleration result) {
result.setValue(baseNoiseLevel);
result.setUnit(getDefaultUnit());
}
/**
* Gets gyroscope base noise level PSD (Power Spectral Density)
* expressed in (rad^2/s).
*
* @return gyroscope base noise level PSD.
*/
public double getGyroscopeBaseNoiseLevelPsd() { | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/BracketedAccelerometerIntervalDetectorThresholdFactorOptimizer.java | 198 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/BracketedGyroscopeIntervalDetectorThresholdFactorOptimizer.java | 195 |
final AccelerometerNonLinearCalibrator calibrator,
final BracketedSingleOptimizer mseOptimizer) {
super(dataSource, calibrator);
initializeOptimizerListeners();
try {
setMseOptimizer(mseOptimizer);
} catch (final LockedException ignore) {
// never happens
}
}
/**
* Gets the bracketed single optimizer used to find the threshold factor value
* that minimizes the Mean Square Error (MSE) for calibration parameters.
*
* @return optimizer to find the threshold factor value that minimizes the
* MSE for calibration parameters.
*/
public BracketedSingleOptimizer getMseOptimizer() {
return mseOptimizer;
}
/**
* Sets the bracketed single optimizer used to find the threshold factor value
* that minimizes the Mean Square Error (MSE) for calibration parameters.
*
* @param optimizer optimizer to find the threshold factor value that minimizes
* the MSE for calibration parameters.
* @throws LockedException if optimizer is already running.
*/
public void setMseOptimizer(final BracketedSingleOptimizer optimizer) throws LockedException {
if (running) {
throw new LockedException();
}
try {
if (optimizer != null) {
optimizer.setBracket(minThresholdFactor, minThresholdFactor, maxThresholdFactor);
optimizer.setListener(optimizerListener);
optimizer.setOnIterationCompletedListener(iterationCompletedListener);
}
mseOptimizer = optimizer;
} catch (final com.irurueta.numerical.LockedException e) {
throw new LockedException(e);
} catch (final InvalidBracketRangeException ignore) {
// never happens
}
}
/**
* Indicates whether this optimizer is ready to start optimization.
*
* @return true if this optimizer is ready, false otherwise.
*/
@Override
public boolean isReady() {
return super.isReady() && mseOptimizer != null;
}
/**
* Optimizes the threshold factor for a static interval detector or measurement
* generator to minimize MSE (Minimum Squared Error) of estimated
* calibration parameters.
*
* @return optimized threshold factor.
* @throws NotReadyException if this optimizer is not ready to start optimization.
* @throws LockedException if optimizer is already running.
* @throws IntervalDetectorThresholdFactorOptimizerException if optimization fails for
* some reason.
*/
@Override
public double optimize() throws NotReadyException, LockedException,
IntervalDetectorThresholdFactorOptimizerException {
if (running) {
throw new LockedException();
}
if (!isReady()) {
throw new NotReadyException();
}
try {
running = true;
initProgress();
if (listener != null) {
listener.onOptimizeStart(this);
}
minMse = Double.MAX_VALUE;
mseOptimizer.minimize();
if (listener != null) {
listener.onOptimizeEnd(this);
}
return optimalThresholdFactor;
} catch (final NumericalException e) {
throw new IntervalDetectorThresholdFactorOptimizerException(e);
} finally {
running = false;
}
}
/**
* Initializes optimizer listener.
*/
private void initializeOptimizerListeners() {
optimizerListener = point -> {
try {
return evaluateForThresholdFactor(point);
} catch (final NavigationException e) {
throw new EvaluationException(e);
}
};
iterationCompletedListener = (optimizer, iteration, maxIterations) -> {
if (maxIterations == null) {
return;
}
progress = (float) iteration / (float) maxIterations;
checkAndNotifyProgress();
};
}
} | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/BracketedAccelerometerAndGyroscopeIntervalDetectorThresholdFactorOptimizer.java | 235 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/BracketedAccelerometerGyroscopeAndMagnetometerIntervalDetectorThresholdFactorOptimizer.java | 259 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/BracketedAccelerometerIntervalDetectorThresholdFactorOptimizer.java | 200 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/BracketedGyroscopeIntervalDetectorThresholdFactorOptimizer.java | 197 |
super(dataSource, accelerometerCalibrator, gyroscopeCalibrator);
initializeOptimizerListeners();
try {
setMseOptimizer(mseOptimizer);
} catch (final LockedException ignore) {
// never happens
}
}
/**
* Gets the bracketed single optimizer used to find the threshold factor value
* that minimizes the Mean Square Error (MSE) for calibration parameters.
*
* @return optimizer to find the threshold factor value that minimizes the
* MSE for calibration parameters.
*/
public BracketedSingleOptimizer getMseOptimizer() {
return mseOptimizer;
}
/**
* Sets the bracketed single optimizer used to find the threshold factor value
* that minimizes the Mean Square Error (MSE) for calibration parameters.
*
* @param optimizer optimizer to find the threshold factor value that minimizes
* the MSE for calibration parameters.
* @throws LockedException if optimizer is already running.
*/
public void setMseOptimizer(final BracketedSingleOptimizer optimizer)
throws LockedException {
if (running) {
throw new LockedException();
}
try {
if (optimizer != null) {
optimizer.setBracket(minThresholdFactor, minThresholdFactor, maxThresholdFactor);
optimizer.setListener(optimizerListener);
optimizer.setOnIterationCompletedListener(iterationCompletedListener);
}
mseOptimizer = optimizer;
} catch (final com.irurueta.numerical.LockedException e) {
throw new LockedException(e);
} catch (final InvalidBracketRangeException ignore) {
// never happens
}
}
/**
* Indicates whether this optimizer is ready to start optimization.
*
* @return true if this optimizer is ready, false otherwise.
*/
@Override
public boolean isReady() {
return super.isReady() && mseOptimizer != null;
}
/**
* Optimizes the threshold factor for a static interval detector or measurement
* generator to minimize MSE (Minimum Squared Error) of estimated
* calibration parameters.
*
* @return optimized threshold factor.
* @throws NotReadyException if this optimizer is not ready to start optimization.
* @throws LockedException if optimizer is already running.
* @throws IntervalDetectorThresholdFactorOptimizerException if optimization fails for
* some reason.
*/
@Override
public double optimize() throws NotReadyException, LockedException,
IntervalDetectorThresholdFactorOptimizerException {
if (running) {
throw new LockedException();
}
if (!isReady()) {
throw new NotReadyException();
}
try {
running = true;
initProgress();
if (listener != null) {
listener.onOptimizeStart(this);
}
minMse = Double.MAX_VALUE;
mseOptimizer.minimize();
if (listener != null) {
listener.onOptimizeEnd(this);
}
return optimalThresholdFactor;
} catch (final NumericalException e) {
throw new IntervalDetectorThresholdFactorOptimizerException(e);
} finally {
running = false;
}
}
/**
* Initializes optimizer listeners.
*/
private void initializeOptimizerListeners() {
optimizerListener = point -> {
try {
return evaluateForThresholdFactor(point);
} catch (final NavigationException e) {
throw new EvaluationException(e);
}
};
iterationCompletedListener = (optimizer, iteration, maxIterations) -> {
if (maxIterations == null) {
return;
}
progress = (float) iteration / (float) maxIterations;
checkAndNotifyProgress();
};
}
} | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/BracketedAccelerometerIntervalDetectorThresholdFactorOptimizer.java | 198 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/BracketedMagnetometerIntervalDetectorThresholdFactorOptimizer.java | 198 |
final AccelerometerNonLinearCalibrator calibrator,
final BracketedSingleOptimizer mseOptimizer) {
super(dataSource, calibrator);
initializeOptimizerListeners();
try {
setMseOptimizer(mseOptimizer);
} catch (final LockedException ignore) {
// never happens
}
}
/**
* Gets the bracketed single optimizer used to find the threshold factor value
* that minimizes the Mean Square Error (MSE) for calibration parameters.
*
* @return optimizer to find the threshold factor value that minimizes the
* MSE for calibration parameters.
*/
public BracketedSingleOptimizer getMseOptimizer() {
return mseOptimizer;
}
/**
* Sets the bracketed single optimizer used to find the threshold factor value
* that minimizes the Mean Square Error (MSE) for calibration parameters.
*
* @param optimizer optimizer to find the threshold factor value that minimizes
* the MSE for calibration parameters.
* @throws LockedException if optimizer is already running.
*/
public void setMseOptimizer(final BracketedSingleOptimizer optimizer) throws LockedException {
if (running) {
throw new LockedException();
}
try {
if (optimizer != null) {
optimizer.setBracket(minThresholdFactor, minThresholdFactor, maxThresholdFactor);
optimizer.setListener(optimizerListener);
optimizer.setOnIterationCompletedListener(iterationCompletedListener);
}
mseOptimizer = optimizer;
} catch (final com.irurueta.numerical.LockedException e) {
throw new LockedException(e);
} catch (final InvalidBracketRangeException ignore) {
// never happens
}
}
/**
* Indicates whether this optimizer is ready to start optimization.
*
* @return true if this optimizer is ready, false otherwise.
*/
@Override
public boolean isReady() {
return super.isReady() && mseOptimizer != null;
}
/**
* Optimizes the threshold factor for a static interval detector or measurement
* generator to minimize MSE (Minimum Squared Error) of estimated
* calibration parameters.
*
* @return optimized threshold factor.
* @throws NotReadyException if this optimizer is not ready to start optimization.
* @throws LockedException if optimizer is already running.
* @throws IntervalDetectorThresholdFactorOptimizerException if optimization fails for
* some reason.
*/
@Override
public double optimize() throws NotReadyException, LockedException,
IntervalDetectorThresholdFactorOptimizerException {
if (running) {
throw new LockedException();
}
if (!isReady()) {
throw new NotReadyException();
}
try {
running = true;
initProgress();
if (listener != null) {
listener.onOptimizeStart(this);
}
minMse = Double.MAX_VALUE;
mseOptimizer.minimize();
if (listener != null) {
listener.onOptimizeEnd(this);
}
return optimalThresholdFactor;
} catch (final NumericalException e) {
throw new IntervalDetectorThresholdFactorOptimizerException(e);
} finally {
running = false;
}
}
/**
* Initializes optimizer listener.
*/
private void initializeOptimizerListeners() {
optimizerListener = point -> {
try {
return evaluateForThresholdFactor(point);
} catch (final NavigationException e) { | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerAndGyroscopeIntervalDetectorThresholdFactorOptimizer.java | 1363 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerGyroscopeAndMagnetometerIntervalDetectorThresholdFactorOptimizer.java | 1627 |
generator = new AccelerometerAndGyroscopeMeasurementsGenerator(generatorListener);
}
/**
* Keeps the best calibration solution found so far.
*
* @param mse Estimated Mean Square Error during calibration.
* @param thresholdFactor threshold factor to be kept.
*/
private void keepBestResult(final double mse, final double thresholdFactor) {
minMse = mse;
optimalThresholdFactor = thresholdFactor;
angularSpeedNoiseRootPsd = generator.getGyroscopeBaseNoiseLevelRootPsd();
baseNoiseLevel = generator.getAccelerometerBaseNoiseLevel();
threshold = generator.getThreshold();
if (estimatedAccelerometerCovariance == null) {
estimatedAccelerometerCovariance = new Matrix(accelerometerCalibrator.getEstimatedCovariance());
} else {
estimatedAccelerometerCovariance.copyFrom(accelerometerCalibrator.getEstimatedCovariance());
}
if (estimatedAccelerometerMa == null) {
estimatedAccelerometerMa = new Matrix(accelerometerCalibrator.getEstimatedMa());
} else {
estimatedAccelerometerMa.copyFrom(accelerometerCalibrator.getEstimatedMa());
}
if (accelerometerCalibrator instanceof UnknownBiasAccelerometerCalibrator unknownBiasAccelerometerCalibrator) {
estimatedAccelerometerBiases = unknownBiasAccelerometerCalibrator.getEstimatedBiases();
} else if (accelerometerCalibrator instanceof
KnownBiasAccelerometerCalibrator knownBiasAccelerometerCalibrator) {
estimatedAccelerometerBiases = knownBiasAccelerometerCalibrator.getBias();
}
if (estimatedGyroscopeCovariance == null) {
estimatedGyroscopeCovariance = new Matrix(gyroscopeCalibrator.getEstimatedCovariance());
} else {
estimatedGyroscopeCovariance.copyFrom(gyroscopeCalibrator.getEstimatedCovariance());
}
if (estimatedGyroscopeMg == null) {
estimatedGyroscopeMg = new Matrix(gyroscopeCalibrator.getEstimatedMg());
} else {
estimatedGyroscopeMg.copyFrom(gyroscopeCalibrator.getEstimatedMg());
}
if (estimatedGyroscopeGg == null) {
estimatedGyroscopeGg = new Matrix(gyroscopeCalibrator.getEstimatedGg());
} else {
estimatedGyroscopeGg.copyFrom(gyroscopeCalibrator.getEstimatedGg());
}
if (gyroscopeCalibrator instanceof UnknownBiasGyroscopeCalibrator unknownBiasGyroscopeCalibrator) {
estimatedGyroscopeBiases = unknownBiasGyroscopeCalibrator.getEstimatedBiases();
} else if (gyroscopeCalibrator instanceof KnownBiasAccelerometerCalibrator knownBiasAccelerometerCalibrator) {
estimatedGyroscopeBiases = knownBiasAccelerometerCalibrator.getBias();
} | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/BracketedAccelerometerAndGyroscopeIntervalDetectorThresholdFactorOptimizer.java | 235 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/BracketedMagnetometerIntervalDetectorThresholdFactorOptimizer.java | 200 |
super(dataSource, accelerometerCalibrator, gyroscopeCalibrator);
initializeOptimizerListeners();
try {
setMseOptimizer(mseOptimizer);
} catch (final LockedException ignore) {
// never happens
}
}
/**
* Gets the bracketed single optimizer used to find the threshold factor value
* that minimizes the Mean Square Error (MSE) for calibration parameters.
*
* @return optimizer to find the threshold factor value that minimizes the
* MSE for calibration parameters.
*/
public BracketedSingleOptimizer getMseOptimizer() {
return mseOptimizer;
}
/**
* Sets the bracketed single optimizer used to find the threshold factor value
* that minimizes the Mean Square Error (MSE) for calibration parameters.
*
* @param optimizer optimizer to find the threshold factor value that minimizes
* the MSE for calibration parameters.
* @throws LockedException if optimizer is already running.
*/
public void setMseOptimizer(final BracketedSingleOptimizer optimizer)
throws LockedException {
if (running) {
throw new LockedException();
}
try {
if (optimizer != null) {
optimizer.setBracket(minThresholdFactor, minThresholdFactor, maxThresholdFactor);
optimizer.setListener(optimizerListener);
optimizer.setOnIterationCompletedListener(iterationCompletedListener);
}
mseOptimizer = optimizer;
} catch (final com.irurueta.numerical.LockedException e) {
throw new LockedException(e);
} catch (final InvalidBracketRangeException ignore) {
// never happens
}
}
/**
* Indicates whether this optimizer is ready to start optimization.
*
* @return true if this optimizer is ready, false otherwise.
*/
@Override
public boolean isReady() {
return super.isReady() && mseOptimizer != null;
}
/**
* Optimizes the threshold factor for a static interval detector or measurement
* generator to minimize MSE (Minimum Squared Error) of estimated
* calibration parameters.
*
* @return optimized threshold factor.
* @throws NotReadyException if this optimizer is not ready to start optimization.
* @throws LockedException if optimizer is already running.
* @throws IntervalDetectorThresholdFactorOptimizerException if optimization fails for
* some reason.
*/
@Override
public double optimize() throws NotReadyException, LockedException,
IntervalDetectorThresholdFactorOptimizerException {
if (running) {
throw new LockedException();
}
if (!isReady()) {
throw new NotReadyException();
}
try {
running = true;
initProgress();
if (listener != null) {
listener.onOptimizeStart(this);
}
minMse = Double.MAX_VALUE;
mseOptimizer.minimize();
if (listener != null) {
listener.onOptimizeEnd(this);
}
return optimalThresholdFactor;
} catch (final NumericalException e) {
throw new IntervalDetectorThresholdFactorOptimizerException(e);
} finally {
running = false;
}
}
/**
* Initializes optimizer listeners.
*/
private void initializeOptimizerListeners() {
optimizerListener = point -> {
try {
return evaluateForThresholdFactor(point);
} catch (final NavigationException e) { | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/ExhaustiveAccelerometerIntervalDetectorThresholdFactorOptimizer.java | 89 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/ExhaustiveGyroscopeIntervalDetectorThresholdFactorOptimizer.java | 88 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/ExhaustiveMagnetometerIntervalDetectorThresholdFactorOptimizer.java | 89 |
final AccelerometerNonLinearCalibrator calibrator) {
super(dataSource, calibrator);
}
/**
* Gets the step to make exhaustive search of threshold values between
* {@link #getMaxThresholdFactor()} and {@link #getMaxThresholdFactor()}.
*
* @return step to make exhaustive search of threshold values.
*/
public double getThresholdFactorStep() {
return thresholdFactorStep;
}
/**
* Sets step to make exhaustive search of threshold values between
* {@link #getMaxThresholdFactor()} and {@link #getMaxThresholdFactor()}.
*
* @param thresholdStep step to make exhaustive search of threshold values.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setThresholdFactorStep(final double thresholdStep) throws LockedException {
if (running) {
throw new LockedException();
}
if (thresholdStep <= 0.0) {
throw new IllegalArgumentException();
}
thresholdFactorStep = thresholdStep;
}
/**
* Optimizes the threshold factor for a static interval detector or measurement
* generator to minimize MSE (Minimum Squared Error) of estimated
* calibration parameters.
*
* @return optimized threshold factor.
* @throws NotReadyException if this optimizer is not ready to start optimization.
* @throws LockedException if optimizer is already running.
* @throws IntervalDetectorThresholdFactorOptimizerException if optimization fails for
* some reason.
*/
@Override
public double optimize() throws NotReadyException, LockedException,
IntervalDetectorThresholdFactorOptimizerException {
if (running) {
throw new LockedException();
}
if (!isReady()) {
throw new NotReadyException();
}
var hasResult = false;
minMse = Double.MAX_VALUE;
try {
running = true;
initProgress();
final var progressStep = (float) (thresholdFactorStep
/ (thresholdFactorStep + maxThresholdFactor - minThresholdFactor));
if (listener != null) {
listener.onOptimizeStart(this);
}
for (var thresholdFactor = minThresholdFactor;
thresholdFactor <= maxThresholdFactor;
thresholdFactor += thresholdFactorStep) {
try {
evaluateForThresholdFactor(thresholdFactor);
hasResult = true;
} catch (final Exception ignore) {
// when an error occurs, skip to the next iteration
}
progress += progressStep;
checkAndNotifyProgress();
}
if (!hasResult) {
throw new IntervalDetectorThresholdFactorOptimizerException();
}
if (listener != null) {
listener.onOptimizeEnd(this);
}
} finally {
running = false;
}
return optimalThresholdFactor;
}
} | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/ExhaustiveAccelerometerAndGyroscopeIntervalDetectorThresholdFactorOptimizer.java | 110 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/ExhaustiveAccelerometerGyroscopeAndMagnetometerIntervalDetectorThresholdFactorOptimizer.java | 125 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/ExhaustiveAccelerometerIntervalDetectorThresholdFactorOptimizer.java | 90 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/ExhaustiveGyroscopeIntervalDetectorThresholdFactorOptimizer.java | 89 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/ExhaustiveMagnetometerIntervalDetectorThresholdFactorOptimizer.java | 90 |
super(dataSource, accelerometerCalibrator, gyroscopeCalibrator);
}
/**
* Gets the step to make exhaustive search of threshold values between
* {@link #getMaxThresholdFactor()} and {@link #getMaxThresholdFactor()}.
*
* @return step to make exhaustive search of threshold values.
*/
public double getThresholdFactorStep() {
return thresholdFactorStep;
}
/**
* Sets step to make exhaustive search of threshold values between
* {@link #getMaxThresholdFactor()} and {@link #getMaxThresholdFactor()}.
*
* @param thresholdStep step to make exhaustive search of threshold values.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if provided value is zero or negative.
*/
public void setThresholdFactorStep(final double thresholdStep) throws LockedException {
if (running) {
throw new LockedException();
}
if (thresholdStep <= 0.0) {
throw new IllegalArgumentException();
}
thresholdFactorStep = thresholdStep;
}
/**
* Optimizes the threshold factor for a static interval detector or measurement
* generator to minimize MSE (Minimum Squared Error) of estimated
* calibration parameters.
*
* @return optimized threshold factor.
* @throws NotReadyException if this optimizer is not ready to start optimization.
* @throws LockedException if optimizer is already running.
* @throws IntervalDetectorThresholdFactorOptimizerException if optimization fails for
* some reason.
*/
@Override
public double optimize() throws NotReadyException, LockedException,
IntervalDetectorThresholdFactorOptimizerException {
if (running) {
throw new LockedException();
}
if (!isReady()) {
throw new NotReadyException();
}
var hasResult = false;
minMse = Double.MAX_VALUE;
try {
running = true;
initProgress();
final var progressStep = (float) (thresholdFactorStep
/ (thresholdFactorStep + maxThresholdFactor - minThresholdFactor));
if (listener != null) {
listener.onOptimizeStart(this);
}
for (var thresholdFactor = minThresholdFactor;
thresholdFactor <= maxThresholdFactor;
thresholdFactor += thresholdFactorStep) {
try {
evaluateForThresholdFactor(thresholdFactor);
hasResult = true;
} catch (final Exception ignore) {
// when an error occurs, skip to the next iteration
}
progress += progressStep;
checkAndNotifyProgress();
}
if (!hasResult) {
throw new IntervalDetectorThresholdFactorOptimizerException();
}
if (listener != null) {
listener.onOptimizeEnd(this);
}
} finally {
running = false;
}
return optimalThresholdFactor;
}
} | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerIntervalDetectorThresholdFactorOptimizer.java | 815 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/MagnetometerIntervalDetectorThresholdFactorOptimizer.java | 770 |
}
/**
* Evaluates calibration Mean Square Error (MSE) for the provided threshold factor.
*
* @param thresholdFactor threshold factor to be used for interval detection
* and measurement generation to be used for
* calibration.
* @return calibration MSE.
* @throws LockedException if the generator is busy.
* @throws CalibrationException if calibration fails.
* @throws NotReadyException if the calibrator is not ready.
* @throws IntervalDetectorThresholdFactorOptimizerException interval detection failed.
*/
protected double evaluateForThresholdFactor(final double thresholdFactor) throws LockedException,
CalibrationException, NotReadyException, IntervalDetectorThresholdFactorOptimizerException {
if (measurements == null) {
measurements = new ArrayList<>();
} else {
measurements.clear();
}
generator.reset();
generator.setThresholdFactor(thresholdFactor);
var count = dataSource.count();
var failed = false;
for (var i = 0; i < count; i++) {
final var bodyKinematics = dataSource.getAt(i);
if (!generator.process(bodyKinematics)) {
failed = true;
break;
}
}
if (failed || generator.getStatus() == TriadStaticIntervalDetector.Status.FAILED) {
// interval detection failed
return Double.MAX_VALUE;
}
// check that enough measurements have been obtained
if (measurements.size() < calibrator.getMinimumRequiredMeasurements()) {
return Double.MAX_VALUE;
}
// set calibrator measurements
switch (calibrator.getMeasurementType()) {
case STANDARD_DEVIATION_BODY_KINEMATICS: | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerAndGyroscopeIntervalDetectorThresholdFactorOptimizer.java | 334 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerGyroscopeAndMagnetometerIntervalDetectorThresholdFactorOptimizer.java | 426 |
setGyroscopeCalibrator(gyroscopeCalibrator);
} catch (final LockedException ignore) {
// never happens
}
initialize();
}
/**
* Gets provided accelerometer calibrator to be used to optimize its Mean Square Error (MSE).
*
* @return accelerometer calibrator to be used to optimize its MSE.
*/
public AccelerometerNonLinearCalibrator getAccelerometerCalibrator() {
return accelerometerCalibrator;
}
/**
* Sets accelerometer calibrator to be used to optimize its Mean Square Error (MSE).
*
* @param accelerometerCalibrator accelerometer calibrator to be used to optimize its MSE.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if accelerometer calibrator does not use
* {@link StandardDeviationBodyKinematics} measurements.
*/
public void setAccelerometerCalibrator(
final AccelerometerNonLinearCalibrator accelerometerCalibrator) throws LockedException {
if (running) {
throw new LockedException();
}
if (accelerometerCalibrator != null && accelerometerCalibrator.getMeasurementType()
!= AccelerometerCalibratorMeasurementType.STANDARD_DEVIATION_BODY_KINEMATICS) {
throw new IllegalArgumentException();
}
this.accelerometerCalibrator = accelerometerCalibrator;
}
/**
* Gets provided gyroscope calibrator to be used to optimize its Mean Square Error (MSE).
*
* @return gyroscope calibrator to be used to optimize its MSE.
*/
public GyroscopeNonLinearCalibrator getGyroscopeCalibrator() {
return gyroscopeCalibrator;
}
/**
* Sets gyroscope calibrator to be used to optimize its Mean Square Error (MSE).
*
* @param gyroscopeCalibrator gyroscope calibrator to be use dto optimize its MSE.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if gyroscope calibrator does not use
* {@link BodyKinematicsSequence} sequences of
* {@link StandardDeviationTimedBodyKinematics}.
*/
public void setGyroscopeCalibrator(
final GyroscopeNonLinearCalibrator gyroscopeCalibrator) throws LockedException {
if (running) {
throw new LockedException();
}
if (gyroscopeCalibrator != null && gyroscopeCalibrator.getMeasurementOrSequenceType()
!= GyroscopeCalibratorMeasurementOrSequenceType.BODY_KINEMATICS_SEQUENCE) {
throw new IllegalArgumentException();
}
this.gyroscopeCalibrator = gyroscopeCalibrator;
}
/**
* Gets mapper to convert {@link StandardDeviationBodyKinematics} accelerometer measurements
* into quality scores.
*
* @return mapper to convert accelerometer measurements into quality scores.
*/
public QualityScoreMapper<StandardDeviationBodyKinematics> getAccelerometerQualityScoreMapper() { | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerAndGyroscopeIntervalDetectorThresholdFactorOptimizer.java | 481 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerGyroscopeAndMagnetometerIntervalDetectorThresholdFactorOptimizer.java | 631 |
public void setMseRule(final AccelerometerAndGyroscopeMseRule mseRule) throws LockedException {
if (running) {
throw new LockedException();
}
this.mseRule = mseRule;
}
/**
* Gets the minimum threshold factor.
*
* @return minimum threshold factor.
*/
public double getMinThresholdFactor() {
return minThresholdFactor;
}
/**
* Gets the maximum threshold factor.
*
* @return maximum threshold factor.
*/
public double getMaxThresholdFactor() {
return maxThresholdFactor;
}
/**
* Sets a range of threshold factor values to get an optimized threshold factor value.
*
* @param minThresholdFactor minimum threshold.
* @param maxThresholdFactor maximum threshold.
* @throws LockedException if optimizer is already running.
* @throws IllegalArgumentException if either minimum or maximum values are
* negative, or if the minimum value is larger
* than the maximum one.
*/
public void setThresholdFactorRange(final double minThresholdFactor, final double maxThresholdFactor)
throws LockedException {
if (running) {
throw new LockedException();
}
if (minThresholdFactor < 0.0 || maxThresholdFactor < 0.0 || minThresholdFactor >= maxThresholdFactor) {
throw new IllegalArgumentException();
}
this.minThresholdFactor = minThresholdFactor;
this.maxThresholdFactor = maxThresholdFactor;
}
/**
* Indicates whether this optimizer is ready to start optimization.
*
* @return true if this optimizer is ready, false otherwise.
*/
@Override
public boolean isReady() {
return super.isReady() && accelerometerCalibrator != null
&& gyroscopeCalibrator != null
&& accelerometerQualityScoreMapper != null | |
| File | Line |
|---|---|
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/AccelerometerIntervalDetectorThresholdFactorOptimizer.java | 657 |
| com/irurueta/navigation/inertial/calibration/intervals/thresholdfactor/GyroscopeIntervalDetectorThresholdFactorOptimizer.java | 696 |
}
/**
* Gets accelerometer base noise level PSD (Power Spectral Density)
* expressed in (m^2 * s^-3) of the best solution that has been found.
*
* @return accelerometer base noise level PSD of the best solution that has
* been found.
*/
public double getAccelerometerBaseNoiseLevelPsd() {
return baseNoiseLevel * baseNoiseLevel * getTimeInterval();
}
/**
* Gets accelerometer base noise level root PSD (Power Spectral Density)
* expressed in (m * s^-1.5) of the best solution that has been found.
*
* @return accelerometer base noise level root PSD of the best solution that has
* been found.
*/
@Override
public double getAccelerometerBaseNoiseLevelRootPsd() {
return baseNoiseLevel * Math.sqrt(getTimeInterval());
}
/**
* Gets the threshold to determine static/dynamic period changes expressed in
* meters per squared second (m/s^2) for the best calibration solution that
* has been found.
*
* @return threshold to determine static/dynamic period changes for the best
* solution.
*/
public double getThreshold() {
return threshold;
}
/**
* Gets the threshold to determine static/dynamic period changes for the best
* calibration solution that has been found.
*
* @return threshold to determine static/dynamic period changes for the best
* solution.
*/
public Acceleration getThresholdAsMeasurement() {
return createMeasurement(threshold, getDefaultUnit());
}
/**
* Get the threshold to determine static/dynamic period changes for the best
* calibration solution that has been found.
*
* @param result instance where the result will be stored.
*/
public void getThresholdAsMeasurement(final Acceleration result) {
result.setValue(threshold);
result.setUnit(getDefaultUnit());
}
/**
* Gets estimated standard deviation norm of accelerometer bias expressed in
* meters per squared second (m/s^2).
* This can be used as the initial accelerometer bias uncertainty for
* {@link INSLooselyCoupledKalmanInitializerConfig} or {@link INSTightlyCoupledKalmanInitializerConfig}.
*
* @return estimated standard deviation norm of accelerometer bias or null
* if not available.
*/
@Override
public Double getEstimatedBiasStandardDeviationNorm() {
return estimatedCovariance != null
? Math.sqrt(getEstimatedBiasFxVariance() + getEstimatedBiasFyVariance() + getEstimatedBiasFzVariance()) | |
