37 "{} will buffer about {:.2f} GiB of FMCW streaming output for simulation_duration={} s at "
38 "effective_rate={} Hz. Large simulation_time * bandwidth/rate products need chunking.",
57 if (chirp_duration <= 0.0)
61 if (chirp_bandwidth <= 0.0)
77 "{} is within 10% of the FMCW aliasing limit: effective_rate={} Hz, max_baseband={} Hz.",
owner,
91 if (
const auto* fmcw =
wave.getFmcwChirpSignal(); fmcw !=
nullptr)
93 if (fmcw->getChirpPeriod() < fmcw->getChirpDuration())
95 throw_error(
owner +
" has chirp_period shorter than chirp_duration; FMCW requires T_rep >= T_c.");
100 sweep_start + (fmcw->isDownChirp() ? -fmcw->getChirpBandwidth() : fmcw->getChirpBandwidth());
107 if (
const auto* triangle =
wave.getFmcwTriangleSignal(); triangle !=
nullptr)
139 "{} has schedule period [{}, {}] duration {} s shorter than FMCW chirp_duration T_c={} s.",
owner,
153 if (
const auto* fmcw =
wave.getFmcwChirpSignal(); fmcw !=
nullptr)
159 const auto* triangle =
wave.getFmcwTriangleSignal();
160 if (triangle ==
nullptr)
169 if (duration <
T_tri)
172 "{} has schedule period [{}, {}] duration {} s shorter than FMCW triangle_period T_tri={} s.",
181 "{} has schedule period [{}, {}] that is not an integer multiple of FMCW triangle_period ({}s); "
182 "{}s will be silent after the last complete triangle.",
FMCW linear chirp signal implementation.
RealType getChirpDuration() const noexcept
Gets the chirp duration in seconds.
RealType getChirpPeriod() const noexcept
Gets the chirp period in seconds.
Class representing a radar signal with associated properties.
double RealType
Type for real numbers.
std::complex< RealType > ComplexType
Type for complex numbers.
Header file for the logging system.
@ WARNING
Warning level for potentially harmful situations.
RealType endTime() noexcept
Get the end time for the simulation.
RealType rate() noexcept
Get the rendering sample rate.
RealType startTime() noexcept
Get the start time for the simulation.
unsigned oversampleRatio() noexcept
Get the oversampling ratio.
OperationMode
Defines the operational mode of a radar component.
@ PULSED_MODE
The component operates in a pulsed mode.
@ CW_MODE
The component operates in a continuous-wave mode.
@ FMCW_MODE
The component operates in an FMCW streaming mode.
void validateWaveform(const fers_signal::RadarSignal &wave, const std::string &owner, const Thrower &throw_error)
Validates that a waveform is compatible with FMCW streaming constraints.
std::function< void(const std::string &)> Thrower
Callback used by validators to report an error through the caller's mechanism.
void validateSchedule(const std::vector< radar::SchedulePeriod > &schedule, const fers_signal::FmcwChirpSignal &fmcw, const std::string &owner, const Thrower &throw_error)
Validates that an FMCW waveform schedule can emit complete chirps.
void validateWaveformModeMatch(const fers_signal::RadarSignal &wave, const radar::OperationMode mode, const std::string &owner, const Thrower &throw_error)
Validates that a waveform and radar operation mode are compatible.
Defines the Parameters struct and provides methods for managing simulation parameters.
Classes for handling radar waveforms and signals.
Represents a time period during which the transmitter is active.
RealType start
Period start time in seconds.