gnss-js 0.1.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +171 -5
  3. package/dist/analysis.cjs +1381 -0
  4. package/dist/analysis.d.cts +211 -0
  5. package/dist/analysis.d.ts +211 -0
  6. package/dist/analysis.js +14 -0
  7. package/dist/antex.cjs +239 -0
  8. package/dist/antex.d.cts +77 -0
  9. package/dist/antex.d.ts +77 -0
  10. package/dist/antex.js +8 -0
  11. package/dist/chunk-354IRDOG.js +239 -0
  12. package/dist/chunk-37QNKGTC.js +65 -0
  13. package/dist/chunk-5CMSYIYM.js +214 -0
  14. package/dist/chunk-5S5MONFK.js +0 -0
  15. package/dist/chunk-6FAL6P4G.js +12 -0
  16. package/dist/chunk-7NOFXKET.js +433 -0
  17. package/dist/chunk-CB6EOOLA.js +753 -0
  18. package/dist/chunk-HKN3PUGN.js +800 -0
  19. package/dist/chunk-IS4UUDBV.js +577 -0
  20. package/dist/chunk-K7WZQFBV.js +236 -0
  21. package/dist/chunk-LEEU5OIO.js +75 -0
  22. package/dist/chunk-PRSZIWKM.js +1482 -0
  23. package/dist/chunk-SDRRAJT5.js +433 -0
  24. package/dist/chunk-WR7LCB52.js +143 -0
  25. package/dist/chunk-Y3R57B5P.js +473 -0
  26. package/dist/chunk-YDMYO3YK.js +220 -0
  27. package/dist/constants.cjs +394 -0
  28. package/dist/constants.d.cts +14 -0
  29. package/dist/constants.d.ts +14 -0
  30. package/dist/constants.js +103 -0
  31. package/dist/coordinates.cjs +334 -0
  32. package/dist/coordinates.d.cts +81 -0
  33. package/dist/coordinates.d.ts +81 -0
  34. package/dist/coordinates.js +39 -0
  35. package/dist/ecef-CF0uAysr.d.cts +40 -0
  36. package/dist/ecef-CF0uAysr.d.ts +40 -0
  37. package/dist/ephemeris-BUWzfmBy.d.cts +114 -0
  38. package/dist/ephemeris-BUWzfmBy.d.ts +114 -0
  39. package/dist/gnss-BT6ulR17.d.cts +56 -0
  40. package/dist/gnss-C-tgoYNa.d.ts +56 -0
  41. package/dist/index.cjs +5774 -78
  42. package/dist/index.d.cts +17 -96
  43. package/dist/index.d.ts +17 -96
  44. package/dist/index.js +352 -415
  45. package/dist/nav-BAI1a9vK.d.cts +108 -0
  46. package/dist/nav-BAI1a9vK.d.ts +108 -0
  47. package/dist/nmea.cjs +247 -0
  48. package/dist/nmea.d.cts +37 -0
  49. package/dist/nmea.d.ts +37 -0
  50. package/dist/nmea.js +12 -0
  51. package/dist/ntrip.cjs +169 -0
  52. package/dist/ntrip.d.cts +98 -0
  53. package/dist/ntrip.d.ts +98 -0
  54. package/dist/ntrip.js +10 -0
  55. package/dist/orbit.cjs +504 -0
  56. package/dist/orbit.d.cts +117 -0
  57. package/dist/orbit.d.ts +117 -0
  58. package/dist/orbit.js +29 -0
  59. package/dist/parser-JPjjFgeP.d.cts +73 -0
  60. package/dist/parser-JPjjFgeP.d.ts +73 -0
  61. package/dist/rinex.cjs +1375 -0
  62. package/dist/rinex.d.cts +116 -0
  63. package/dist/rinex.d.ts +116 -0
  64. package/dist/rinex.js +37 -0
  65. package/dist/rtcm3.cjs +1519 -0
  66. package/dist/rtcm3.d.cts +143 -0
  67. package/dist/rtcm3.d.ts +143 -0
  68. package/dist/rtcm3.js +31 -0
  69. package/dist/signals.cjs +858 -0
  70. package/dist/signals.d.cts +93 -0
  71. package/dist/signals.d.ts +93 -0
  72. package/dist/signals.js +70 -0
  73. package/dist/time-DnI1VpE8.d.cts +33 -0
  74. package/dist/time-DnI1VpE8.d.ts +33 -0
  75. package/dist/time.cjs +585 -0
  76. package/dist/time.d.cts +307 -0
  77. package/dist/time.d.ts +307 -0
  78. package/dist/time.js +154 -0
  79. package/package.json +112 -14
  80. package/.prettierrc +0 -5
  81. package/jest.config.ts +0 -9
  82. package/test/functions.test.ts +0 -63
  83. package/test/gnss-scales.test.ts +0 -95
  84. package/test/julian.test.ts +0 -145
  85. package/test/rinex.test.ts +0 -11
  86. package/test/test.ts +0 -10
  87. package/test/utc.test.ts +0 -25
