1// SPDX-License-Identifier: GPL-2.0-only
2// Copyright (c) 2025-present FERS Contributors (see AUTHORS.md).
4import { generateSimId } from './idUtils';
5import { Antenna, GlobalParameters, Platform, Timing, Waveform } from './types';
7type WaveformType = Waveform['waveformType'];
8type WaveformDefaults<T extends WaveformType = WaveformType> =
10 ? Omit<Extract<Waveform, { waveformType: T }>, 'id' | 'name'>
13export const defaultGlobalParameters: GlobalParameters = {
14 id: 'global-parameters',
15 type: 'GlobalParameters',
16 rotationAngleUnit: 'deg',
17 simulation_name: 'FERS Simulation',
21 simSamplingRate: null,
26 // Default: UCT, South Africa
29 longitude: 18.4611991,
37export const defaultWaveform: WaveformDefaults<'pulsed_from_file'> = {
39 waveformType: 'pulsed_from_file',
41 carrier_frequency: 1e9,
45export function createWaveformForType(
46 waveformType: 'pulsed_from_file'
47): WaveformDefaults<'pulsed_from_file'>;
48export function createWaveformForType(
50): WaveformDefaults<'cw'>;
51export function createWaveformForType(
52 waveformType: 'cw_from_file'
53): WaveformDefaults<'cw_from_file'>;
54export function createWaveformForType(
55 waveformType: 'fmcw_from_file'
56): WaveformDefaults<'fmcw_from_file'>;
57export function createWaveformForType(
58 waveformType: 'fmcw_linear_chirp'
59): WaveformDefaults<'fmcw_linear_chirp'>;
60export function createWaveformForType(
61 waveformType: 'fmcw_triangle'
62): WaveformDefaults<'fmcw_triangle'>;
63export function createWaveformForType(
64 waveformType: 'stepped_frequency'
65): WaveformDefaults<'stepped_frequency'>;
66export function createWaveformForType(
67 waveformType: WaveformType
70 type: 'Waveform' as const,
71 power: defaultWaveform.power,
72 carrier_frequency: defaultWaveform.carrier_frequency,
75 switch (waveformType) {
76 case 'pulsed_from_file':
78 case 'fmcw_from_file':
89 case 'fmcw_linear_chirp':
97 start_frequency_offset: 0,
100 case 'fmcw_triangle':
104 chirp_bandwidth: 4e3,
105 chirp_duration: 1e-3,
106 start_frequency_offset: 0,
107 triangle_count: null,
109 case 'stepped_frequency':
113 start_frequency_offset: 0,
123export const defaultTiming: Omit<Timing, 'id' | 'name'> = {
127 randomFreqOffsetStdev: null,
129 randomPhaseOffsetStdev: null,
133export const defaultAntenna: Omit<
134 Extract<Antenna, { pattern: 'isotropic' }>,
138 pattern: 'isotropic',
141 design_frequency: null,
144export const createDefaultPlatform = (): Omit<Platform, 'id' | 'name'> => ({
147 interpolation: 'static',
149 { id: generateSimId('Platform'), x: 0, y: 0, altitude: 0, time: 0 },