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