1   /* Copyright 2022-2025 Thales Alenia Space
2    * Licensed to CS GROUP (CS) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * CS licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.orekit.gnss;
18  
19  import org.hipparchus.util.FastMath;
20  import org.orekit.utils.Constants;
21  
22  /** Top level interface for radio waves.
23   * @author Luc Maisonobe
24   * @since 12.1
25   *
26   */
27  public interface RadioWave {
28  
29      /** Default 1MHz tolerance for {@link #closeTo(RadioWave)}.
30       * @since 13.0
31       */
32      double ONE_MILLI_HERTZ = 1.0e-3;
33  
34      /** Get the value of the frequency in Hz.
35       * @return value of the frequency in Hz
36       * @see #getWavelength()
37       */
38      double getFrequency();
39  
40      /** Get the wavelength in meters.
41       * @return wavelength in meters
42       * @see #getFrequency()
43       */
44      default double getWavelength() {
45          return Constants.SPEED_OF_LIGHT / getFrequency();
46      }
47  
48      /** Check if two radio waves are closer than {@link #ONE_MILLI_HERTZ}.
49       * @param other other radio wave to check against instance
50       * @return true if radio waves are closer than {@link #ONE_MILLI_HERTZ}
51       * @see #closeTo(RadioWave, double)
52       * @since 13.0
53       */
54      default boolean closeTo(final RadioWave other) {
55          return closeTo(other, ONE_MILLI_HERTZ);
56      }
57  
58      /** Check if two radio waves are closer than tolerance.
59       * @param other other radio wave to check against instance
60       * @param tolerance frequency tolerance in Hz
61       * @return true if radio waves are closer than tolerance
62       * @see #ONE_MILLI_HERTZ
63       * @see #closeTo(RadioWave)
64       * @since 13.0
65       */
66      default boolean closeTo(final RadioWave other, final double tolerance) {
67          return FastMath.abs(getFrequency() - other.getFrequency()) < tolerance;
68      }
69  
70  }