View Javadoc
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 }