1 /*
2 * Copyright (C) 2020 Alberto Irurueta Carro (alberto@irurueta.com)
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package com.irurueta.navigation.inertial.calibration.intervals;
17
18 import com.irurueta.navigation.inertial.calibration.AccelerationTriad;
19 import com.irurueta.navigation.inertial.calibration.AccelerometerNoiseRootPsdSource;
20 import com.irurueta.navigation.inertial.calibration.noise.AccumulatedAccelerationTriadNoiseEstimator;
21 import com.irurueta.navigation.inertial.calibration.noise.WindowedAccelerationTriadNoiseEstimator;
22 import com.irurueta.units.Acceleration;
23 import com.irurueta.units.AccelerationConverter;
24 import com.irurueta.units.AccelerationUnit;
25
26 /**
27 * This detector is in charge of determining when a static period of
28 * acceleration measurements starts and finishes.
29 * Static periods are periods of time where the device is considered
30 * to remain static (no movement applied to it).
31 */
32 public class AccelerationTriadStaticIntervalDetector extends TriadStaticIntervalDetector<AccelerationUnit,
33 Acceleration, AccelerationTriad, AccelerationTriadStaticIntervalDetector,
34 AccelerationTriadStaticIntervalDetectorListener> implements AccelerometerNoiseRootPsdSource {
35
36 /**
37 * Constructor.
38 */
39 public AccelerationTriadStaticIntervalDetector() {
40 super(new WindowedAccelerationTriadNoiseEstimator(), new AccumulatedAccelerationTriadNoiseEstimator());
41 }
42
43 /**
44 * Constructor.
45 *
46 * @param listener listener to handle events generated by this detector.
47 */
48 public AccelerationTriadStaticIntervalDetector(final AccelerationTriadStaticIntervalDetectorListener listener) {
49 super(new WindowedAccelerationTriadNoiseEstimator(), new AccumulatedAccelerationTriadNoiseEstimator(),
50 listener);
51 }
52
53 /**
54 * Converts provided acceleration value expressed in provided unit to
55 * meters per squared second (m/s^2).
56 *
57 * @param value value to be converted.
58 * @param unit unit of value to be converted.
59 * @return converted value.
60 */
61 @Override
62 protected double convertMeasurement(final double value, final AccelerationUnit unit) {
63 return AccelerationConverter.convert(value, unit, AccelerationUnit.METERS_PER_SQUARED_SECOND);
64 }
65
66 /**
67 * Creates an acceleration instance using provided value and unit.
68 *
69 * @param value value of measurement.
70 * @param unit unit of value.
71 * @return created acceleration.
72 */
73 @Override
74 protected Acceleration createMeasurement(final double value, final AccelerationUnit unit) {
75 return new Acceleration(value, unit);
76 }
77
78 /**
79 * Gets default unit for acceleration, which is meters per
80 * squared second (m/s^2).
81 *
82 * @return default unit for acceleration.
83 */
84 @Override
85 protected AccelerationUnit getDefaultUnit() {
86 return AccelerationUnit.METERS_PER_SQUARED_SECOND;
87 }
88
89 /**
90 * Creates an acceleration triad.
91 *
92 * @param valueX x-coordinate value.
93 * @param valueY y-coordinate value.
94 * @param valueZ z-coordinate value.
95 * @param unit unit of values.
96 * @return created triad.
97 */
98 @Override
99 protected AccelerationTriad createTriad(final double valueX, final double valueY, final double valueZ,
100 final AccelerationUnit unit) {
101 return new AccelerationTriad(unit, valueX, valueY, valueZ);
102 }
103
104 /**
105 * Gets accelerometer base noise level root PSD (Power Spectral Density)
106 * expressed in (m * s^-1.5).
107 *
108 * @return accelerometer base noise level root PSD.
109 */
110 @Override
111 public double getAccelerometerBaseNoiseLevelRootPsd() {
112 return getBaseNoiseLevelRootPsd();
113 }
114 }