AngularSpeedTriadStaticIntervalDetector.java
/*
* Copyright (C) 2020 Alberto Irurueta Carro (alberto@irurueta.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.irurueta.navigation.inertial.calibration.intervals;
import com.irurueta.navigation.inertial.calibration.AngularSpeedTriad;
import com.irurueta.navigation.inertial.calibration.GyroscopeNoiseRootPsdSource;
import com.irurueta.navigation.inertial.calibration.noise.AccumulatedAngularSpeedTriadNoiseEstimator;
import com.irurueta.navigation.inertial.calibration.noise.WindowedAngularSpeedTriadNoiseEstimator;
import com.irurueta.units.AngularSpeed;
import com.irurueta.units.AngularSpeedConverter;
import com.irurueta.units.AngularSpeedUnit;
/**
* This detector is in charge of determining when a static period of
* angular speed measurements starts and finishes.
* Static periods are periods of time where the device is considered
* to remain static (no movement applied to it).
*/
public class AngularSpeedTriadStaticIntervalDetector extends TriadStaticIntervalDetector<AngularSpeedUnit, AngularSpeed,
AngularSpeedTriad, AngularSpeedTriadStaticIntervalDetector, AngularSpeedTriadStaticIntervalDetectorListener>
implements GyroscopeNoiseRootPsdSource {
/**
* Constructor.
*/
public AngularSpeedTriadStaticIntervalDetector() {
super(new WindowedAngularSpeedTriadNoiseEstimator(), new AccumulatedAngularSpeedTriadNoiseEstimator());
}
/**
* Constructor.
*
* @param listener listener to handle events generated by this detector.
*/
public AngularSpeedTriadStaticIntervalDetector(final AngularSpeedTriadStaticIntervalDetectorListener listener) {
super(new WindowedAngularSpeedTriadNoiseEstimator(), new AccumulatedAngularSpeedTriadNoiseEstimator(),
listener);
}
/**
* Converts provided angular speed value expressed in provided unit to
* radians per second (rad/s).
*
* @param value value to be converted.
* @param unit unit of value to be converted.
* @return converted value.
*/
@Override
protected double convertMeasurement(final double value, final AngularSpeedUnit unit) {
return AngularSpeedConverter.convert(value, unit, AngularSpeedUnit.RADIANS_PER_SECOND);
}
/**
* Creates an angular speed instance using provided value and unit.
*
* @param value value of measurement.
* @param unit unit of value.
* @return created angular speed.
*/
@Override
protected AngularSpeed createMeasurement(final double value, final AngularSpeedUnit unit) {
return new AngularSpeed(value, unit);
}
/**
* Gets default unit for angular speed, which is radians per second (rad/s).
*
* @return default unit for angular speed
*/
@Override
protected AngularSpeedUnit getDefaultUnit() {
return AngularSpeedUnit.RADIANS_PER_SECOND;
}
/**
* Creates an angular speed triad.
*
* @param valueX x-coordinate value.
* @param valueY y-coordinate value.
* @param valueZ z-coordinate value.
* @param unit unit of values.
* @return created triad.
*/
@Override
protected AngularSpeedTriad createTriad(
final double valueX, final double valueY, final double valueZ, final AngularSpeedUnit unit) {
return new AngularSpeedTriad(unit, valueX, valueY, valueZ);
}
/**
* 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 getBaseNoiseLevelRootPsd();
}
}