1   /* Copyright 2002-2025 CS GROUP
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  /**
20   * Enumerate for GNSS predefined signals.
21   *
22   * @author Luc Maisonobe
23   * @since 9.2
24   */
25  public enum PredefinedGnssSignal implements GnssSignal {
26  
27      // CHECKSTYLE: stop MultipleStringLiterals check
28      /** GPS L1 (1575.42 MHz). */
29      G01(SatelliteSystem.GPS,     "L1", 154),
30  
31      /** GPS L2 (1227.6 MHz). */
32      G02(SatelliteSystem.GPS,     "L2", 120),
33  
34      /** GPS L5 (1176.45 MHz). */
35      G05(SatelliteSystem.GPS,     "L5", 115),
36  
37      /** GLONASS, "G1" (1602 MHZ). */
38      R01(SatelliteSystem.GLONASS, "G1", 1602.0 / 10.23),
39  
40      /** GLONASS, "G2" (1246 MHz). */
41      R02(SatelliteSystem.GLONASS, "G2", 1246.0 / 10.23),
42  
43      /** GLONASS, "G3" (1202.025 MHz). */
44      R03(SatelliteSystem.GLONASS, "G3", 117.5),
45  
46      /** GLONASS, "G1a" (1600.995 MHZ). */
47      R04(SatelliteSystem.GLONASS, "G1a", 156.5),
48  
49      /** GLONASS, "G2a" (1248.06 MHz). */
50      R06(SatelliteSystem.GLONASS, "G2a", 122),
51  
52      /** Galileo, "E1" (1575.42 MHz). */
53      E01(SatelliteSystem.GALILEO, "E1", 154),
54  
55      /** Galileo E5a (1176.45 MHz). */
56      E05(SatelliteSystem.GALILEO, "E5a", 115),
57  
58      /** Galileo E5b (1207.14 MHz). */
59      E07(SatelliteSystem.GALILEO, "E5b", 118),
60  
61      /** Galileo E5 (E5a + E5b) (1191.795MHz). */
62      E08(SatelliteSystem.GALILEO, "E5 (E5a+E5b)", 116.5),
63  
64      /** Galileo E6 (1278.75 MHz). */
65      E06(SatelliteSystem.GALILEO, "E6", 125),
66  
67      /** In the ANTEX files, both C01 and C02 refer to Beidou B1 signal (1561.098 MHz). */
68      C01(SatelliteSystem.BEIDOU, "B1", 152.6),
69  
70      /** In the ANTEX files, both C01 and C02 refer to Beidou B1 signal (1561.098 MHz). */
71      C02(SatelliteSystem.BEIDOU, "B1", 152.6),
72  
73      /** In the ANTEX files, C05 appears without much reference
74       * for consistency with Rinex 4 tables, we assume it is B2a (1176.45 MHz).
75       */
76      C05(SatelliteSystem.BEIDOU, "B2a", 115),
77  
78      /** In the ANTEX files, C06 appears without much reference, we assume it is B2 (1207.14 MHz). */
79      C06(SatelliteSystem.BEIDOU, "B2", 118),
80  
81      /** In the ANTEX files, C07 seems to refer to a signal close to E06, probably B3... (1268.52 MHz). */
82      C07(SatelliteSystem.BEIDOU, "B3", 124),
83  
84      /** In the ANTEX files, C08 appears without much reference
85       * for consistency with Rinex 4 tables, we assume it is B2 (B2a+B2b) (1191.795 MHz).
86       */
87      C08(SatelliteSystem.BEIDOU, "B2 (B2a+B2b)", 116.5),
88  
89      /** Beidou B1 (1561.098 MHz). */
90      B01(SatelliteSystem.BEIDOU,  "B1", 152.6),
91  
92      /** Beidou B2 (1207.14 MHz). */
93      B02(SatelliteSystem.BEIDOU,  "B2", 118),
94  
95      /** Beidou B3 (1268.52 MHz). */
96      B03(SatelliteSystem.BEIDOU,  "B3", 124),
97  
98      /** Beidou B1C (1575.42 MHz). */
99      B1C(SatelliteSystem.BEIDOU,  "B1C", 154),
100 
101     /** Beidou B1A (1575.42 MHz). */
102     B1A(SatelliteSystem.BEIDOU,  "B1A", 154),
103 
104     /** Beidou B2a (1176.45 MHz). */
105     B2A(SatelliteSystem.BEIDOU, "B2a", 115),
106 
107     /** Beidou B2b (1207.14 MHz). */
108     B2B(SatelliteSystem.BEIDOU, "B2b", 118),
109 
110     /** Beidou B2 (B2a + B2b) (1191.795MHz). */
111     B08(SatelliteSystem.BEIDOU, "B2 (B2a+B2b)", 116.5),
112 
113     /** Beidou B3A (1268.52 MHz). */
114     B3A(SatelliteSystem.BEIDOU, "B3A", 124),
115 
116     /** QZSS L1 (1575.42 MHz). */
117     J01(SatelliteSystem.QZSS,    "L1", 154),
118 
119     /** QZSS L2 (1227.6 MHz). */
120     J02(SatelliteSystem.QZSS,    "L2", 120),
121 
122     /** QZSS L5 (1176.45 MHz). */
123     J05(SatelliteSystem.QZSS,    "L5", 115),
124 
125     /** QZSS LEX (1278.75 MHz). */
126     J06(SatelliteSystem.QZSS,    "LEX", 125),
127 
128     /** NavIC L1. (1575.42 MHz)
129      * @since 13.0
130      */
131     I01(SatelliteSystem.NAVIC, "L1", 154),
132 
133     /** NavIC L5. (1176.45 MHz) */
134     I05(SatelliteSystem.NAVIC, "L5", 115),
135 
136     /** NavIC S (2492.028 MHz). */
137     I09(SatelliteSystem.NAVIC, "S", 243.6),
138 
139     /** SBAS L1 (1575.42 MHz). */
140     S01(SatelliteSystem.SBAS,    "L1", 154),
141 
142     /** SBAS L5 (1176.45 MHz). */
143     S05(SatelliteSystem.SBAS,    "L5", 115);
144     // CHECKSTYLE: resume MultipleStringLiterals check
145 
146     /** Satellite system. */
147     private final SatelliteSystem satelliteSystem;
148 
149     /** RINEX name for the frequency. */
150     private final String name;
151 
152     /** Ratio f/f0, where {@link GnssSignal#F0 f0} is the common frequency. */
153     private final double ratio;
154 
155     /** Simple constructor.
156      * @param name for the frequency
157      * @param satelliteSystem satellite system for which this frequency is defined
158      * @param ratio ratio f/f0, where {@link GnssSignal#F0 f0} is the common frequency
159      */
160     PredefinedGnssSignal(final SatelliteSystem satelliteSystem, final String name, final double ratio) {
161         this.satelliteSystem = satelliteSystem;
162         this.name            = name;
163         this.ratio           = ratio;
164     }
165 
166     /** {@inheritDoc} */
167     @Override
168     public String getName() {
169         return name;
170     }
171 
172     /** {@inheritDoc} */
173     @Override
174     public SatelliteSystem getSatelliteSystem() {
175         return satelliteSystem;
176     }
177 
178     /** {@inheritDoc} */
179     @Override
180     public double getRatio() {
181         return ratio;
182     }
183 
184     /** {@inheritDoc} */
185     @Override
186     public double getFrequency() {
187         return ratio * GnssSignal.F0;
188     }
189 
190 }