FERS 0.1.0
The Flexible Extensible Radar Simulator
Loading...
Searching...
No Matches
output_metadata.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-only
2//
3// Copyright (c) 2026-present FERS Contributors (see AUTHORS.md).
4//
5// See the GNU GPLv2 LICENSE file in the FERS project root for more information.
6
7#pragma once
8
9#include <cstdint>
10#include <mutex>
11#include <optional>
12#include <string>
13#include <vector>
14
15#include "core/config.h"
16#include "core/output_config.h"
17#include "core/sim_id.h"
19
20namespace core
21{
22 /// Metadata for one pulsed output chunk written to HDF5.
24 {
25 unsigned chunk_index = 0; ///< Zero-based chunk index in the receiver output sequence.
26 std::string i_dataset; ///< HDF5 dataset path containing the in-phase samples.
27 std::string q_dataset; ///< HDF5 dataset path containing the quadrature samples.
28 RealType start_time = 0.0; ///< Simulation time of the first sample in seconds.
29 std::uint64_t sample_count = 0; ///< Number of samples in the chunk.
30 std::uint64_t sample_start = 0; ///< Inclusive global sample index for the chunk start.
31 std::uint64_t sample_end_exclusive = 0; ///< Exclusive global sample index for the chunk end.
32 };
33
34 /// Metadata for one contiguous streaming output segment.
36 {
37 RealType start_time = 0.0; ///< Segment start time in seconds.
38 RealType end_time = 0.0; ///< Segment end time in seconds.
39 std::uint64_t sample_count = 0; ///< Number of samples emitted for the segment.
40 std::uint64_t sample_start = 0; ///< Inclusive global sample index for the segment start.
41 std::uint64_t sample_end_exclusive = 0; ///< Exclusive global sample index for the segment end.
42 std::optional<RealType> first_chirp_start_time = std::nullopt; ///< First emitted FMCW chirp start time.
43 std::optional<std::uint64_t> emitted_chirp_count = std::nullopt; ///< Number of FMCW chirps emitted.
44 std::optional<RealType> first_triangle_start_time = std::nullopt; ///< First emitted FMCW triangle start time.
45 std::optional<std::uint64_t> emitted_triangle_count = std::nullopt; ///< Number of FMCW triangles emitted.
46 std::optional<RealType> first_sfcw_step_start_time = std::nullopt; ///< First emitted SFCW step start time.
47 std::optional<std::uint64_t> emitted_sfcw_step_count = std::nullopt; ///< Number of SFCW steps emitted.
48 };
49
50 /// FMCW waveform metadata captured for a streaming output file.
52 {
53 std::string waveform_shape = "linear"; ///< FMCW waveform shape token: linear or triangle.
54 RealType chirp_bandwidth = 0.0; ///< Chirp bandwidth in hertz.
55 RealType chirp_duration = 0.0; ///< Active chirp duration in seconds.
56 RealType chirp_period = 0.0; ///< Chirp repetition period in seconds.
57 RealType chirp_rate = 0.0; ///< Frequency sweep rate in hertz per second.
58 RealType chirp_rate_signed = 0.0; ///< Signed frequency sweep rate in hertz per second.
59 std::string chirp_direction = "up"; ///< Frequency sweep direction token.
60 RealType start_frequency_offset = 0.0; ///< Start frequency offset relative to carrier in hertz.
61 std::optional<std::uint64_t> chirp_count = std::nullopt; ///< Optional finite chirp count.
62 std::optional<RealType> triangle_period = std::nullopt; ///< Full triangle period in seconds.
63 std::optional<std::uint64_t> triangle_count = std::nullopt; ///< Optional finite triangle count.
64 };
65
66 /// Metadata for one active FMCW transmitter schedule segment.
68 {
69 RealType start_time = 0.0; ///< Transmitter segment start time in seconds.
70 RealType end_time = 0.0; ///< Transmitter segment end time in seconds.
71 std::optional<RealType> first_chirp_start_time = std::nullopt; ///< First emitted chirp start in the segment.
72 std::optional<std::uint64_t> emitted_chirp_count = std::nullopt; ///< Number of chirps emitted in the segment.
73 std::optional<RealType> first_triangle_start_time =
74 std::nullopt; ///< First emitted triangle start in the segment.
75 std::optional<std::uint64_t> emitted_triangle_count = std::nullopt; ///< Number of triangles emitted.
76 };
77
78 /// Metadata for one FMCW illuminator represented in a streaming output file.
80 {
81 SimId transmitter_id = 0; ///< FMCW transmitter SimId.
82 std::string transmitter_name; ///< FMCW transmitter display name.
83 SimId waveform_id = 0; ///< FMCW waveform SimId.
84 std::string waveform_name; ///< FMCW waveform display name.
85 RealType carrier_frequency = 0.0; ///< Waveform carrier frequency in hertz.
86 FmcwMetadata waveform; ///< FMCW chirp parameters.
87 std::vector<FmcwSourceSegmentMetadata> segments = {}; ///< Active transmitter segments.
88 };
89
90 /// SFCW waveform metadata captured for a streaming output file.
92 {
93 RealType carrier_frequency = 0.0; ///< Waveform carrier frequency in hertz.
94 RealType start_frequency_offset = 0.0; ///< First-step offset relative to carrier in hertz.
95 RealType step_size = 0.0; ///< Uniform frequency step in hertz.
96 std::uint64_t step_count = 0; ///< Steps per sweep.
97 RealType dwell_time = 0.0; ///< Active dwell time per step in seconds.
98 RealType step_period = 0.0; ///< Step period in seconds.
99 std::optional<std::uint64_t> sweep_count = std::nullopt; ///< Optional finite sweep count.
100 RealType first_frequency = 0.0; ///< First RF step frequency in hertz.
101 RealType last_frequency = 0.0; ///< Last RF step frequency in hertz.
102 RealType frequency_span = 0.0; ///< First-to-last absolute span in hertz.
103 RealType effective_bandwidth = 0.0; ///< DFT-convention effective bandwidth in hertz.
104 RealType range_resolution = 0.0; ///< Approximate range resolution in meters.
105 RealType unambiguous_range = 0.0; ///< Uniform-step unambiguous range in meters.
106 };
107
108 /// Metadata for one active SFCW transmitter schedule segment.
110 {
111 RealType start_time = 0.0; ///< Transmitter segment start time in seconds.
112 RealType end_time = 0.0; ///< Transmitter segment end time in seconds.
113 std::optional<RealType> first_step_start_time = std::nullopt; ///< First emitted step start in the segment.
114 std::optional<std::uint64_t> emitted_step_count = std::nullopt; ///< Number of step starts in the segment.
115 };
116
117 /// Metadata for one SFCW illuminator represented in a streaming output file.
119 {
120 SimId transmitter_id = 0; ///< SFCW transmitter SimId.
121 std::string transmitter_name; ///< SFCW transmitter display name.
122 SimId waveform_id = 0; ///< SFCW waveform SimId.
123 std::string waveform_name; ///< SFCW waveform display name.
124 SfcwMetadata waveform; ///< SFCW waveform parameters.
125 std::vector<SfcwSourceSegmentMetadata> segments = {}; ///< Active transmitter segments.
126 };
127
128 /// Metadata for one receiver output file.
130 {
131 SimId receiver_id = 0; ///< Receiver SimId that owns the output file.
132 std::string receiver_name; ///< Receiver display name.
133 std::string mode; ///< Output mode label, such as pulsed or streaming.
134 std::string path; ///< Filesystem path to the generated output file.
135 RealType sampling_rate = 0.0; ///< Sample rate for this output file in hertz.
136 std::uint64_t total_samples = 0; ///< Total sample count written to the file.
137 std::uint64_t sample_start = 0; ///< Inclusive global sample index for the file start.
138 std::uint64_t sample_end_exclusive = 0; ///< Exclusive global sample index for the file end.
139 std::uint64_t pulse_count = 0; ///< Number of pulses represented in the file.
140 std::uint64_t min_pulse_length_samples = 0; ///< Minimum pulse length in samples.
141 std::uint64_t max_pulse_length_samples = 0; ///< Maximum pulse length in samples.
142 bool uniform_pulse_length = true; ///< True when every pulse has the same sample length.
143 std::vector<PulseChunkMetadata> chunks = {}; ///< Pulsed output chunks written to the file.
144 std::vector<StreamingSegmentMetadata> streaming_segments = {}; ///< Streaming segments written to the file.
145 std::optional<FmcwMetadata> fmcw = std::nullopt; ///< Optional FMCW metadata for streaming outputs.
146 std::vector<FmcwSourceMetadata> fmcw_sources = {}; ///< FMCW illuminators represented in the output.
147 std::optional<SfcwMetadata> sfcw = std::nullopt; ///< Optional SFCW metadata for streaming outputs.
148 std::vector<SfcwSourceMetadata> sfcw_sources = {}; ///< SFCW illuminators represented in the output.
149 std::string fmcw_dechirp_mode = "none"; ///< Receiver dechirp mode for FMCW streaming outputs.
150 std::string fmcw_dechirp_reference_source = "none"; ///< Receiver dechirp reference source.
151 std::optional<SimId> fmcw_dechirp_reference_transmitter_id = std::nullopt; ///< Referenced LO transmitter ID.
152 std::optional<std::string> fmcw_dechirp_reference_transmitter_name = std::nullopt; ///< LO transmitter name.
153 std::optional<SimId> fmcw_dechirp_reference_waveform_id = std::nullopt; ///< Custom LO waveform ID.
154 std::optional<std::string> fmcw_dechirp_reference_waveform_name = std::nullopt; ///< Custom LO waveform name.
155 std::optional<FmcwMetadata> fmcw_dechirp_reference_waveform = std::nullopt; ///< Custom LO waveform parameters.
156 bool fmcw_if_decimation_enabled = false; ///< True when IF-rate resampling is used.
157 bool fmcw_if_legacy_full_rate = false; ///< True for legacy full-rate dechirped IF output.
158 std::optional<RealType> fmcw_if_requested_sample_rate = std::nullopt; ///< Requested IF ADC rate in hertz.
159 std::optional<RealType> fmcw_if_sample_rate = std::nullopt; ///< Realized IF output sample rate in hertz.
160 std::optional<RealType> fmcw_if_input_sample_rate = std::nullopt; ///< Input simulation sample rate in hertz.
161 std::optional<unsigned> fmcw_if_resample_numerator = std::nullopt; ///< Reduced rational P.
162 std::optional<unsigned> fmcw_if_resample_denominator = std::nullopt; ///< Reduced rational Q.
163 std::optional<RealType> fmcw_if_decimation_factor = std::nullopt; ///< Input/output sample-rate ratio.
164 std::optional<RealType> fmcw_if_filter_bandwidth = std::nullopt; ///< One-sided IF passband in hertz.
165 std::optional<RealType> fmcw_if_filter_transition_width = std::nullopt; ///< IF transition width in hertz.
166 std::optional<RealType> fmcw_if_filter_stopband = std::nullopt; ///< IF stopband attenuation in dB.
167 std::optional<RealType> fmcw_if_filter_group_delay_seconds = std::nullopt; ///< Total filter delay.
168 std::optional<std::uint64_t> fmcw_if_compensated_integer_delay_samples =
169 std::nullopt; ///< Integer output-delay compensation.
171 std::nullopt; ///< Fractional output-delay compensation.
172 std::optional<std::uint64_t> fmcw_if_warmup_discard_samples =
173 std::nullopt; ///< Startup outputs discarded by the sink.
174 std::optional<unsigned> fmcw_if_phase_refinement = std::nullopt; ///< Polyphase refinement factor.
175 std::optional<RealType> fmcw_if_timing_error_seconds = std::nullopt; ///< Estimated timing error.
176 std::optional<RealType> fmcw_if_phase_error_radians = std::nullopt; ///< Estimated IF edge phase error.
177 std::optional<RealType> fmcw_if_noise_variance = std::nullopt; ///< Post-resampling complex noise variance.
178 bool fmcw_if_group_delay_compensated = false; ///< True when IF output timestamps are aligned to t_start.
179 };
180
181 /// Metadata for one VITA 49.2 receiver stream.
183 {
184 SimId receiver_id = 0; ///< Receiver SimId that owns the VRT stream.
185 std::string receiver_name; ///< Receiver display name.
186 std::uint32_t stream_id = 0; ///< Allocated 32-bit VRT Stream ID.
187 std::string mode = "unknown"; ///< Receiver mode token: pulsed, cw, fmcw, or unknown.
188 RealType sample_rate = 0.0; ///< Stream sample rate in hertz.
189 RealType reference_frequency = 0.0; ///< RF reference frequency in hertz.
190 std::uint64_t packets_emitted = 0; ///< Signal data packets emitted.
191 std::uint64_t samples_emitted = 0; ///< Complex samples emitted.
192 std::uint64_t packets_dropped = 0; ///< Data packets lost to socket send failures.
193 std::uint64_t samples_dropped = 0; ///< Complex samples lost to socket send failures.
194 std::uint64_t over_range_count = 0; ///< Samples clipped by fixed full-scale scaling.
195 std::uint64_t late_packet_count = 0; ///< Packets sent after their scheduled time.
196 std::uint64_t context_packet_count = 0; ///< Context packets emitted for this stream.
197 std::optional<RealType> first_sample_time = std::nullopt; ///< First signal sample time in seconds.
198 std::optional<RealType> end_sample_time = std::nullopt; ///< Exclusive stream end sample time in seconds.
199 std::optional<Vita49Timestamp> first_timestamp = std::nullopt; ///< First VRT UTC timestamp.
200 std::optional<Vita49Timestamp> end_timestamp = std::nullopt; ///< Exclusive stream end VRT UTC timestamp.
201 };
202
203 /// Metadata for the VITA 49.2 UDP output backend.
205 {
206 std::string endpoint_host; ///< Destination host.
207 std::uint16_t endpoint_port = 0; ///< Destination UDP port.
208 std::optional<std::uint64_t> epoch_unix_nanoseconds = std::nullopt; ///< Run epoch, if already fixed.
209 RealType adc_fullscale = 0.0; ///< Fixed ADC full-scale used for int16 IQ scaling.
210 std::uint16_t max_udp_payload = 1400; ///< Maximum UDP datagram payload in bytes.
211 std::uint32_t queue_depth = 1024; ///< Bounded blocking sender queue depth in packets.
212 std::string class_id = "0xFA52530001000101"; ///< Internal placeholder VRT Class ID.
213 std::vector<Vita49StreamMetadata> streams = {}; ///< Per-receiver VRT stream metadata and stats.
214 };
215
216 /// Metadata summary for the full simulation output set.
218 {
219 unsigned schema_version = 1; ///< Metadata schema version.
220 std::string simulation_name; ///< Simulation name from the loaded scenario.
221 std::string output_directory; ///< Directory containing generated output files.
222 RealType start_time = 0.0; ///< Simulation start time in seconds.
223 RealType end_time = 0.0; ///< Simulation end time in seconds.
224 RealType sampling_rate = 0.0; ///< Output sampling rate in hertz.
225 unsigned oversample_ratio = 1; ///< Oversampling ratio used during rendering.
226 std::vector<OutputFileMetadata> files; ///< Metadata for each generated output file.
227 std::optional<Vita49OutputMetadata> vita49 = std::nullopt; ///< Optional VITA 49.2 output metadata.
228 };
229
230 /// Thread-safe collector for simulation output metadata.
232 {
233 public:
234 /// Constructs a metadata collector for the specified output directory.
235 explicit OutputMetadataCollector(std::string output_dir);
236
237 /// Adds metadata for one generated output file.
238 void addFile(OutputFileMetadata file_metadata);
239
240 /// Returns a consistent snapshot of the collected metadata.
242
243 private:
244 mutable std::mutex _mutex; ///< Mutex guarding the metadata aggregate.
245 OutputMetadata _metadata; ///< Mutable aggregate metadata collected during simulation.
246 };
247
248 /// Serializes one output-file metadata entry to JSON.
249 [[nodiscard]] std::string outputFileMetadataToJsonString(const OutputFileMetadata& metadata);
250
251 /// Serializes a full simulation output metadata snapshot to JSON.
252 [[nodiscard]] std::string outputMetadataToJsonString(const OutputMetadata& metadata);
253
254 /// Builds the static VITA metadata section from runtime output configuration.
256}
Thread-safe collector for simulation output metadata.
void addFile(OutputFileMetadata file_metadata)
Adds metadata for one generated output file.
OutputMetadata snapshot() const
Returns a consistent snapshot of the collected metadata.
Global configuration file for the project.
double RealType
Type for real numbers.
Definition config.h:27
Vita49OutputMetadata vita49MetadataFromConfig(const Vita49OutputConfig &config)
Builds the static VITA metadata section from runtime output configuration.
std::string outputFileMetadataToJsonString(const OutputFileMetadata &metadata)
Serializes one output-file metadata entry to JSON.
std::string outputMetadataToJsonString(const OutputMetadata &metadata)
Serializes a full simulation output metadata snapshot to JSON.
uint64_t SimId
64-bit Unique Simulation ID.
Definition sim_id.h:18
math::Vec3 max
FMCW waveform metadata captured for a streaming output file.
RealType chirp_period
Chirp repetition period in seconds.
std::optional< std::uint64_t > chirp_count
Optional finite chirp count.
RealType chirp_rate
Frequency sweep rate in hertz per second.
RealType chirp_duration
Active chirp duration in seconds.
RealType chirp_bandwidth
Chirp bandwidth in hertz.
std::string chirp_direction
Frequency sweep direction token.
std::string waveform_shape
FMCW waveform shape token: linear or triangle.
std::optional< std::uint64_t > triangle_count
Optional finite triangle count.
RealType start_frequency_offset
Start frequency offset relative to carrier in hertz.
std::optional< RealType > triangle_period
Full triangle period in seconds.
RealType chirp_rate_signed
Signed frequency sweep rate in hertz per second.
Metadata for one FMCW illuminator represented in a streaming output file.
std::vector< FmcwSourceSegmentMetadata > segments
Active transmitter segments.
FmcwMetadata waveform
FMCW chirp parameters.
SimId transmitter_id
FMCW transmitter SimId.
std::string transmitter_name
FMCW transmitter display name.
SimId waveform_id
FMCW waveform SimId.
std::string waveform_name
FMCW waveform display name.
RealType carrier_frequency
Waveform carrier frequency in hertz.
Metadata for one active FMCW transmitter schedule segment.
std::optional< std::uint64_t > emitted_chirp_count
Number of chirps emitted in the segment.
std::optional< std::uint64_t > emitted_triangle_count
Number of triangles emitted.
RealType start_time
Transmitter segment start time in seconds.
RealType end_time
Transmitter segment end time in seconds.
std::optional< RealType > first_triangle_start_time
First emitted triangle start in the segment.
std::optional< RealType > first_chirp_start_time
First emitted chirp start in the segment.
Metadata for one receiver output file.
std::vector< FmcwSourceMetadata > fmcw_sources
FMCW illuminators represented in the output.
std::uint64_t max_pulse_length_samples
Maximum pulse length in samples.
std::optional< RealType > fmcw_if_noise_variance
Post-resampling complex noise variance.
std::optional< RealType > fmcw_if_requested_sample_rate
Requested IF ADC rate in hertz.
std::uint64_t total_samples
Total sample count written to the file.
std::string path
Filesystem path to the generated output file.
RealType sampling_rate
Sample rate for this output file in hertz.
std::vector< PulseChunkMetadata > chunks
Pulsed output chunks written to the file.
std::optional< RealType > fmcw_if_timing_error_seconds
Estimated timing error.
std::optional< std::string > fmcw_dechirp_reference_transmitter_name
LO transmitter name.
SimId receiver_id
Receiver SimId that owns the output file.
std::uint64_t sample_start
Inclusive global sample index for the file start.
std::string fmcw_dechirp_mode
Receiver dechirp mode for FMCW streaming outputs.
std::vector< SfcwSourceMetadata > sfcw_sources
SFCW illuminators represented in the output.
std::optional< FmcwMetadata > fmcw
Optional FMCW metadata for streaming outputs.
std::uint64_t sample_end_exclusive
Exclusive global sample index for the file end.
std::uint64_t pulse_count
Number of pulses represented in the file.
bool fmcw_if_legacy_full_rate
True for legacy full-rate dechirped IF output.
std::optional< std::uint64_t > fmcw_if_compensated_integer_delay_samples
Integer output-delay compensation.
std::optional< RealType > fmcw_if_decimation_factor
Input/output sample-rate ratio.
std::optional< RealType > fmcw_if_sample_rate
Realized IF output sample rate in hertz.
std::optional< RealType > fmcw_if_compensated_fractional_delay_samples
Fractional output-delay compensation.
std::uint64_t min_pulse_length_samples
Minimum pulse length in samples.
std::optional< FmcwMetadata > fmcw_dechirp_reference_waveform
Custom LO waveform parameters.
std::optional< RealType > fmcw_if_input_sample_rate
Input simulation sample rate in hertz.
std::string receiver_name
Receiver display name.
std::optional< SimId > fmcw_dechirp_reference_transmitter_id
Referenced LO transmitter ID.
std::optional< RealType > fmcw_if_filter_bandwidth
One-sided IF passband in hertz.
std::optional< SfcwMetadata > sfcw
Optional SFCW metadata for streaming outputs.
std::string mode
Output mode label, such as pulsed or streaming.
std::optional< RealType > fmcw_if_filter_stopband
IF stopband attenuation in dB.
std::optional< RealType > fmcw_if_phase_error_radians
Estimated IF edge phase error.
std::optional< unsigned > fmcw_if_resample_numerator
Reduced rational P.
std::optional< std::uint64_t > fmcw_if_warmup_discard_samples
Startup outputs discarded by the sink.
bool fmcw_if_decimation_enabled
True when IF-rate resampling is used.
bool fmcw_if_group_delay_compensated
True when IF output timestamps are aligned to t_start.
std::vector< StreamingSegmentMetadata > streaming_segments
Streaming segments written to the file.
std::optional< RealType > fmcw_if_filter_transition_width
IF transition width in hertz.
std::optional< RealType > fmcw_if_filter_group_delay_seconds
Total filter delay.
std::optional< std::string > fmcw_dechirp_reference_waveform_name
Custom LO waveform name.
std::string fmcw_dechirp_reference_source
Receiver dechirp reference source.
std::optional< unsigned > fmcw_if_phase_refinement
Polyphase refinement factor.
std::optional< unsigned > fmcw_if_resample_denominator
Reduced rational Q.
std::optional< SimId > fmcw_dechirp_reference_waveform_id
Custom LO waveform ID.
bool uniform_pulse_length
True when every pulse has the same sample length.
Metadata summary for the full simulation output set.
RealType sampling_rate
Output sampling rate in hertz.
RealType end_time
Simulation end time in seconds.
std::vector< OutputFileMetadata > files
Metadata for each generated output file.
std::optional< Vita49OutputMetadata > vita49
Optional VITA 49.2 output metadata.
RealType start_time
Simulation start time in seconds.
unsigned oversample_ratio
Oversampling ratio used during rendering.
unsigned schema_version
Metadata schema version.
std::string output_directory
Directory containing generated output files.
std::string simulation_name
Simulation name from the loaded scenario.
Metadata for one pulsed output chunk written to HDF5.
std::string i_dataset
HDF5 dataset path containing the in-phase samples.
std::uint64_t sample_end_exclusive
Exclusive global sample index for the chunk end.
RealType start_time
Simulation time of the first sample in seconds.
std::string q_dataset
HDF5 dataset path containing the quadrature samples.
std::uint64_t sample_count
Number of samples in the chunk.
std::uint64_t sample_start
Inclusive global sample index for the chunk start.
unsigned chunk_index
Zero-based chunk index in the receiver output sequence.
SFCW waveform metadata captured for a streaming output file.
RealType unambiguous_range
Uniform-step unambiguous range in meters.
RealType effective_bandwidth
DFT-convention effective bandwidth in hertz.
RealType start_frequency_offset
First-step offset relative to carrier in hertz.
RealType carrier_frequency
Waveform carrier frequency in hertz.
RealType frequency_span
First-to-last absolute span in hertz.
std::uint64_t step_count
Steps per sweep.
RealType dwell_time
Active dwell time per step in seconds.
RealType last_frequency
Last RF step frequency in hertz.
RealType step_size
Uniform frequency step in hertz.
RealType range_resolution
Approximate range resolution in meters.
RealType first_frequency
First RF step frequency in hertz.
RealType step_period
Step period in seconds.
std::optional< std::uint64_t > sweep_count
Optional finite sweep count.
Metadata for one SFCW illuminator represented in a streaming output file.
SimId transmitter_id
SFCW transmitter SimId.
std::vector< SfcwSourceSegmentMetadata > segments
Active transmitter segments.
SfcwMetadata waveform
SFCW waveform parameters.
std::string waveform_name
SFCW waveform display name.
std::string transmitter_name
SFCW transmitter display name.
SimId waveform_id
SFCW waveform SimId.
Metadata for one active SFCW transmitter schedule segment.
std::optional< std::uint64_t > emitted_step_count
Number of step starts in the segment.
RealType start_time
Transmitter segment start time in seconds.
std::optional< RealType > first_step_start_time
First emitted step start in the segment.
RealType end_time
Transmitter segment end time in seconds.
Metadata for one contiguous streaming output segment.
std::optional< RealType > first_sfcw_step_start_time
First emitted SFCW step start time.
RealType start_time
Segment start time in seconds.
std::optional< std::uint64_t > emitted_chirp_count
Number of FMCW chirps emitted.
std::optional< RealType > first_chirp_start_time
First emitted FMCW chirp start time.
std::uint64_t sample_start
Inclusive global sample index for the segment start.
std::uint64_t sample_count
Number of samples emitted for the segment.
std::uint64_t sample_end_exclusive
Exclusive global sample index for the segment end.
std::optional< RealType > first_triangle_start_time
First emitted FMCW triangle start time.
std::optional< std::uint64_t > emitted_triangle_count
Number of FMCW triangles emitted.
std::optional< std::uint64_t > emitted_sfcw_step_count
Number of SFCW steps emitted.
RealType end_time
Segment end time in seconds.
Metadata for the VITA 49.2 UDP output backend.
std::optional< std::uint64_t > epoch_unix_nanoseconds
Run epoch, if already fixed.
std::string class_id
Internal placeholder VRT Class ID.
std::uint16_t max_udp_payload
Maximum UDP datagram payload in bytes.
std::vector< Vita49StreamMetadata > streams
Per-receiver VRT stream metadata and stats.
std::string endpoint_host
Destination host.
RealType adc_fullscale
Fixed ADC full-scale used for int16 IQ scaling.
std::uint32_t queue_depth
Bounded blocking sender queue depth in packets.
std::uint16_t endpoint_port
Destination UDP port.
Metadata for one VITA 49.2 receiver stream.
std::optional< RealType > end_sample_time
Exclusive stream end sample time in seconds.
std::optional< Vita49Timestamp > first_timestamp
First VRT UTC timestamp.
std::uint64_t over_range_count
Samples clipped by fixed full-scale scaling.
std::string mode
Receiver mode token: pulsed, cw, fmcw, or unknown.
std::uint64_t packets_dropped
Data packets lost to socket send failures.
std::uint64_t samples_emitted
Complex samples emitted.
RealType sample_rate
Stream sample rate in hertz.
RealType reference_frequency
RF reference frequency in hertz.
std::optional< RealType > first_sample_time
First signal sample time in seconds.
std::uint64_t context_packet_count
Context packets emitted for this stream.
std::uint64_t packets_emitted
Signal data packets emitted.
std::string receiver_name
Receiver display name.
std::uint64_t samples_dropped
Complex samples lost to socket send failures.
std::uint64_t late_packet_count
Packets sent after their scheduled time.
std::uint32_t stream_id
Allocated 32-bit VRT Stream ID.
std::optional< Vita49Timestamp > end_timestamp
Exclusive stream end VRT UTC timestamp.
SimId receiver_id
Receiver SimId that owns the VRT stream.