1<?xml version="1.0" encoding="UTF-8"?>
3 XSD for FERS XML simulation script files.
5 Copyright (C) 2023-present FERS contributors (see AUTHORS.md).
7 This file is part of FERS. FERS is free software, licensed under the GPLv2.
9<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
10 <xs:element name="simulation">
13 <!-- First element must always be parameters, and only 1 allowed -->
14 <xs:element ref="parameters"/>
16 <!-- After parameters, the following elements can appear in any order -->
17 <xs:choice maxOccurs="unbounded">
18 <!-- At least 1 pulse is required -->
19 <xs:element ref="waveform"/>
20 <!-- At least 1 timing is required -->
21 <xs:element ref="timing"/>
22 <!-- At least 1 antenna is required -->
23 <xs:element ref="antenna"/>
24 <!-- At least 1 platform is required -->
25 <xs:element ref="platform"/>
26 <!-- Any number of include elements is allowed -->
27 <xs:element ref="include" minOccurs="0"/>
30 <xs:attribute name="name" use="required"/>
34 <!-- Parameters Element -->
35 <xs:element name="parameters">
38 <xs:element name="starttime" type="xs:string"/>
39 <xs:element name="endtime" type="xs:string"/>
40 <xs:element name="rate" type="xs:string"/>
41 <xs:element minOccurs="0" name="c" type="xs:string"/>
42 <xs:element minOccurs="0" name="simSamplingRate" type="xs:string"/>
43 <xs:element minOccurs="0" name="randomseed" type="xs:string"/>
44 <xs:element minOccurs="0" name="adc_bits" type="xs:string"/>
45 <xs:element minOccurs="0" name="oversample" type="xs:string"/>
46 <xs:element minOccurs="0" name="rotationangleunit">
48 <xs:restriction base="xs:token">
49 <xs:enumeration value="deg"/>
50 <xs:enumeration value="rad"/>
54 <xs:element minOccurs="0" ref="origin"/>
55 <xs:element minOccurs="0" ref="coordinatesystem"/>
60 <!-- Geodetic origin used only for ENU KML/geospatial export -->
61 <xs:element name="origin">
63 <xs:attribute name="latitude" type="xs:double" use="required"/>
64 <xs:attribute name="longitude" type="xs:double" use="required"/>
65 <xs:attribute name="altitude" type="xs:double" default="0"/>
69 <!-- Coordinate system used only for KML/geospatial export -->
70 <xs:element name="coordinatesystem">
72 <xs:attribute name="frame" use="required">
74 <xs:restriction base="xs:token">
75 <xs:enumeration value="ENU"/>
76 <xs:enumeration value="UTM"/>
77 <xs:enumeration value="ECEF"/>
81 <xs:attribute name="zone" type="xs:integer"/>
82 <xs:attribute name="hemisphere">
84 <xs:restriction base="xs:token">
85 <xs:enumeration value="N"/>
86 <xs:enumeration value="S"/>
93 <xs:element name="waveform">
96 <xs:element name="power" type="xs:string"/>
97 <xs:element name="carrier_frequency" type="xs:string"/>
99 <xs:element name="pulsed_from_file">
101 <xs:attribute name="filename" type="xs:string" use="required"/>
104 <xs:element name="cw">
107 <xs:element name="fmcw_linear_chirp">
110 <xs:element name="chirp_bandwidth" type="xs:string"/>
111 <xs:element name="chirp_duration" type="xs:string"/>
112 <xs:element name="chirp_period" type="xs:string"/>
113 <xs:element minOccurs="0" name="start_frequency_offset" type="xs:string"/>
114 <xs:element minOccurs="0" name="chirp_count" type="xs:string">
117 Per-schedule-segment maximum chirp count. If a transmitter has multiple
118 schedule periods, each period emits up to this many chirps.
123 <xs:attribute name="direction" use="required">
125 <xs:restriction base="xs:token">
126 <xs:enumeration value="up"/>
127 <xs:enumeration value="down"/>
133 <xs:element name="fmcw_triangle">
136 <xs:element name="chirp_bandwidth" type="xs:string"/>
137 <xs:element name="chirp_duration" type="xs:string"/>
138 <xs:element minOccurs="0" name="start_frequency_offset" type="xs:string"/>
139 <xs:element minOccurs="0" name="triangle_count" type="xs:string">
142 Per-schedule-segment maximum complete triangle count. If a transmitter has
143 multiple schedule periods, each period emits up to this many full triangles.
152 <xs:attribute name="name" type="xs:string" use="required"/>
156 <!-- Timing Source Element -->
157 <xs:element name="timing">
160 <xs:element name="frequency" type="xs:string"/>
161 <xs:element minOccurs="0" name="freq_offset" type="xs:string"/>
162 <xs:element minOccurs="0" name="random_freq_offset_stdev" type="xs:string"/>
163 <xs:element minOccurs="0" name="phase_offset" type="xs:string"/>
164 <xs:element minOccurs="0" name="random_phase_offset_stdev" type="xs:string"/>
165 <xs:element minOccurs="0" ref="noise_entry" maxOccurs="unbounded"/>
167 <xs:attribute name="name" use="required"/>
168 <xs:attribute name="synconpulse" default="false">
170 <xs:restriction base="xs:token">
171 <xs:enumeration value="true"/>
172 <xs:enumeration value="false"/>
179 <xs:element name="noise_entry">
182 <xs:element name="alpha" type="xs:string"/>
183 <xs:element name="weight" type="xs:string"/>
188 <!-- Antenna Element -->
189 <xs:element name="antenna">
192 <xs:element minOccurs="0" name="alpha" type="xs:string"/>
193 <xs:element minOccurs="0" name="beta" type="xs:string"/>
194 <xs:element minOccurs="0" name="gamma" type="xs:string"/>
195 <xs:element minOccurs="0" name="diameter" type="xs:string"/>
196 <xs:element minOccurs="0" name="azscale" type="xs:string"/>
197 <xs:element minOccurs="0" name="elscale" type="xs:string"/>
198 <xs:element minOccurs="0" name="efficiency" type="xs:string"/>
200 <xs:attribute name="name" use="required"/>
201 <xs:attribute name="pattern" use="required"/>
202 <xs:attribute name="filename"/>
206 <!-- Platform Element -->
207 <xs:element name="platform">
210 <xs:element ref="motionpath"/>
212 <xs:element ref="rotationpath"/>
213 <xs:element ref="fixedrotation"/>
215 <xs:choice minOccurs="0" maxOccurs="unbounded">
216 <xs:element ref="monostatic"/>
217 <xs:element ref="transmitter"/>
218 <xs:element ref="receiver"/>
219 <xs:element ref="target"/>
222 <xs:attribute name="name" use="required"/>
226 <!-- Motion paths and Position Waypoints -->
227 <xs:element name="motionpath">
230 <!-- At least 1 positionwaypoint, no max limit -->
231 <xs:element maxOccurs="unbounded" ref="positionwaypoint"/>
233 <xs:attribute name="interpolation" default="static">
235 <xs:restriction base="xs:token">
236 <xs:enumeration value="static"/>
237 <xs:enumeration value="linear"/>
238 <xs:enumeration value="cubic"/>
245 <!-- Definition for positionwaypoint element -->
246 <xs:element name="positionwaypoint">
249 <xs:element name="x" type="xs:string"/>
250 <xs:element name="y" type="xs:string"/>
251 <xs:element name="altitude" type="xs:string"/>
252 <xs:element name="time" type="xs:string"/>
257 <!-- Constant Rate Rotation -->
258 <xs:element name="fixedrotation">
261 <xs:element name="startazimuth" type="xs:string"/>
262 <xs:element name="startelevation" type="xs:string"/>
263 <xs:element name="azimuthrate" type="xs:string"/>
264 <xs:element name="elevationrate" type="xs:string"/>
269 <!-- Rotation Paths and Waypoints -->
270 <xs:element name="rotationpath">
273 <xs:element maxOccurs="unbounded" ref="rotationwaypoint"/>
275 <xs:attribute name="interpolation" use="required">
277 <xs:restriction base="xs:token">
278 <xs:enumeration value="static"/>
279 <xs:enumeration value="linear"/>
280 <xs:enumeration value="cubic"/>
287 <xs:element name="rotationwaypoint">
290 <xs:element name="azimuth" type="xs:string"/>
291 <xs:element name="elevation" type="xs:string"/>
292 <xs:element name="time" type="xs:string"/>
297 <!-- Schedule Element -->
298 <xs:element name="schedule">
301 <xs:element maxOccurs="unbounded" ref="period"/>
306 <!-- Period Element -->
307 <xs:element name="period">
309 <xs:attribute name="start" type="xs:string" use="required"/>
310 <xs:attribute name="end" type="xs:string" use="required"/>
314 <xs:complexType name="receiverFmcwModeType">
316 <xs:element name="dechirp_reference" minOccurs="0" maxOccurs="1">
318 <xs:attribute name="source" use="required">
320 <xs:restriction base="xs:string">
321 <xs:enumeration value="attached"/>
322 <xs:enumeration value="transmitter"/>
323 <xs:enumeration value="custom"/>
327 <xs:attribute name="transmitter_name" type="xs:string"/>
328 <xs:attribute name="waveform_name" type="xs:string"/>
331 <xs:element name="if_sample_rate" type="xs:string" minOccurs="0" maxOccurs="1"/>
332 <xs:element name="if_filter_bandwidth" type="xs:string" minOccurs="0" maxOccurs="1"/>
333 <xs:element name="if_filter_transition_width" type="xs:string" minOccurs="0" maxOccurs="1"/>
335 <xs:attribute name="dechirp_mode" default="none">
337 <xs:restriction base="xs:string">
338 <xs:enumeration value="none"/>
339 <xs:enumeration value="physical"/>
340 <xs:enumeration value="ideal"/>
346 <!-- Monostatic radar installations -->
347 <xs:element name="monostatic">
351 <xs:element name="pulsed_mode">
354 <xs:element name="prf" type="xs:string"/>
355 <xs:element name="window_skip" type="xs:string"/>
356 <xs:element name="window_length" type="xs:string"/>
360 <xs:element name="cw_mode">
363 <xs:element name="fmcw_mode" type="receiverFmcwModeType"/>
365 <xs:element minOccurs="0" name="noise_temp" type="xs:string"/>
366 <xs:element minOccurs="0" ref="schedule"/>
368 <xs:attribute name="name" use="required"/>
369 <xs:attribute name="antenna" type="xs:string" use="required"/>
370 <xs:attribute name="waveform" type="xs:string" use="required"/>
371 <xs:attribute name="timing" type="xs:string" use="required"/>
372 <xs:attribute name="nodirect" type="xs:boolean" default="false"/>
373 <xs:attribute name="nopropagationloss" type="xs:boolean" default="false"/>
377 <!-- Standalone Transmitter -->
378 <xs:element name="transmitter">
382 <xs:element name="pulsed_mode">
385 <xs:element name="prf" type="xs:string"/>
389 <xs:element name="cw_mode">
392 <xs:element name="fmcw_mode">
396 <xs:element minOccurs="0" ref="schedule"/>
398 <xs:attribute name="name" use="required"/>
399 <xs:attribute name="waveform" type="xs:string" use="required"/>
400 <xs:attribute name="antenna" type="xs:string" use="required"/>
401 <xs:attribute name="timing" type="xs:string" use="required"/>
405 <!-- Standalone Receiver -->
406 <xs:element name="receiver">
410 <xs:element name="pulsed_mode">
413 <xs:element name="prf" type="xs:string"/>
414 <xs:element name="window_skip" type="xs:string"/>
415 <xs:element name="window_length" type="xs:string"/>
419 <xs:element name="cw_mode">
422 <xs:element name="fmcw_mode" type="receiverFmcwModeType"/>
424 <xs:element minOccurs="0" name="noise_temp" type="xs:string"/>
425 <xs:element minOccurs="0" ref="schedule"/>
427 <xs:attribute name="name" use="required"/>
428 <xs:attribute name="antenna" type="xs:string" use="required"/>
429 <xs:attribute name="timing" type="xs:string" use="required"/>
430 <xs:attribute name="nodirect" type="xs:boolean" default="false"/>
431 <xs:attribute name="nopropagationloss" type="xs:boolean" default="false"/>
436 <xs:element name="target">
439 <xs:element ref="rcs"/>
440 <xs:element ref="model" minOccurs="0"/> <!-- model is optional -->
442 <xs:attribute name="name" use="required"/>
446 <xs:element name="rcs">
449 <xs:element name="value" type="xs:string" minOccurs="0"/> <!-- value is optional -->
451 <xs:attribute name="type" use="required"/>
452 <xs:attribute name="filename" type="xs:string"/> <!-- filename is optional -->
456 <xs:element name="model">
459 <xs:element name="k" type="xs:string" minOccurs="0"/> <!-- k is optional -->
461 <xs:attribute name="type" use="required"/>
465 <!-- Include another XML file -->
466 <xs:element name="include" type="xs:string"/>