FERS 0.1.0
The Flexible Extensible Radar Simulator
Loading...
Searching...
No Matches
defaults.ts
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-only
2// Copyright (c) 2025-present FERS Contributors (see AUTHORS.md).
3
4import { generateSimId } from './idUtils';
5import { Antenna, GlobalParameters, Platform, Timing, Waveform } from './types';
6
7type WaveformType = Waveform['waveformType'];
8type WaveformDefaults<T extends WaveformType = WaveformType> =
9 T extends WaveformType
10 ? Omit<Extract<Waveform, { waveformType: T }>, 'id' | 'name'>
11 : never;
12
13export const defaultGlobalParameters: GlobalParameters = {
14 id: 'global-parameters',
15 type: 'GlobalParameters',
16 rotationAngleUnit: 'deg',
17 simulation_name: 'FERS Simulation',
18 start: 0.0,
19 end: 10.0,
20 rate: 10000.0,
21 simSamplingRate: null,
22 c: 299792458.0,
23 random_seed: null,
24 adc_bits: 12,
25 oversample_ratio: 1,
26 // Default: UCT, South Africa
27 origin: {
28 latitude: -33.957652,
29 longitude: 18.4611991,
30 altitude: 111.01,
31 },
32 coordinateSystem: {
33 frame: 'ENU',
34 },
35};
36
37export const defaultWaveform: WaveformDefaults<'pulsed_from_file'> = {
38 type: 'Waveform',
39 waveformType: 'pulsed_from_file',
40 power: 1000,
41 carrier_frequency: 1e9,
42 filename: '',
43};
44
45export function createWaveformForType(
46 waveformType: 'pulsed_from_file'
47): WaveformDefaults<'pulsed_from_file'>;
48export function createWaveformForType(
49 waveformType: 'cw'
50): WaveformDefaults<'cw'>;
51export function createWaveformForType(
52 waveformType: 'fmcw_linear_chirp'
53): WaveformDefaults<'fmcw_linear_chirp'>;
54export function createWaveformForType(
55 waveformType: 'fmcw_triangle'
56): WaveformDefaults<'fmcw_triangle'>;
57export function createWaveformForType(
58 waveformType: WaveformType
59): WaveformDefaults {
60 const common = {
61 type: 'Waveform' as const,
62 power: defaultWaveform.power,
63 carrier_frequency: defaultWaveform.carrier_frequency,
64 };
65
66 switch (waveformType) {
67 case 'pulsed_from_file':
68 return {
69 ...common,
70 waveformType,
71 filename: '',
72 };
73 case 'cw':
74 return {
75 ...common,
76 waveformType,
77 };
78 case 'fmcw_linear_chirp':
79 return {
80 ...common,
81 waveformType,
82 direction: 'up',
83 chirp_bandwidth: 4e3,
84 chirp_duration: 1e-3,
85 chirp_period: 1e-3,
86 start_frequency_offset: 0,
87 chirp_count: null,
88 };
89 case 'fmcw_triangle':
90 return {
91 ...common,
92 waveformType,
93 chirp_bandwidth: 4e3,
94 chirp_duration: 1e-3,
95 start_frequency_offset: 0,
96 triangle_count: null,
97 };
98 }
99}
100
101export const defaultTiming: Omit<Timing, 'id' | 'name'> = {
102 type: 'Timing',
103 frequency: 10e6,
104 freqOffset: null,
105 randomFreqOffsetStdev: null,
106 phaseOffset: null,
107 randomPhaseOffsetStdev: null,
108 noiseEntries: [],
109};
110
111export const defaultAntenna: Omit<
112 Extract<Antenna, { pattern: 'isotropic' }>,
113 'id' | 'name'
114> = {
115 type: 'Antenna',
116 pattern: 'isotropic',
117 efficiency: 1.0,
118 meshScale: 1.0,
119 design_frequency: null,
120};
121
122export const createDefaultPlatform = (): Omit<Platform, 'id' | 'name'> => ({
123 type: 'Platform',
124 motionPath: {
125 interpolation: 'static',
126 waypoints: [
127 { id: generateSimId('Platform'), x: 0, y: 0, altitude: 0, time: 0 },
128 ],
129 },
130 rotation: {
131 type: 'fixed',
132 startAzimuth: 0,
133 startElevation: 0,
134 azimuthRate: 0,
135 elevationRate: 0,
136 },
137 components: [],
138});