AccelerationTriadStaticIntervalDetector.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.AccelerationTriad;
import com.irurueta.navigation.inertial.calibration.AccelerometerNoiseRootPsdSource;
import com.irurueta.navigation.inertial.calibration.noise.AccumulatedAccelerationTriadNoiseEstimator;
import com.irurueta.navigation.inertial.calibration.noise.WindowedAccelerationTriadNoiseEstimator;
import com.irurueta.units.Acceleration;
import com.irurueta.units.AccelerationConverter;
import com.irurueta.units.AccelerationUnit;
/**
* This detector is in charge of determining when a static period of
* acceleration 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 AccelerationTriadStaticIntervalDetector extends TriadStaticIntervalDetector<AccelerationUnit,
Acceleration, AccelerationTriad, AccelerationTriadStaticIntervalDetector,
AccelerationTriadStaticIntervalDetectorListener> implements AccelerometerNoiseRootPsdSource {
/**
* Constructor.
*/
public AccelerationTriadStaticIntervalDetector() {
super(new WindowedAccelerationTriadNoiseEstimator(), new AccumulatedAccelerationTriadNoiseEstimator());
}
/**
* Constructor.
*
* @param listener listener to handle events generated by this detector.
*/
public AccelerationTriadStaticIntervalDetector(final AccelerationTriadStaticIntervalDetectorListener listener) {
super(new WindowedAccelerationTriadNoiseEstimator(), new AccumulatedAccelerationTriadNoiseEstimator(),
listener);
}
/**
* Converts provided acceleration value expressed in provided unit to
* meters per squared second (m/s^2).
*
* @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 AccelerationUnit unit) {
return AccelerationConverter.convert(value, unit, AccelerationUnit.METERS_PER_SQUARED_SECOND);
}
/**
* Creates an acceleration instance using provided value and unit.
*
* @param value value of measurement.
* @param unit unit of value.
* @return created acceleration.
*/
@Override
protected Acceleration createMeasurement(final double value, final AccelerationUnit unit) {
return new Acceleration(value, unit);
}
/**
* Gets default unit for acceleration, which is meters per
* squared second (m/s^2).
*
* @return default unit for acceleration.
*/
@Override
protected AccelerationUnit getDefaultUnit() {
return AccelerationUnit.METERS_PER_SQUARED_SECOND;
}
/**
* Creates an acceleration 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 AccelerationTriad createTriad(final double valueX, final double valueY, final double valueZ,
final AccelerationUnit unit) {
return new AccelerationTriad(unit, valueX, valueY, valueZ);
}
/**
* 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 getBaseNoiseLevelRootPsd();
}
}