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: '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
61 type: 'Waveform' as const,
62 power: defaultWaveform.power,
63 carrier_frequency: defaultWaveform.carrier_frequency,
66 switch (waveformType) {
67 case 'pulsed_from_file':
78 case 'fmcw_linear_chirp':
86 start_frequency_offset: 0,
95 start_frequency_offset: 0,
101export const defaultTiming: Omit<Timing, 'id' | 'name'> = {
105 randomFreqOffsetStdev: null,
107 randomPhaseOffsetStdev: null,
111export const defaultAntenna: Omit<
112 Extract<Antenna, { pattern: 'isotropic' }>,
116 pattern: 'isotropic',
119 design_frequency: null,
122export const createDefaultPlatform = (): Omit<Platform, 'id' | 'name'> => ({
125 interpolation: 'static',
127 { id: generateSimId('Platform'), x: 0, y: 0, altitude: 0, time: 0 },