@@ -0,0 +1,858 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/signals/index.ts
21
+ var signals_exports = {};
22
+ __export(signals_exports, {
23
+ BAND_PRESETS: () => BAND_PRESETS,
24
+ CONSTELLATIONS: () => CONSTELLATIONS,
25
+ DELTA_GLO_L1: () => DELTA_GLO_L1,
26
+ DELTA_GLO_L2: () => DELTA_GLO_L2,
27
+ FREQ_BDS_B1A: () => FREQ_BDS_B1A,
28
+ FREQ_BDS_B1C: () => FREQ_BDS_B1C,
29
+ FREQ_BDS_B1I: () => FREQ_BDS_B1I,
30
+ FREQ_BDS_B2I: () => FREQ_BDS_B2I,
31
+ FREQ_BDS_B3A: () => FREQ_BDS_B3A,
32
+ FREQ_BDS_B3I: () => FREQ_BDS_B3I,
33
+ FREQ_GAL_E1: () => FREQ_GAL_E1,
34
+ FREQ_GAL_E5: () => FREQ_GAL_E5,
35
+ FREQ_GAL_E5a: () => FREQ_GAL_E5a,
36
+ FREQ_GAL_E5b: () => FREQ_GAL_E5b,
37
+ FREQ_GAL_E6: () => FREQ_GAL_E6,
38
+ FREQ_GLO_L1: () => FREQ_GLO_L1,
39
+ FREQ_GLO_L1OC: () => FREQ_GLO_L1OC,
40
+ FREQ_GLO_L2: () => FREQ_GLO_L2,
41
+ FREQ_GLO_L2OC: () => FREQ_GLO_L2OC,
42
+ FREQ_GLO_L3OC: () => FREQ_GLO_L3OC,
43
+ FREQ_GPS_L1: () => FREQ_GPS_L1,
44
+ FREQ_GPS_L2: () => FREQ_GPS_L2,
45
+ FREQ_GPS_L5: () => FREQ_GPS_L5,
46
+ FREQ_NAVIC_L5: () => FREQ_NAVIC_L5,
47
+ FREQ_QZS_L1: () => FREQ_QZS_L1,
48
+ FREQ_QZS_L2: () => FREQ_QZS_L2,
49
+ FREQ_QZS_L5: () => FREQ_QZS_L5,
50
+ FREQ_QZS_L6: () => FREQ_QZS_L6,
51
+ computePsdDb: () => computePsdDb,
52
+ phiAltBOC: () => phiAltBOC,
53
+ phiBOCc: () => phiBOCc,
54
+ phiBOCs: () => phiBOCs,
55
+ phiBPSK: () => phiBPSK
56
+ });
57
+ module.exports = __toCommonJS(signals_exports);
58
+
59
+ // src/signals/definitions.ts
60
+ var FREQ_GPS_L1 = 1575.42;
61
+ var FREQ_GPS_L2 = 1227.6;
62
+ var FREQ_GPS_L5 = 1176.45;
63
+ var FREQ_GLO_L1 = 1602;
64
+ var FREQ_GLO_L2 = 1246;
65
+ var DELTA_GLO_L1 = 0.5625;
66
+ var DELTA_GLO_L2 = 0.4375;
67
+ var FREQ_GLO_L1OC = 1600.995;
68
+ var FREQ_GLO_L2OC = 1248.06;
69
+ var FREQ_GLO_L3OC = 1202.025;
70
+ var FREQ_GAL_E1 = 1575.42;
71
+ var FREQ_GAL_E5 = 1191.795;
72
+ var FREQ_GAL_E5a = 1176.45;
73
+ var FREQ_GAL_E5b = 1207.14;
74
+ var FREQ_GAL_E6 = 1278.75;
75
+ var FREQ_BDS_B1I = 1561.098;
76
+ var FREQ_BDS_B2I = 1207.14;
77
+ var FREQ_BDS_B3I = 1268.52;
78
+ var FREQ_BDS_B1A = 1575.42;
79
+ var FREQ_BDS_B1C = 1575.42;
80
+ var FREQ_BDS_B3A = 1268.52;
81
+ var FREQ_QZS_L1 = 1575.42;
82
+ var FREQ_QZS_L2 = 1227.6;
83
+ var FREQ_QZS_L5 = 1176.45;
84
+ var FREQ_QZS_L6 = 1278.75;
85
+ var FREQ_NAVIC_L5 = 1176.45;
86
+ var GPS_COLOR = "#4ade80";
87
+ var GPS_M_COLOR = "#ef4444";
88
+ var GPS_P_COLOR = "#dbc51f";
89
+ var GPS_CA_COLOR = "#06b6d4";
90
+ var GLO_P_COLOR = "#ef4444";
91
+ var GLO_CA_COLOR = "#22c55e";
92
+ var GLO_OC_COLOR = "#22c55e";
93
+ var GLO_SC_COLOR = "#ef4444";
94
+ var GAL_OS_COLOR = "#22c55e";
95
+ var GAL_PRS_COLOR = "#ef4444";
96
+ var GAL_E5_COLOR = "#3399ff";
97
+ var GAL_E5_Q_COLOR = "#2879c9";
98
+ var BDS2_I_COLOR = "#22c55e";
99
+ var BDS2_Q_COLOR = "#ef4444";
100
+ var BDS3_AUTH_COLOR = "#ef4444";
101
+ var BDS3_OS_COLOR = "#22c55e";
102
+ var BDS3_E5_COLOR = "#3399ff";
103
+ var BDS3_E5_Q_COLOR = "#2879c9";
104
+ var QZS_COLOR = "#22c55e";
105
+ var QZS_S_COLOR = "#3399ff";
106
+ var QZS_Q_COLOR = "#2d8124";
107
+ var QZS_SQ_COLOR = "#2879c9";
108
+ var NAVIC_SPS_COLOR = "#22c55e";
109
+ var NAVIC_RS_COLOR = "#ef4444";
110
+ var CONSTELLATIONS = [
111
+ {
112
+ key: "GPS",
113
+ label: "GPS",
114
+ color: GPS_COLOR,
115
+ signals: [
116
+ // L1 — I channel: P(Y), M-code, L1Cd (data), L1Cp (pilot)
117
+ {
118
+ constellation: "GPS",
119
+ label: "L1 P(Y)",
120
+ centerMHz: FREQ_GPS_L1,
121
+ modulation: "BPSK",
122
+ params: [10],
123
+ halfSpanChips: 20,
124
+ color: GPS_P_COLOR,
125
+ direction: "up"
126
+ },
127
+ {
128
+ constellation: "GPS",
129
+ label: "L1M",
130
+ centerMHz: FREQ_GPS_L1,
131
+ modulation: "BOCs",
132
+ params: [10, 5],
133
+ halfSpanChips: 20,
134
+ color: GPS_M_COLOR,
135
+ direction: "up"
136
+ },
137
+ {
138
+ constellation: "GPS",
139
+ label: "L1Cd",
140
+ centerMHz: FREQ_GPS_L1,
141
+ modulation: "BOCs",
142
+ params: [1, 1],
143
+ halfSpanChips: 20,
144
+ color: GPS_COLOR,
145
+ direction: "up"
146
+ },
147
+ // L1 — Q channel: C/A; L1Cp shown down for visual separation
148
+ {
149
+ constellation: "GPS",
150
+ label: "L1Cp",
151
+ centerMHz: FREQ_GPS_L1,
152
+ modulation: "composite",
153
+ params: [],
154
+ halfSpanChips: 20,
155
+ color: GPS_COLOR,
156
+ direction: "down",
157
+ composite: {
158
+ weights: [Math.sqrt(29 / 33), Math.sqrt(4 / 33)],
159
+ modulations: ["BOCs", "BOCs"],
160
+ paramSets: [
161
+ [1, 1],
162
+ [6, 1]
163
+ ]
164
+ }
165
+ },
166
+ {
167
+ constellation: "GPS",
168
+ label: "L1 C/A",
169
+ centerMHz: FREQ_GPS_L1,
170
+ modulation: "BPSK",
171
+ params: [1],
172
+ halfSpanChips: 20,
173
+ color: GPS_CA_COLOR,
174
+ direction: "down"
175
+ },
176
+ // L2 — I channel: P(Y)
177
+ {
178
+ constellation: "GPS",
179
+ label: "L2 P(Y)",
180
+ centerMHz: FREQ_GPS_L2,
181
+ modulation: "BPSK",
182
+ params: [10],
183
+ halfSpanChips: 20,
184
+ color: GPS_P_COLOR,
185
+ direction: "up"
186
+ },
187
+ {
188
+ constellation: "GPS",
189
+ label: "L2M",
190
+ centerMHz: FREQ_GPS_L2,
191
+ modulation: "BOCs",
192
+ params: [10, 5],
193
+ halfSpanChips: 20,
194
+ color: GPS_M_COLOR,
195
+ direction: "down"
196
+ },
197
+ // L2 — Q channel: L2C
198
+ {
199
+ constellation: "GPS",
200
+ label: "L2C",
201
+ centerMHz: FREQ_GPS_L2,
202
+ modulation: "BPSK",
203
+ params: [1],
204
+ halfSpanChips: 20,
205
+ color: GPS_COLOR,
206
+ direction: "down"
207
+ },
208
+ // L5 — up (I) and down (Q)
209
+ {
210
+ constellation: "GPS",
211
+ label: "L5-I",
212
+ centerMHz: FREQ_GPS_L5,
213
+ modulation: "BPSK",
214
+ params: [10],
215
+ halfSpanChips: 20,
216
+ color: GPS_COLOR,
217
+ direction: "up"
218
+ },
219
+ {
220
+ constellation: "GPS",
221
+ label: "L5-Q",
222
+ centerMHz: FREQ_GPS_L5,
223
+ modulation: "BPSK",
224
+ params: [10],
225
+ halfSpanChips: 20,
226
+ color: QZS_Q_COLOR,
227
+ direction: "down"
228
+ }
229
+ ]
230
+ },
231
+ {
232
+ key: "GLO_FDMA",
233
+ label: "GLO FDMA",
234
+ color: "#f87171",
235
+ signals: [
236
+ // L1 P (up) and C/A (down)
237
+ ...Array.from({ length: 15 }, (_, i) => i - 7).map(
238
+ (k) => ({
239
+ constellation: "GLO_FDMA",
240
+ label: `L1P k=${k}`,
241
+ centerMHz: FREQ_GLO_L1 + k * DELTA_GLO_L1,
242
+ modulation: "BPSK",
243
+ params: [5.11],
244
+ halfSpanChips: 5.11,
245
+ color: GLO_P_COLOR,
246
+ direction: "up"
247
+ })
248
+ ),
249
+ ...Array.from({ length: 15 }, (_, i) => i - 7).map(
250
+ (k) => ({
251
+ constellation: "GLO_FDMA",
252
+ label: `L1 C/A k=${k}`,
253
+ centerMHz: FREQ_GLO_L1 + k * DELTA_GLO_L1,
254
+ modulation: "BPSK",
255
+ params: [0.511],
256
+ halfSpanChips: 0.511,
257
+ color: GLO_CA_COLOR,
258
+ direction: "down"
259
+ })
260
+ ),
261
+ // L2 P (up) and C/A (down)
262
+ ...Array.from({ length: 15 }, (_, i) => i - 7).map(
263
+ (k) => ({
264
+ constellation: "GLO_FDMA",
265
+ label: `L2P k=${k}`,
266
+ centerMHz: FREQ_GLO_L2 + k * DELTA_GLO_L2,
267
+ modulation: "BPSK",
268
+ params: [5.11],
269
+ halfSpanChips: 5.11,
270
+ color: GLO_P_COLOR,
271
+ direction: "up"
272
+ })
273
+ ),
274
+ ...Array.from({ length: 15 }, (_, i) => i - 7).map(
275
+ (k) => ({
276
+ constellation: "GLO_FDMA",
277
+ label: `L2 C/A k=${k}`,
278
+ centerMHz: FREQ_GLO_L2 + k * DELTA_GLO_L2,
279
+ modulation: "BPSK",
280
+ params: [0.511],
281
+ halfSpanChips: 0.511,
282
+ color: GLO_CA_COLOR,
283
+ direction: "down"
284
+ })
285
+ )
286
+ ]
287
+ },
288
+ {
289
+ key: "GLO_CDMA",
290
+ label: "GLO CDMA",
291
+ color: "#f87171",
292
+ signals: [
293
+ // L1OC (up), L1SC (down)
294
+ {
295
+ constellation: "GLO_CDMA",
296
+ label: "L1OC",
297
+ centerMHz: FREQ_GLO_L1OC,
298
+ modulation: "BOCs",
299
+ params: [1, 1],
300
+ halfSpanChips: 20,
301
+ color: GLO_OC_COLOR,
302
+ direction: "up"
303
+ },
304
+ {
305
+ constellation: "GLO_CDMA",
306
+ label: "L1SC",
307
+ centerMHz: FREQ_GLO_L1OC,
308
+ modulation: "BOCs",
309
+ params: [5, 2.5],
310
+ halfSpanChips: 20,
311
+ color: GLO_SC_COLOR,
312
+ direction: "down"
313
+ },
314
+ // L2OC (up), L2SC (down)
315
+ {
316
+ constellation: "GLO_CDMA",
317
+ label: "L2OC",
318
+ centerMHz: FREQ_GLO_L2OC,
319
+ modulation: "BOCs",
320
+ params: [1, 1],
321
+ halfSpanChips: 20,
322
+ color: GLO_OC_COLOR,
323
+ direction: "up"
324
+ },
325
+ {
326
+ constellation: "GLO_CDMA",
327
+ label: "L2SC",
328
+ centerMHz: FREQ_GLO_L2OC,
329
+ modulation: "BOCs",
330
+ params: [5, 2.5],
331
+ halfSpanChips: 20,
332
+ color: GLO_SC_COLOR,
333
+ direction: "down"
334
+ },
335
+ // L3 I (up), Q (down)
336
+ {
337
+ constellation: "GLO_CDMA",
338
+ label: "L3-I",
339
+ centerMHz: FREQ_GLO_L3OC,
340
+ modulation: "BPSK",
341
+ params: [10],
342
+ halfSpanChips: 20,
343
+ color: GLO_OC_COLOR,
344
+ direction: "up"
345
+ },
346
+ {
347
+ constellation: "GLO_CDMA",
348
+ label: "L3-Q",
349
+ centerMHz: FREQ_GLO_L3OC,
350
+ modulation: "BPSK",
351
+ params: [10],
352
+ halfSpanChips: 20,
353
+ color: QZS_Q_COLOR,
354
+ direction: "down"
355
+ }
356
+ ]
357
+ },
358
+ {
359
+ key: "GAL",
360
+ label: "Galileo",
361
+ color: "#60a5fa",
362
+ signals: [
363
+ // E1 OS (up — CBOC), E1 PRS (down)
364
+ {
365
+ constellation: "GAL",
366
+ label: "E1B/E1C",
367
+ centerMHz: FREQ_GAL_E1,
368
+ modulation: "composite",
369
+ params: [],
370
+ halfSpanChips: 20,
371
+ color: GAL_OS_COLOR,
372
+ direction: "up",
373
+ composite: {
374
+ weights: [Math.sqrt(10 / 11), Math.sqrt(1 / 11)],
375
+ modulations: ["BOCs", "BOCs"],
376
+ paramSets: [
377
+ [1, 1],
378
+ [6, 1]
379
+ ]
380
+ }
381
+ },
382
+ {
383
+ constellation: "GAL",
384
+ label: "E1A",
385
+ centerMHz: FREQ_GAL_E1,
386
+ modulation: "BOCc",
387
+ params: [15, 2.5],
388
+ halfSpanChips: 20,
389
+ color: GAL_PRS_COLOR,
390
+ direction: "down"
391
+ },
392
+ // E6 OS (up), E6 PRS (down)
393
+ {
394
+ constellation: "GAL",
395
+ label: "E6B/E6C",
396
+ centerMHz: FREQ_GAL_E6,
397
+ modulation: "BPSK",
398
+ params: [5],
399
+ halfSpanChips: 20,
400
+ color: GAL_OS_COLOR,
401
+ direction: "up"
402
+ },
403
+ {
404
+ constellation: "GAL",
405
+ label: "E6A",
406
+ centerMHz: FREQ_GAL_E6,
407
+ modulation: "BOCc",
408
+ params: [10, 5],
409
+ halfSpanChips: 20,
410
+ color: GAL_PRS_COLOR,
411
+ direction: "down"
412
+ },
413
+ // E5 AltBOC — I (up), Q (down)
414
+ {
415
+ constellation: "GAL",
416
+ label: "E5a-I / E5b-I",
417
+ centerMHz: FREQ_GAL_E5,
418
+ modulation: "AltBOC",
419
+ params: [15, 10],
420
+ halfSpanChips: 35,
421
+ color: GAL_E5_COLOR,
422
+ direction: "up"
423
+ },
424
+ {
425
+ constellation: "GAL",
426
+ label: "E5a-Q / E5b-Q",
427
+ centerMHz: FREQ_GAL_E5,
428
+ modulation: "AltBOC",
429
+ params: [15, 10],
430
+ halfSpanChips: 35,
431
+ color: GAL_E5_Q_COLOR,
432
+ direction: "down"
433
+ }
434
+ ]
435
+ },
436
+ {
437
+ key: "BDS2",
438
+ label: "BeiDou-2",
439
+ color: "#fbbf24",
440
+ signals: [
441
+ // B1 I (up), Q (down)
442
+ {
443
+ constellation: "BDS2",
444
+ label: "B1I",
445
+ centerMHz: FREQ_BDS_B1I,
446
+ modulation: "BPSK",
447
+ params: [2],
448
+ halfSpanChips: 20,
449
+ color: BDS2_I_COLOR,
450
+ direction: "up"
451
+ },
452
+ {
453
+ constellation: "BDS2",
454
+ label: "B1Q",
455
+ centerMHz: FREQ_BDS_B1I,
456
+ modulation: "BPSK",
457
+ params: [2],
458
+ halfSpanChips: 20,
459
+ color: BDS2_Q_COLOR,
460
+ direction: "down"
461
+ },
462
+ // B3 I (up), Q (down)
463
+ {
464
+ constellation: "BDS2",
465
+ label: "B3I",
466
+ centerMHz: FREQ_BDS_B3I,
467
+ modulation: "BPSK",
468
+ params: [10],
469
+ halfSpanChips: 20,
470
+ color: BDS2_I_COLOR,
471
+ direction: "up"
472
+ },
473
+ {
474
+ constellation: "BDS2",
475
+ label: "B3Q",
476
+ centerMHz: FREQ_BDS_B3I,
477
+ modulation: "BPSK",
478
+ params: [10],
479
+ halfSpanChips: 20,
480
+ color: BDS2_Q_COLOR,
481
+ direction: "down"
482
+ },
483
+ // B2 I (up), Q (down)
484
+ {
485
+ constellation: "BDS2",
486
+ label: "B2I",
487
+ centerMHz: FREQ_BDS_B2I,
488
+ modulation: "BPSK",
489
+ params: [2],
490
+ halfSpanChips: 20,
491
+ color: BDS2_I_COLOR,
492
+ direction: "up"
493
+ },
494
+ {
495
+ constellation: "BDS2",
496
+ label: "B2Q",
497
+ centerMHz: FREQ_BDS_B2I,
498
+ modulation: "BPSK",
499
+ params: [10],
500
+ halfSpanChips: 20,
501
+ color: BDS2_Q_COLOR,
502
+ direction: "down"
503
+ }
504
+ ]
505
+ },
506
+ {
507
+ key: "BDS3",
508
+ label: "BeiDou-3",
509
+ color: "#fbbf24",
510
+ signals: [
511
+ // B1A (up + down, same modulation)
512
+ {
513
+ constellation: "BDS3",
514
+ label: "B1A",
515
+ centerMHz: FREQ_BDS_B1A,
516
+ modulation: "BOCs",
517
+ params: [14, 2],
518
+ halfSpanChips: 20,
519
+ color: BDS3_AUTH_COLOR,
520
+ direction: "up"
521
+ },
522
+ {
523
+ constellation: "BDS3",
524
+ label: "B1A",
525
+ centerMHz: FREQ_BDS_B1A,
526
+ modulation: "BOCs",
527
+ params: [14, 2],
528
+ halfSpanChips: 20,
529
+ color: BDS3_AUTH_COLOR,
530
+ direction: "down"
531
+ },
532
+ // B1C data (up), pilot (down)
533
+ {
534
+ constellation: "BDS3",
535
+ label: "B1Cd",
536
+ centerMHz: FREQ_BDS_B1C,
537
+ modulation: "BOCs",
538
+ params: [1, 1],
539
+ halfSpanChips: 20,
540
+ color: BDS3_OS_COLOR,
541
+ direction: "up"
542
+ },
543
+ {
544
+ constellation: "BDS3",
545
+ label: "B1Cp",
546
+ centerMHz: FREQ_BDS_B1C,
547
+ modulation: "composite",
548
+ params: [],
549
+ halfSpanChips: 20,
550
+ color: BDS3_OS_COLOR,
551
+ direction: "down",
552
+ composite: {
553
+ weights: [Math.sqrt(29 / 33), Math.sqrt(4 / 33)],
554
+ modulations: ["BOCs", "BOCs"],
555
+ paramSets: [
556
+ [1, 1],
557
+ [6, 1]
558
+ ]
559
+ }
560
+ },
561
+ // B3A (up only)
562
+ {
563
+ constellation: "BDS3",
564
+ label: "B3A",
565
+ centerMHz: FREQ_BDS_B3A,
566
+ modulation: "BOCs",
567
+ params: [15, 2.5],
568
+ halfSpanChips: 20,
569
+ color: BDS3_AUTH_COLOR,
570
+ direction: "up"
571
+ },
572
+ // B2a/B2b AltBOC — I (up), Q (down)
573
+ {
574
+ constellation: "BDS3",
575
+ label: "B2a-I / B2b-I",
576
+ centerMHz: FREQ_GAL_E5,
577
+ modulation: "AltBOC",
578
+ params: [15, 10],
579
+ halfSpanChips: 35,
580
+ color: BDS3_E5_COLOR,
581
+ direction: "up"
582
+ },
583
+ {
584
+ constellation: "BDS3",
585
+ label: "B2a-Q / B2b-Q",
586
+ centerMHz: FREQ_GAL_E5,
587
+ modulation: "AltBOC",
588
+ params: [15, 10],
589
+ halfSpanChips: 35,
590
+ color: BDS3_E5_Q_COLOR,
591
+ direction: "down"
592
+ }
593
+ ]
594
+ },
595
+ {
596
+ key: "QZSS",
597
+ label: "QZSS",
598
+ color: "#a78bfa",
599
+ signals: [
600
+ // L1 — I: L1Cd, L1Cp, L1S; Q: L1C/A
601
+ {
602
+ constellation: "QZSS",
603
+ label: "L1Cd",
604
+ centerMHz: FREQ_QZS_L1,
605
+ modulation: "BOCs",
606
+ params: [1, 1],
607
+ halfSpanChips: 20,
608
+ color: QZS_COLOR,
609
+ direction: "up"
610
+ },
611
+ {
612
+ constellation: "QZSS",
613
+ label: "L1Cp",
614
+ centerMHz: FREQ_QZS_L1,
615
+ modulation: "composite",
616
+ params: [],
617
+ halfSpanChips: 20,
618
+ color: "#06b6d4",
619
+ direction: "up",
620
+ composite: {
621
+ weights: [Math.sqrt(29 / 33), Math.sqrt(4 / 33)],
622
+ modulations: ["BOCs", "BOCs"],
623
+ paramSets: [
624
+ [1, 1],
625
+ [6, 1]
626
+ ]
627
+ }
628
+ },
629
+ {
630
+ constellation: "QZSS",
631
+ label: "L1S",
632
+ centerMHz: FREQ_QZS_L1,
633
+ modulation: "BPSK",
634
+ params: [1],
635
+ halfSpanChips: 20,
636
+ color: QZS_S_COLOR,
637
+ direction: "up"
638
+ },
639
+ {
640
+ constellation: "QZSS",
641
+ label: "L1 C/A",
642
+ centerMHz: FREQ_QZS_L1,
643
+ modulation: "BPSK",
644
+ params: [1],
645
+ halfSpanChips: 20,
646
+ color: QZS_COLOR,
647
+ direction: "down"
648
+ },
649
+ // L2C (up only)
650
+ {
651
+ constellation: "QZSS",
652
+ label: "L2C",
653
+ centerMHz: FREQ_QZS_L2,
654
+ modulation: "BPSK",
655
+ params: [1],
656
+ halfSpanChips: 20,
657
+ color: QZS_COLOR,
658
+ direction: "down"
659
+ },
660
+ // L5 — I (up), Q (down)
661
+ {
662
+ constellation: "QZSS",
663
+ label: "L5-I",
664
+ centerMHz: FREQ_QZS_L5,
665
+ modulation: "BPSK",
666
+ params: [10],
667
+ halfSpanChips: 20,
668
+ color: QZS_COLOR,
669
+ direction: "up"
670
+ },
671
+ {
672
+ constellation: "QZSS",
673
+ label: "L5-Q",
674
+ centerMHz: FREQ_QZS_L5,
675
+ modulation: "BPSK",
676
+ params: [10],
677
+ halfSpanChips: 20,
678
+ color: QZS_Q_COLOR,
679
+ direction: "down"
680
+ },
681
+ // L5S — I (up), Q (down) — slightly lower power
682
+ {
683
+ constellation: "QZSS",
684
+ label: "L5S-I",
685
+ centerMHz: FREQ_QZS_L5,
686
+ modulation: "BPSK",
687
+ params: [10],
688
+ halfSpanChips: 20,
689
+ color: QZS_S_COLOR,
690
+ direction: "up"
691
+ },
692
+ {
693
+ constellation: "QZSS",
694
+ label: "L5S-Q",
695
+ centerMHz: FREQ_QZS_L5,
696
+ modulation: "BPSK",
697
+ params: [10],
698
+ halfSpanChips: 20,
699
+ color: QZS_SQ_COLOR,
700
+ direction: "down"
701
+ },
702
+ // L6 (up only)
703
+ {
704
+ constellation: "QZSS",
705
+ label: "L6",
706
+ centerMHz: FREQ_QZS_L6,
707
+ modulation: "BPSK",
708
+ params: [5],
709
+ halfSpanChips: 20,
710
+ color: QZS_COLOR,
711
+ direction: "up"
712
+ }
713
+ ]
714
+ },
715
+ {
716
+ key: "NavIC",
717
+ label: "NavIC",
718
+ color: "#fb923c",
719
+ signals: [
720
+ // L5 SPS (up), RS (down)
721
+ {
722
+ constellation: "NavIC",
723
+ label: "L5 SPS",
724
+ centerMHz: FREQ_NAVIC_L5,
725
+ modulation: "BPSK",
726
+ params: [1],
727
+ halfSpanChips: 20,
728
+ color: NAVIC_SPS_COLOR,
729
+ direction: "up"
730
+ },
731
+ {
732
+ constellation: "NavIC",
733
+ label: "L5 RS",
734
+ centerMHz: FREQ_NAVIC_L5,
735
+ modulation: "BOCs",
736
+ params: [5, 2],
737
+ halfSpanChips: 20,
738
+ color: NAVIC_RS_COLOR,
739
+ direction: "down"
740
+ }
741
+ ]
742
+ }
743
+ ];
744
+ var BAND_PRESETS = [
745
+ { label: "Full L-Band", minMHz: 1150, maxMHz: 1630 },
746
+ { label: "Upper L-Band", minMHz: 1530, maxMHz: 1630 },
747
+ { label: "Lower L-Band", minMHz: 1150, maxMHz: 1310 },
748
+ { label: "L1 / E1", minMHz: 1555, maxMHz: 1605 },
749
+ { label: "L6 / E6", minMHz: 1255, maxMHz: 1305 },
750
+ { label: "L5 / E5", minMHz: 1155, maxMHz: 1220 }
751
+ ];
752
+
753
+ // src/signals/psd.ts
754
+ function sinc(x) {
755
+ if (x === 0) return 1;
756
+ const px = Math.PI * x;
757
+ return Math.sin(px) / px;
758
+ }
759
+ function phiBPSK(f, f0, n) {
760
+ return 1 / (f0 * n) * sinc(f / (f0 * n)) ** 2;
761
+ }
762
+ function phiBOCs(f, f0, m, n) {
763
+ if (f === 0) return 0;
764
+ const ratio = 2 * m / n;
765
+ if (ratio % 2 === 0) {
766
+ const boccVal = phiBOCc(f, f0, m, n);
767
+ const tanArg = Math.PI * f / (4 * f0 * m);
768
+ const tanVal = Math.tan(tanArg);
769
+ if (tanVal === 0) return 0;
770
+ return boccVal / tanVal ** 2;
771
+ }
772
+ const cosVal = Math.cos(Math.PI * f / (n * f0));
773
+ const sinVal = Math.sin(Math.PI * f / (2 * m * f0));
774
+ const cosDiv = Math.cos(Math.PI * f / (2 * m * f0));
775
+ if (cosDiv === 0) return 0;
776
+ return f0 * n * (cosVal * sinVal / (Math.PI * f * cosDiv)) ** 2;
777
+ }
778
+ function phiBOCc(f, f0, m, n) {
779
+ if (f === 0) return 0;
780
+ const ratio = 2 * m / n;
781
+ if (ratio % 2 === 0) {
782
+ const sincVal = sinc(f / (f0 * n));
783
+ const sinArg = Math.PI * f / (4 * f0 * m);
784
+ const cosArg = Math.PI * f / (2 * f0 * m);
785
+ const cosVal = Math.cos(cosArg);
786
+ if (cosVal === 0) return 0;
787
+ return 4 / (f0 * n) * sincVal ** 2 * (Math.sin(sinArg) ** 2 / cosVal) ** 2;
788
+ }
789
+ const cosNum = Math.cos(Math.PI * f / (n * f0));
790
+ const sinNum = Math.sin(Math.PI * f / (4 * m * f0));
791
+ const cosDen = Math.cos(Math.PI * f / (2 * m * f0));
792
+ if (cosDen === 0) return 0;
793
+ return n * f0 * (2 * cosNum * sinNum / (Math.PI * f * cosDen)) ** 2;
794
+ }
795
+ function phiAltBOC(f, f0, m, n) {
796
+ if (f === 0) return 0;
797
+ const cosDen = Math.cos(Math.PI * f / (2 * f0 * m));
798
+ if (Math.abs(cosDen) < 1e-15) return 0;
799
+ const cosConst = Math.cos(Math.PI / (f0 * m));
800
+ const cosHalf = Math.cos(Math.PI * f / (2 * f0 * m));
801
+ const cosQuarter = Math.cos(Math.PI * f / (4 * f0 * m));
802
+ const inner = cosConst ** 2 - cosHalf - 2 * cosHalf * cosQuarter + 2;
803
+ if (m % 2 === 1) {
804
+ const cosN = Math.cos(Math.PI * f / (f0 * n));
805
+ return 4 * f0 * n / (Math.PI * f) ** 2 * cosN ** 2 / cosDen ** 2 * inner;
806
+ }
807
+ const sinN = Math.sin(Math.PI * f / (f0 * n));
808
+ return 4 * f0 * n / (Math.PI * f) ** 2 * sinN ** 2 / cosDen ** 2 * inner;
809
+ }
810
+ function computePsdDb(centerMHz, halfSpanChips, numPoints, psdFn, f0 = 1023e3, floorDb = -60) {
811
+ const HZ_IN_MHZ = 1e6;
812
+ const halfSpanMHz = halfSpanChips * f0 / HZ_IN_MHZ;
813
+ const freqsMHz = new Float64Array(numPoints);
814
+ const psdDb = new Float64Array(numPoints);
815
+ for (let i = 0; i < numPoints; i++) {
816
+ const fMHz = -halfSpanMHz + 2 * halfSpanMHz * i / (numPoints - 1);
817
+ freqsMHz[i] = fMHz + centerMHz;
818
+ const val = psdFn(fMHz * HZ_IN_MHZ);
819
+ psdDb[i] = val > 0 ? 10 * Math.log10(val) : floorDb;
820
+ }
821
+ return { freqsMHz, psdDb };
822
+ }
823
+ // Annotate the CommonJS export names for ESM import in node:
824
+ 0 && (module.exports = {
825
+ BAND_PRESETS,
826
+ CONSTELLATIONS,
827
+ DELTA_GLO_L1,
828
+ DELTA_GLO_L2,
829
+ FREQ_BDS_B1A,
830
+ FREQ_BDS_B1C,
831
+ FREQ_BDS_B1I,
832
+ FREQ_BDS_B2I,
833
+ FREQ_BDS_B3A,
834
+ FREQ_BDS_B3I,
835
+ FREQ_GAL_E1,
836
+ FREQ_GAL_E5,
837
+ FREQ_GAL_E5a,
838
+ FREQ_GAL_E5b,
839
+ FREQ_GAL_E6,
840
+ FREQ_GLO_L1,
841
+ FREQ_GLO_L1OC,
842
+ FREQ_GLO_L2,
843
+ FREQ_GLO_L2OC,
844
+ FREQ_GLO_L3OC,
845
+ FREQ_GPS_L1,
846
+ FREQ_GPS_L2,
847
+ FREQ_GPS_L5,
848
+ FREQ_NAVIC_L5,
849
+ FREQ_QZS_L1,
850
+ FREQ_QZS_L2,
851
+ FREQ_QZS_L5,
852
+ FREQ_QZS_L6,
853
+ computePsdDb,
854
+ phiAltBOC,
855
+ phiBOCc,
856
+ phiBOCs,
857
+ phiBPSK
858
+ });