FERS 1.0.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 Element -->
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 Element -->
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">
105 <xs:complexType/>
106 </xs:element>
107 <!-- Additional waveform types (e.g., FMCW) can be added here -->
108 </xs:choice>
109 </xs:sequence>
110 <xs:attribute name="name" type="xs:string" use="required"/>
111 </xs:complexType>
112 </xs:element>
113
114 <!-- Timing Source Element -->
115 <xs:element name="timing">
116 <xs:complexType>
117 <xs:sequence>
118 <xs:element name="frequency" type="xs:string"/>
119 <xs:element minOccurs="0" name="freq_offset" type="xs:string"/>
120 <xs:element minOccurs="0" name="random_freq_offset_stdev" type="xs:string"/>
121 <xs:element minOccurs="0" name="phase_offset" type="xs:string"/>
122 <xs:element minOccurs="0" name="random_phase_offset_stdev" type="xs:string"/>
123 <xs:element minOccurs="0" ref="noise_entry" maxOccurs="unbounded"/>
124 </xs:sequence>
125 <xs:attribute name="name" use="required"/>
126 <xs:attribute name="synconpulse" default="false">
127 <xs:simpleType>
128 <xs:restriction base="xs:token">
129 <xs:enumeration value="true"/>
130 <xs:enumeration value="false"/>
131 </xs:restriction>
132 </xs:simpleType>
133 </xs:attribute>
134 </xs:complexType>
135 </xs:element>
136
137 <xs:element name="noise_entry">
138 <xs:complexType>
139 <xs:sequence>
140 <xs:element name="alpha" type="xs:string"/>
141 <xs:element name="weight" type="xs:string"/>
142 </xs:sequence>
143 </xs:complexType>
144 </xs:element>
145
146 <!-- Antenna Element -->
147 <xs:element name="antenna">
148 <xs:complexType>
149 <xs:sequence>
150 <xs:element minOccurs="0" name="alpha" type="xs:string"/>
151 <xs:element minOccurs="0" name="beta" type="xs:string"/>
152 <xs:element minOccurs="0" name="gamma" type="xs:string"/>
153 <xs:element minOccurs="0" name="diameter" type="xs:string"/>
154 <xs:element minOccurs="0" name="azscale" type="xs:string"/>
155 <xs:element minOccurs="0" name="elscale" type="xs:string"/>
156 <xs:element minOccurs="0" name="efficiency" type="xs:string"/>
157 </xs:sequence>
158 <xs:attribute name="name" use="required"/>
159 <xs:attribute name="pattern" use="required"/>
160 <xs:attribute name="filename"/>
161 </xs:complexType>
162 </xs:element>
163
164 <!-- Platform Element -->
165 <xs:element name="platform">
166 <xs:complexType>
167 <xs:sequence>
168 <xs:element ref="motionpath"/>
169 <xs:choice>
170 <xs:element ref="rotationpath"/>
171 <xs:element ref="fixedrotation"/>
172 </xs:choice>
173 <xs:choice minOccurs="0" maxOccurs="unbounded">
174 <xs:element ref="monostatic"/>
175 <xs:element ref="transmitter"/>
176 <xs:element ref="receiver"/>
177 <xs:element ref="target"/>
178 </xs:choice>
179 </xs:sequence>
180 <xs:attribute name="name" use="required"/>
181 </xs:complexType>
182 </xs:element>
183
184 <!-- Motion paths and Position Waypoints -->
185 <xs:element name="motionpath">
186 <xs:complexType>
187 <xs:sequence>
188 <!-- At least 1 positionwaypoint, no max limit -->
189 <xs:element maxOccurs="unbounded" ref="positionwaypoint"/>
190 </xs:sequence>
191 <xs:attribute name="interpolation" default="static">
192 <xs:simpleType>
193 <xs:restriction base="xs:token">
194 <xs:enumeration value="static"/>
195 <xs:enumeration value="linear"/>
196 <xs:enumeration value="cubic"/>
197 </xs:restriction>
198 </xs:simpleType>
199 </xs:attribute>
200 </xs:complexType>
201 </xs:element>
202
203 <!-- Definition for positionwaypoint element -->
204 <xs:element name="positionwaypoint">
205 <xs:complexType>
206 <xs:sequence>
207 <xs:element name="x" type="xs:string"/>
208 <xs:element name="y" type="xs:string"/>
209 <xs:element name="altitude" type="xs:string"/>
210 <xs:element name="time" type="xs:string"/>
211 </xs:sequence>
212 </xs:complexType>
213 </xs:element>
214
215 <!-- Constant Rate Rotation -->
216 <xs:element name="fixedrotation">
217 <xs:complexType>
218 <xs:sequence>
219 <xs:element name="startazimuth" type="xs:string"/>
220 <xs:element name="startelevation" type="xs:string"/>
221 <xs:element name="azimuthrate" type="xs:string"/>
222 <xs:element name="elevationrate" type="xs:string"/>
223 </xs:sequence>
224 </xs:complexType>
225 </xs:element>
226
227 <!-- Rotation Paths and Waypoints -->
228 <xs:element name="rotationpath">
229 <xs:complexType>
230 <xs:sequence>
231 <xs:element maxOccurs="unbounded" ref="rotationwaypoint"/>
232 </xs:sequence>
233 <xs:attribute name="interpolation" use="required">
234 <xs:simpleType>
235 <xs:restriction base="xs:token">
236 <xs:enumeration value="static"/>
237 <xs:enumeration value="linear"/>
238 <xs:enumeration value="cubic"/>
239 </xs:restriction>
240 </xs:simpleType>
241 </xs:attribute>
242 </xs:complexType>
243 </xs:element>
244
245 <xs:element name="rotationwaypoint">
246 <xs:complexType>
247 <xs:sequence>
248 <xs:element name="azimuth" type="xs:string"/>
249 <xs:element name="elevation" type="xs:string"/>
250 <xs:element name="time" type="xs:string"/>
251 </xs:sequence>
252 </xs:complexType>
253 </xs:element>
254
255 <!-- Schedule Element -->
256 <xs:element name="schedule">
257 <xs:complexType>
258 <xs:sequence>
259 <xs:element maxOccurs="unbounded" ref="period"/>
260 </xs:sequence>
261 </xs:complexType>
262 </xs:element>
263
264 <!-- Period Element -->
265 <xs:element name="period">
266 <xs:complexType>
267 <xs:attribute name="start" type="xs:string" use="required"/>
268 <xs:attribute name="end" type="xs:string" use="required"/>
269 </xs:complexType>
270 </xs:element>
271
272 <!-- Monostatic radar installations -->
273 <xs:element name="monostatic">
274 <xs:complexType>
275 <xs:sequence>
276 <xs:choice>
277 <xs:element name="pulsed_mode">
278 <xs:complexType>
279 <xs:sequence>
280 <xs:element name="prf" type="xs:string"/>
281 <xs:element name="window_skip" type="xs:string"/>
282 <xs:element name="window_length" type="xs:string"/>
283 </xs:sequence>
284 </xs:complexType>
285 </xs:element>
286 <xs:element name="cw_mode">
287 <xs:complexType/>
288 </xs:element>
289 </xs:choice>
290 <xs:element minOccurs="0" name="noise_temp" type="xs:string"/>
291 <xs:element minOccurs="0" ref="schedule"/>
292 </xs:sequence>
293 <xs:attribute name="name" use="required"/>
294 <xs:attribute name="antenna" type="xs:string" use="required"/>
295 <xs:attribute name="waveform" type="xs:string" use="required"/>
296 <xs:attribute name="timing" type="xs:string" use="required"/>
297 <xs:attribute name="nodirect" type="xs:boolean" default="false"/>
298 <xs:attribute name="nopropagationloss" type="xs:boolean" default="false"/>
299 </xs:complexType>
300 </xs:element>
301
302 <!-- Standalone Transmitter -->
303 <xs:element name="transmitter">
304 <xs:complexType>
305 <xs:sequence>
306 <xs:choice>
307 <xs:element name="pulsed_mode">
308 <xs:complexType>
309 <xs:sequence>
310 <xs:element name="prf" type="xs:string"/>
311 </xs:sequence>
312 </xs:complexType>
313 </xs:element>
314 <xs:element name="cw_mode">
315 <xs:complexType/>
316 </xs:element>
317 </xs:choice>
318 <xs:element minOccurs="0" ref="schedule"/>
319 </xs:sequence>
320 <xs:attribute name="name" use="required"/>
321 <xs:attribute name="waveform" type="xs:string" use="required"/>
322 <xs:attribute name="antenna" type="xs:string" use="required"/>
323 <xs:attribute name="timing" type="xs:string" use="required"/>
324 </xs:complexType>
325 </xs:element>
326
327 <!-- Standalone Receiver -->
328 <xs:element name="receiver">
329 <xs:complexType>
330 <xs:sequence>
331 <xs:choice>
332 <xs:element name="pulsed_mode">
333 <xs:complexType>
334 <xs:sequence>
335 <xs:element name="prf" type="xs:string"/>
336 <xs:element name="window_skip" type="xs:string"/>
337 <xs:element name="window_length" type="xs:string"/>
338 </xs:sequence>
339 </xs:complexType>
340 </xs:element>
341 <xs:element name="cw_mode">
342 <xs:complexType/>
343 </xs:element>
344 </xs:choice>
345 <xs:element minOccurs="0" name="noise_temp" type="xs:string"/>
346 <xs:element minOccurs="0" ref="schedule"/>
347 </xs:sequence>
348 <xs:attribute name="name" use="required"/>
349 <xs:attribute name="antenna" type="xs:string" use="required"/>
350 <xs:attribute name="timing" type="xs:string" use="required"/>
351 <xs:attribute name="nodirect" type="xs:boolean" default="false"/>
352 <xs:attribute name="nopropagationloss" type="xs:boolean" default="false"/>
353 </xs:complexType>
354 </xs:element>
355
356 <!-- Target -->
357 <xs:element name="target">
358 <xs:complexType>
359 <xs:sequence>
360 <xs:element ref="rcs"/>
361 <xs:element ref="model" minOccurs="0"/> <!-- model is optional -->
362 </xs:sequence>
363 <xs:attribute name="name" use="required"/>
364 </xs:complexType>
365 </xs:element>
366
367 <xs:element name="rcs">
368 <xs:complexType>
369 <xs:sequence>
370 <xs:element name="value" type="xs:string" minOccurs="0"/> <!-- value is optional -->
371 </xs:sequence>
372 <xs:attribute name="type" use="required"/>
373 <xs:attribute name="filename" type="xs:string"/> <!-- filename is optional -->
374 </xs:complexType>
375 </xs:element>
376
377 <xs:element name="model">
378 <xs:complexType>
379 <xs:sequence>
380 <xs:element name="k" type="xs:string" minOccurs="0"/> <!-- k is optional -->
381 </xs:sequence>
382 <xs:attribute name="type" use="required"/>
383 </xs:complexType>
384 </xs:element>
385
386 <!-- Include another XML file -->
387 <xs:element name="include" type="xs:string"/>
388</xs:schema>