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()) |