FERS 0.1.0
The Flexible Extensible Radar Simulator
Loading...
Searching...
No Matches
fers-xml.xsd
Go to the documentation of this file.
1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3 XSD for FERS XML simulation script files.
4
5 Copyright (C) 2023-present FERS contributors (see AUTHORS.md).
6
7 This file is part of FERS. FERS is free software, licensed under the GPLv2.
8-->
9<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
10 <xs:element name="simulation">
11 <xs:complexType>
12 <xs:sequence>
13 <!-- First element must always be parameters, and only 1 allowed -->
14 <xs:element ref="parameters"/>
15
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"/>
28 </xs:choice>
29 </xs:sequence>
30 <xs:attribute name="name" use="required"/>
31 </xs:complexType>
32 </xs:element>
33
34 <!-- Parameters Element -->
35 <xs:element name="parameters">
36 <xs:complexType>
37 <xs:sequence>
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">
47 <xs:simpleType>
48 <xs:restriction base="xs:token">
49 <xs:enumeration value="deg"/>
50 <xs:enumeration value="rad"/>
51 </xs:restriction>
52 </xs:simpleType>
53 </xs:element>
54 <xs:element minOccurs="0" ref="origin"/>
55 <xs:element minOccurs="0" ref="coordinatesystem"/>
56 </xs:sequence>
57 </xs:complexType>
58 </xs:element>
59
60 <!-- Geodetic origin used only for ENU KML/geospatial export -->
61 <xs:element name="origin">
62 <xs:complexType>
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"/>
66 </xs:complexType>
67 </xs:element>
68
69 <!-- Coordinate system used only for KML/geospatial export -->
70 <xs:element name="coordinatesystem">
71 <xs:complexType>
72 <xs:attribute name="frame" use="required">
73 <xs:simpleType>
74 <xs:restriction base="xs:token">
75 <xs:enumeration value="ENU"/>
76 <xs:enumeration value="UTM"/>
77 <xs:enumeration value="ECEF"/>
78 </xs:restriction>
79 </xs:simpleType>
80 </xs:attribute>
81 <xs:attribute name="zone" type="xs:integer"/>
82 <xs:attribute name="hemisphere">
83 <xs:simpleType>
84 <xs:restriction base="xs:token">
85 <xs:enumeration value="N"/>
86 <xs:enumeration value="S"/>
87 </xs:restriction>
88 </xs:simpleType>
89 </xs:attribute>
90 </xs:complexType>
91 </xs:element>
92
93 <xs:element name="waveform">
94 <xs:complexType>
95 <xs:sequence>
96 <xs:element name="power" type="xs:string"/>
97 <xs:element name="carrier_frequency" type="xs:string"/>
98 <xs:choice>
99 <xs:element name="pulsed_from_file">
100 <xs:complexType>
101 <xs:attribute name="filename" type="xs:string" use="required"/>
102 </xs:complexType>
103 </xs:element>
104 <xs:element name="cw_from_file">
105 <xs:complexType>
106 <xs:attribute name="filename" type="xs:string" use="required"/>
107 </xs:complexType>
108 </xs:element>
109 <xs:element name="fmcw_from_file">
110 <xs:complexType>
111 <xs:attribute name="filename" type="xs:string" use="required"/>
112 </xs:complexType>
113 </xs:element>
114 <xs:element name="cw">
115 <xs:complexType/>
116 </xs:element>
117 <xs:element name="fmcw_linear_chirp">
118 <xs:complexType>
119 <xs:sequence>
120 <xs:element name="chirp_bandwidth" type="xs:string"/>
121 <xs:element name="chirp_duration" type="xs:string"/>
122 <xs:element name="chirp_period" type="xs:string"/>
123 <xs:element minOccurs="0" name="start_frequency_offset" type="xs:string"/>
124 <xs:element minOccurs="0" name="chirp_count" type="xs:string">
125 <xs:annotation>
126 <xs:documentation>
127 Per-schedule-segment maximum chirp count. If a transmitter has multiple
128 schedule periods, each period emits up to this many chirps.
129 </xs:documentation>
130 </xs:annotation>
131 </xs:element>
132 </xs:sequence>
133 <xs:attribute name="direction" use="required">
134 <xs:simpleType>
135 <xs:restriction base="xs:token">
136 <xs:enumeration value="up"/>
137 <xs:enumeration value="down"/>
138 </xs:restriction>
139 </xs:simpleType>
140 </xs:attribute>
141 </xs:complexType>
142 </xs:element>
143 <xs:element name="fmcw_triangle">
144 <xs:complexType>
145 <xs:sequence>
146 <xs:element name="chirp_bandwidth" type="xs:string"/>
147 <xs:element name="chirp_duration" type="xs:string"/>
148 <xs:element minOccurs="0" name="start_frequency_offset" type="xs:string"/>
149 <xs:element minOccurs="0" name="triangle_count" type="xs:string">
150 <xs:annotation>
151 <xs:documentation>
152 Per-schedule-segment maximum complete triangle count. If a transmitter has
153 multiple schedule periods, each period emits up to this many full triangles.
154 </xs:documentation>
155 </xs:annotation>
156 </xs:element>
157 </xs:sequence>
158 </xs:complexType>
159 </xs:element>
160 <xs:element name="stepped_frequency">
161 <xs:complexType>
162 <xs:sequence>
163 <xs:element name="start_frequency_offset" type="xs:string"/>
164 <xs:element name="step_size" type="xs:string"/>
165 <xs:element name="step_count" type="xs:string"/>
166 <xs:element name="dwell_time" type="xs:string"/>
167 <xs:element name="step_period" type="xs:string"/>
168 <xs:element minOccurs="0" name="sweep_count" type="xs:string"/>
169 </xs:sequence>
170 </xs:complexType>
171 </xs:element>
172 </xs:choice>
173 </xs:sequence>
174 <xs:attribute name="name" type="xs:string" use="required"/>
175 </xs:complexType>
176 </xs:element>
177
178 <!-- Timing Source Element -->
179 <xs:element name="timing">
180 <xs:complexType>
181 <xs:sequence>
182 <xs:element name="frequency" type="xs:string"/>
183 <xs:element minOccurs="0" name="freq_offset" type="xs:string"/>
184 <xs:element minOccurs="0" name="random_freq_offset_stdev" type="xs:string"/>
185 <xs:element minOccurs="0" name="phase_offset" type="xs:string"/>
186 <xs:element minOccurs="0" name="random_phase_offset_stdev" type="xs:string"/>
187 <xs:element minOccurs="0" ref="noise_entry" maxOccurs="unbounded"/>
188 </xs:sequence>
189 <xs:attribute name="name" use="required"/>
190 <xs:attribute name="synconpulse" default="false">
191 <xs:simpleType>
192 <xs:restriction base="xs:token">
193 <xs:enumeration value="true"/>
194 <xs:enumeration value="false"/>
195 </xs:restriction>
196 </xs:simpleType>
197 </xs:attribute>
198 </xs:complexType>
199 </xs:element>
200
201 <xs:element name="noise_entry">
202 <xs:complexType>
203 <xs:sequence>
204 <xs:element name="alpha" type="xs:string"/>
205 <xs:element name="weight" type="xs:string"/>
206 </xs:sequence>
207 </xs:complexType>
208 </xs:element>
209
210 <!-- Antenna Element -->
211 <xs:element name="antenna">
212 <xs:complexType>
213 <xs:sequence>
214 <xs:element minOccurs="0" name="alpha" type="xs:string"/>
215 <xs:element minOccurs="0" name="beta" type="xs:string"/>
216 <xs:element minOccurs="0" name="gamma" type="xs:string"/>
217 <xs:element minOccurs="0" name="diameter" type="xs:string"/>
218 <xs:element minOccurs="0" name="azscale" type="xs:string"/>
219 <xs:element minOccurs="0" name="elscale" type="xs:string"/>
220 <xs:element minOccurs="0" name="efficiency" type="xs:string"/>
221 </xs:sequence>
222 <xs:attribute name="name" use="required"/>
223 <xs:attribute name="pattern" use="required"/>
224 <xs:attribute name="filename"/>
225 </xs:complexType>
226 </xs:element>
227
228 <!-- Platform Element -->
229 <xs:element name="platform">
230 <xs:complexType>
231 <xs:sequence>
232 <xs:element ref="motionpath"/>
233 <xs:choice>
234 <xs:element ref="rotationpath"/>
235 <xs:element ref="fixedrotation"/>
236 </xs:choice>
237 <xs:choice minOccurs="0" maxOccurs="unbounded">
238 <xs:element ref="monostatic"/>
239 <xs:element ref="transmitter"/>
240 <xs:element ref="receiver"/>
241 <xs:element ref="target"/>
242 </xs:choice>
243 </xs:sequence>
244 <xs:attribute name="name" use="required"/>
245 </xs:complexType>
246 </xs:element>
247
248 <!-- Motion paths and Position Waypoints -->
249 <xs:element name="motionpath">
250 <xs:complexType>
251 <xs:sequence>
252 <!-- At least 1 positionwaypoint, no max limit -->
253 <xs:element maxOccurs="unbounded" ref="positionwaypoint"/>
254 </xs:sequence>
255 <xs:attribute name="interpolation" default="static">
256 <xs:simpleType>
257 <xs:restriction base="xs:token">
258 <xs:enumeration value="static"/>
259 <xs:enumeration value="linear"/>
260 <xs:enumeration value="cubic"/>
261 </xs:restriction>
262 </xs:simpleType>
263 </xs:attribute>
264 </xs:complexType>
265 </xs:element>
266
267 <!-- Definition for positionwaypoint element -->
268 <xs:element name="positionwaypoint">
269 <xs:complexType>
270 <xs:sequence>
271 <xs:element name="x" type="xs:string"/>
272 <xs:element name="y" type="xs:string"/>
273 <xs:element name="altitude" type="xs:string"/>
274 <xs:element name="time" type="xs:string"/>
275 </xs:sequence>
276 </xs:complexType>
277 </xs:element>
278
279 <!-- Constant Rate Rotation -->
280 <xs:element name="fixedrotation">
281 <xs:complexType>
282 <xs:sequence>
283 <xs:element name="startazimuth" type="xs:string"/>
284 <xs:element name="startelevation" type="xs:string"/>
285 <xs:element name="azimuthrate" type="xs:string"/>
286 <xs:element name="elevationrate" type="xs:string"/>
287 </xs:sequence>
288 </xs:complexType>
289 </xs:element>
290
291 <!-- Rotation Paths and Waypoints -->
292 <xs:element name="rotationpath">
293 <xs:complexType>
294 <xs:sequence>
295 <xs:element maxOccurs="unbounded" ref="rotationwaypoint"/>
296 </xs:sequence>
297 <xs:attribute name="interpolation" use="required">
298 <xs:simpleType>
299 <xs:restriction base="xs:token">
300 <xs:enumeration value="static"/>
301 <xs:enumeration value="linear"/>
302 <xs:enumeration value="cubic"/>
303 </xs:restriction>
304 </xs:simpleType>
305 </xs:attribute>
306 </xs:complexType>
307 </xs:element>
308
309 <xs:element name="rotationwaypoint">
310 <xs:complexType>
311 <xs:sequence>
312 <xs:element name="azimuth" type="xs:string"/>
313 <xs:element name="elevation" type="xs:string"/>
314 <xs:element name="time" type="xs:string"/>
315 </xs:sequence>
316 </xs:complexType>
317 </xs:element>
318
319 <!-- Schedule Element -->
320 <xs:element name="schedule">
321 <xs:complexType>
322 <xs:sequence>
323 <xs:element maxOccurs="unbounded" ref="period"/>
324 </xs:sequence>
325 </xs:complexType>
326 </xs:element>
327
328 <!-- Period Element -->
329 <xs:element name="period">
330 <xs:complexType>
331 <xs:attribute name="start" type="xs:string" use="required"/>
332 <xs:attribute name="end" type="xs:string" use="required"/>
333 </xs:complexType>
334 </xs:element>
335
336 <xs:complexType name="receiverFmcwModeType">
337 <xs:sequence>
338 <xs:element name="dechirp_reference" minOccurs="0" maxOccurs="1">
339 <xs:complexType>
340 <xs:attribute name="source" use="required">
341 <xs:simpleType>
342 <xs:restriction base="xs:string">
343 <xs:enumeration value="attached"/>
344 <xs:enumeration value="transmitter"/>
345 <xs:enumeration value="custom"/>
346 </xs:restriction>
347 </xs:simpleType>
348 </xs:attribute>
349 <xs:attribute name="transmitter_name" type="xs:string"/>
350 <xs:attribute name="waveform_name" type="xs:string"/>
351 </xs:complexType>
352 </xs:element>
353 <xs:element name="if_sample_rate" type="xs:string" minOccurs="0" maxOccurs="1"/>
354 <xs:element name="if_filter_bandwidth" type="xs:string" minOccurs="0" maxOccurs="1"/>
355 <xs:element name="if_filter_transition_width" type="xs:string" minOccurs="0" maxOccurs="1"/>
356 </xs:sequence>
357 <xs:attribute name="dechirp_mode" default="none">
358 <xs:simpleType>
359 <xs:restriction base="xs:string">
360 <xs:enumeration value="none"/>
361 <xs:enumeration value="physical"/>
362 <xs:enumeration value="ideal"/>
363 </xs:restriction>
364 </xs:simpleType>
365 </xs:attribute>
366 </xs:complexType>
367
368 <!-- Monostatic radar installations -->
369 <xs:element name="monostatic">
370 <xs:complexType>
371 <xs:sequence>
372 <xs:choice>
373 <xs:element name="pulsed_mode">
374 <xs:complexType>
375 <xs:sequence>
376 <xs:element name="prf" type="xs:string"/>
377 <xs:element name="window_skip" type="xs:string"/>
378 <xs:element name="window_length" type="xs:string"/>
379 </xs:sequence>
380 </xs:complexType>
381 </xs:element>
382 <xs:element name="cw_mode">
383 <xs:complexType/>
384 </xs:element>
385 <xs:element name="fmcw_mode" type="receiverFmcwModeType"/>
386 <xs:element name="sfcw_mode">
387 <xs:complexType/>
388 </xs:element>
389 </xs:choice>
390 <xs:element minOccurs="0" name="noise_temp" type="xs:string"/>
391 <xs:element minOccurs="0" ref="schedule"/>
392 </xs:sequence>
393 <xs:attribute name="name" use="required"/>
394 <xs:attribute name="antenna" type="xs:string" use="required"/>
395 <xs:attribute name="waveform" type="xs:string" use="required"/>
396 <xs:attribute name="timing" type="xs:string" use="required"/>
397 <xs:attribute name="nodirect" type="xs:boolean" default="false"/>
398 <xs:attribute name="nopropagationloss" type="xs:boolean" default="false"/>
399 </xs:complexType>
400 </xs:element>
401
402 <!-- Standalone Transmitter -->
403 <xs:element name="transmitter">
404 <xs:complexType>
405 <xs:sequence>
406 <xs:choice>
407 <xs:element name="pulsed_mode">
408 <xs:complexType>
409 <xs:sequence>
410 <xs:element name="prf" type="xs:string"/>
411 </xs:sequence>
412 </xs:complexType>
413 </xs:element>
414 <xs:element name="cw_mode">
415 <xs:complexType/>
416 </xs:element>
417 <xs:element name="fmcw_mode">
418 <xs:complexType/>
419 </xs:element>
420 <xs:element name="sfcw_mode">
421 <xs:complexType/>
422 </xs:element>
423 </xs:choice>
424 <xs:element minOccurs="0" ref="schedule"/>
425 </xs:sequence>
426 <xs:attribute name="name" use="required"/>
427 <xs:attribute name="waveform" type="xs:string" use="required"/>
428 <xs:attribute name="antenna" type="xs:string" use="required"/>
429 <xs:attribute name="timing" type="xs:string" use="required"/>
430 </xs:complexType>
431 </xs:element>
432
433 <!-- Standalone Receiver -->
434 <xs:element name="receiver">
435 <xs:complexType>
436 <xs:sequence>
437 <xs:choice>
438 <xs:element name="pulsed_mode">
439 <xs:complexType>
440 <xs:sequence>
441 <xs:element name="prf" type="xs:string"/>
442 <xs:element name="window_skip" type="xs:string"/>
443 <xs:element name="window_length" type="xs:string"/>
444 </xs:sequence>
445 </xs:complexType>
446 </xs:element>
447 <xs:element name="cw_mode">
448 <xs:complexType/>
449 </xs:element>
450 <xs:element name="fmcw_mode" type="receiverFmcwModeType"/>
451 <xs:element name="sfcw_mode">
452 <xs:complexType/>
453 </xs:element>
454 </xs:choice>
455 <xs:element minOccurs="0" name="noise_temp" type="xs:string"/>
456 <xs:element minOccurs="0" ref="schedule"/>
457 </xs:sequence>
458 <xs:attribute name="name" use="required"/>
459 <xs:attribute name="antenna" type="xs:string" use="required"/>
460 <xs:attribute name="timing" type="xs:string" use="required"/>
461 <xs:attribute name="nodirect" type="xs:boolean" default="false"/>
462 <xs:attribute name="nopropagationloss" type="xs:boolean" default="false"/>
463 </xs:complexType>
464 </xs:element>
465
466 <!-- Target -->
467 <xs:element name="target">
468 <xs:complexType>
469 <xs:sequence>
470 <xs:element ref="rcs"/>
471 <xs:element ref="model" minOccurs="0"/> <!-- model is optional -->
472 </xs:sequence>
473 <xs:attribute name="name" use="required"/>
474 </xs:complexType>
475 </xs:element>
476
477 <xs:element name="rcs">
478 <xs:complexType>
479 <xs:sequence>
480 <xs:element name="value" type="xs:string" minOccurs="0"/> <!-- value is optional -->
481 </xs:sequence>
482 <xs:attribute name="type" use="required"/>
483 <xs:attribute name="filename" type="xs:string"/> <!-- filename is optional -->
484 </xs:complexType>
485 </xs:element>
486
487 <xs:element name="model">
488 <xs:complexType>
489 <xs:sequence>
490 <xs:element name="k" type="xs:string" minOccurs="0"/> <!-- k is optional -->
491 </xs:sequence>
492 <xs:attribute name="type" use="required"/>
493 </xs:complexType>
494 </xs:element>
495
496 <!-- Include another XML file -->
497 <xs:element name="include" type="xs:string"/>
498</xs:schema>