FERS 0.1.0
The Flexible Extensible Radar Simulator
Loading...
Searching...
No Matches
sim_threading.cpp File Reference

Implements the core event-driven simulation engine. More...

#include "sim_threading.h"
#include <algorithm>
#include <array>
#include <atomic>
#include <chrono>
#include <cmath>
#include <complex>
#include <cstddef>
#include <cstdint>
#include <format>
#include <limits>
#include <optional>
#include <utility>
#include "logging.h"
#include "math/path_utils.h"
#include "memory_projection.h"
#include "parameters.h"
#include "processing/finalizer.h"
#include "processing/finalizer_pipeline.h"
#include "processing/signal_processor.h"
#include "radar/receiver.h"
#include "radar/target.h"
#include "radar/transmitter.h"
#include "serial/hdf5_output_sink.h"
#include "serial/response.h"
#include "serial/vita49/vita49_output_sink.h"
#include "signal/if_resampler.h"
#include "signal/radar_signal.h"
#include "sim_events.h"
#include "simulation/channel_model.h"
#include "thread_pool.h"
#include "timing/timing.h"
#include "world.h"
+ Include dependency graph for sim_threading.cpp:

Go to the source code of this file.

Namespaces

namespace  core
 

Functions

OutputMetadata core::runEventDrivenSim (World *world, pool::ThreadPool &pool, const std::function< void(const std::string &, int, int)> &progress_callback, const std::string &output_dir, const OutputConfig &output_config=OutputConfig{}, std::function< bool()> cancel_callback=nullptr, bool *cancelled=nullptr, ReceiverOutputTelemetryCallback telemetry_callback=nullptr)
 Runs the unified, event-driven radar simulation.
 

Detailed Description

Implements the core event-driven simulation engine.

This file contains the primary simulation loop, which orchestrates the entire simulation process. It operates on a unified, event-driven model capable of handling both pulsed and continuous-wave (CW) radar systems concurrently.

Definition in file sim_threading.cpp.

Variable Documentation

◆ a

◆ b

◆ c

◆ lower_u

RealType lower_u

Definition at line 469 of file sim_threading.cpp.

◆ max

math::Vec3 max {}

Definition at line 233 of file sim_threading.cpp.

233{};

Referenced by fers_signal::FmcwChirpSignal::activeChirpIndexAt(), core::World::add(), core::World::add(), core::World::add(), core::World::add(), core::World::add(), core::World::add(), core::World::add(), XmlElement::addChild(), serial::xml_serializer_utils::addChildWithNumber(), serial::xml_serializer_utils::addChildWithText(), serial::addChunkToFile(), math::Path::addCoord(), math::RotationPath::addCoord(), core::OutputMetadataCollector::addFile(), serial::xml_parser_utils::addIncludeFilesToMainDocument(), radar::Receiver::addInterferenceToLog(), serial::Response::addInterpPoint(), processing::pipeline::addPhaseNoiseToWindow(), core::addPulsedReceiverProjection(), radar::Receiver::addResponseToInbox(), core::addStreamingReceiverProjection(), processing::pipeline::advanceTimingModel(), serial::kml_generator_utils::antenna3DbDropAngle(), serial::antenna_pattern_requires_replacement(), serial::kml_generator_utils::antennaCarrierWavelength(), serial::Hdf5OutputSink::Impl::appendStreamingBlock(), processing::pipeline::applyDownsampling(), processing::pipeline::applyDownsamplingAndQuantization(), processing::pipeline::applyPulsedInterference(), processing::pipeline::applyPulsedInterference(), processing::pipeline::applyStreamingInterference(), processing::applyThermalNoise(), processing::applyThermalNoiseAtSampleRate(), fers_signal::approximateFmcwIfRateRatio(), serial::xml_parser_utils::assign_id_from_attribute(), fers_signal::FmcwChirpSignal::basebandPhaseForChirpTime(), fers_signal::FmcwTriangleSignal::basebandPhaseForTriangleTime(), radar::Receiver::beginFmcwIfResamplingSegment(), core::besselJ1(), serial::vita49::Vita49ContextBuilder::build(), simulation::CwPhaseNoiseLookup::build(), processing::buildReceiverSampleBlock(), processing::buildReceiverStreamDescriptor(), processing::buildStreamingOutputMetadata(), serial::vita49::ByteWriter::ByteWriter(), serial::kml_generator_utils::calculateDestinationCoordinate(), simulation::calculateDirectPathContribution(), processing::pipeline::calculateJitteredStart(), simulation::calculatePreviewLinks(), simulation::calculateReflectedPathContribution(), simulation::calculateResponse(), simulation::calculateStreamingDirectPathContribution(), simulation::calculateStreamingReferencePhase(), simulation::calculateStreamingReflectedPathContribution(), radar::Receiver::checkFlag(), XmlElement::childElement(), serial::rotation_warning_utils::clear_captured_warnings(), radar::Receiver::clearFlag(), noise::ClockModelGenerator::ClockModelGenerator(), timing::Timing::clone(), serial::vita49::UdpSender::close(), serial::Hdf5OutputSink::Impl::closePulsedStream(), serial::Hdf5OutputSink::Impl::closeStream(), serial::vita49::Vita49OutputSink::closeStream(), serial::Hdf5OutputSink::Impl::closeStreamingStream(), core::collectCwPhaseNoiseTimings(), serial::xml_parser_utils::collectIncludeElements(), fers_signal::DownsamplingSink::consume(), fers_signal::FmcwIfResamplingSink::Stage::consume(), fers_signal::FmcwIfResamplingSink::consume(), serial::vita49::PacedSender::consumeDroppedDatagrams(), radar::Receiver::consumeFmcwIfBlock(), fers_signal::FmcwIfResamplingSink::Stage::consumeZeroInput(), fers_signal::FmcwIfResamplingSink::consumeZeroInput(), timing::PrototypeTiming::copyAlphas(), core::countFmcwChirpStarts(), core::countFmcwTriangleStarts(), core::countProcessors(), serial::xml_parser_utils::createDefaultAssetLoaders(), xml_detail::createDocument(), radar::createFileTarget(), radar::createIsoTarget(), xml_detail::createNode(), fers_signal::DecadeUpsampler::DecadeUpsampler(), serial::vita49::StreamRegistry::descriptor(), fers_signal::downsample(), fers_signal::DownsamplingSink::DownsamplingSink(), radar::Receiver::drainInbox(), serial::vita49::PacedSender::droppedContextPacketCount(), serial::vita49::PacedSender::droppedDataPacketCount(), serial::vita49::PacedSender::droppedSampleCount(), core::World::dumpEventQueue(), XmlDocument::dumpToString(), core::World::earliestPhaseNoiseLookupStart(), serial::vita49::Vita49OutputSink::emitContextHeartbeat(), pool::ThreadPool::enqueue(), serial::vita49::PacedSender::enqueue(), radar::Receiver::enqueueFinalizerJob(), xml_detail::equals(), serial::Hdf5OutputSink::Impl::expectedStreamingSamples(), processing::pipeline::exportStreamingToHdf5(), serial::rotation_angle_utils::external_rotation_rate_to_internal(), noise::FAlphaBranch::FAlphaBranch(), radar::FileTarget::FileTarget(), fers_signal::IirFilter::filter(), fers_signal::IirFilter::filter(), fers_signal::FirFilter::filter(), math::Path::finalize(), serial::Hdf5OutputSink::Impl::finalize(), serial::vita49::Vita49OutputSink::finalize(), finalizeCubic(), serial::kml_generator_utils::find3DbDropAngle(), core::World::findAntenna(), serial::kml_generator_utils::findGaussian3DbDropAngle(), serial::kml_generator_utils::findParabolic3DbDropAngle(), core::World::findPlatform(), core::World::findReceiver(), serial::kml_generator_utils::findSquareHorn3DbDropAngle(), core::World::findTarget(), core::World::findTiming(), core::World::findTransmitter(), core::World::findTransmitterByName(), core::World::findWaveform(), core::World::findWaveformByName(), fers_signal::DownsamplingSink::finish(), fers_signal::FmcwIfResamplingSink::finish(), core::firstFmcwChirpStart(), core::firstFmcwTriangleStart(), serial::vita49::PacedSender::flush(), noise::FAlphaBranch::flush(), radar::Receiver::flushFmcwIfResampling(), fers_signal::fmcwChirpDirectionToken(), fers_signal::FmcwIfResamplingSink::FmcwIfResamplingSink(), core::formatByteSize(), serial::kml_generator_utils::formatCoordinates(), math::from_json(), math::from_json(), timing::from_json(), math::from_json(), math::from_json(), radar::from_json(), antenna::from_json(), fers_signal::from_json(), math::from_json(), serial::kml_generator_utils::generateAntennaKml(), serial::kml_generator_utils::generateCircleCoordinates(), SimIdGenerator::generateDebugId(), serial::kml_generator_utils::generateDirectionalAntennaKml(), serial::kml_generator_utils::generateDynamicPathKml(), SimIdGenerator::generateId(), serial::kml_generator_utils::generateIsotropicAntennaKml(), serial::KmlGenerator::generateKml(), serial::kml_generator_utils::generateKmlToStream(), serial::kml_generator_utils::generatePlatformPathKml(), serial::kml_generator_utils::generateStaticPlacemarkKml(), serial::kml_generator_utils::generateTrackEndpointsKml(), serial::xml_parser_utils::get_attribute_bool(), serial::xml_parser_utils::get_child_real_type(), pool::ThreadPool::getAvailableThreads(), interp::InterpFilter::getFilter(), radar::Radar::getGain(), radar::Transmitter::getNextPulseTime(), radar::Receiver::getNextWindowTime(), radar::Radar::getNoiseTemperature(), radar::Receiver::getNoiseTemperature(), XmlElement::getOptionalAttribute(), serial::kml_generator_utils::getPlacemarkStyleForPlatform(), math::Path::getPosition(), math::RotationPath::getPosition(), getPositionCubic(), getPositionLinear(), getPositionStatic(), serial::kml_generator_utils::getPrimaryRadar(), radar::FileTarget::getRcs(), XmlDocument::getRootElement(), XmlElement::getSafeAttribute(), noise::FAlphaBranch::getSample(), XmlElement::getText(), math::Path::getVelocity(), radar::Receiver::getWindowCount(), radar::Receiver::getWindowStart(), core::SimulationEngine::handleRxPulsedWindowEnd(), core::SimulationEngine::handleRxPulsedWindowStart(), core::SimulationEngine::handleRxStreamingEnd(), core::SimulationEngine::handleRxStreamingStart(), core::SimulationEngine::handleTxPulsedStart(), core::SimulationEngine::handleTxStreamingEnd(), serial::rotation_warning_utils::infer_unit_from_value(), timing::Timing::initializeModel(), serial::Hdf5OutputSink::Impl::initializeRun(), serial::Hdf5OutputSink::initializeRun(), serial::vita49::Vita49OutputSink::initializeRun(), fers_signal::FmcwChirpSignal::instantaneousBasebandPhase(), fers_signal::FmcwTriangleSignal::instantaneousBasebandPhase(), serial::rotation_angle_utils::internal_azimuth_rate_to_external(), serial::rotation_angle_utils::internal_elevation_rate_to_external(), interp::InterpFilter::interpFilter(), fers_signal::FmcwChirpSignal::isActiveAt(), serial::Hdf5OutputSink::Impl::isPulsed(), core::isVita49Enabled(), serial::json_to_world(), interp::InterpFilter::kaiserWinCompute(), serial::vita49::PacedSender::latePacketCount(), fers_signal::Signal::load(), XmlDocument::loadFile(), XmlDocument::loadString(), serial::loadWaveformFromFile(), core::logSimulationMemoryProjection(), serial::kml_generator_utils::logSymbolicAntennaKml(), core::makeActiveSource(), core::makeActiveSourceFromWaveform(), serial::vita49::makeComplexInt16PayloadFormat(), serial::vita49::Vita49Packetizer::makeContextPacket(), serial::vita49::makeHeader(), serial::vita49::makeVita49OutputSink(), serial::vita49::maxComplexSamplesPerSignalPacket(), serial::rotation_warning_utils::maybe_warn_about_rotation_value(), core::memoryProjectionToJsonString(), mergeXmlDocuments(), serial::monostatic_transmitter_json(), noise::MultirateGenerator::MultirateGenerator(), serial::vita49::UdpSender::open(), serial::Hdf5OutputSink::Impl::openStream(), serial::vita49::Vita49OutputSink::openStream(), math::Vec3::operator*=(), math::operator+(), math::operator-(), serial::vita49::UdpSender::operator=(), core::outputFileMetadataToJsonString(), core::outputMetadataToJsonString(), serial::Hdf5OutputSink::Impl::outputPath(), serial::vita49::Vita49Packetizer::packetize(), serial::parse_antenna_from_json(), serial::parse_required_update_antenna(), serial::parse_timing_from_json(), serial::parse_waveform_from_json(), serial::xml_parser_utils::parseAntenna(), serial::xml_parser_utils::parseCoordinateSystemParameter(), radar::parseDechirpModeToken(), radar::parseDechirpReferenceSourceToken(), serial::xml_parser_utils::parseFixedRotation(), fers_signal::parseFmcwChirpDirection(), serial::xml_parser_utils::parseMonostatic(), serial::xml_parser_utils::parseMotionPath(), serial::xml_parser_utils::parseOptionalNumericParameters(), serial::xml_parser_utils::parseOriginParameter(), serial::xml_parser_utils::parseParameters(), serial::xml_parser_utils::parsePlatform(), serial::xml_parser_utils::parsePlatformElements(), serial::xml_parser_utils::parseReceiver(), serial::xml_parser_utils::parseReceiverWithMode(), serial::xml_parser_utils::parseRotationAngleUnit(), serial::xml_parser_utils::parseRotationPath(), serial::xml_parser_utils::parseSchedule(), serial::parseSimulation(), serial::parseSimulationFromString(), serial::xml_parser_utils::parseTarget(), serial::xml_parser_utils::parseTiming(), serial::xml_parser_utils::parseTransmitter(), serial::xml_parser_utils::parseTransmitterWithMode(), serial::xml_parser_utils::parseUnsignedParameter(), serial::xml_parser_utils::parseUtmCoordinateSystem(), serial::xml_parser_utils::parseWaveform(), simulation::CwPhaseNoiseLookup::phaseDifference(), fers_signal::planFmcwIfResampler(), core::SimulationEngine::processEvent(), serial::xml_parser_utils::processParsedDocument(), serial::kml_generator_utils::processPlatform(), radar::processRawSchedule(), core::SimulationEngine::processStreamingPhysics(), core::projectSimulationMemory(), radar::Receiver::prunePulsedInterferenceEndingBefore(), processing::quantizeAndScaleWindow(), serial::readPattern(), serial::readPulseData(), serial::Hdf5OutputSink::Impl::registerStream(), serial::vita49::StreamRegistry::registerStream(), serial::vita49::Vita49OutputSink::registerStream(), removeIncludeElements(), fers_signal::Signal::render(), fers_signal::RadarSignal::render(), fers_signal::CwSignal::render(), fers_signal::FmcwChirpSignal::render(), fers_signal::FmcwTriangleSignal::render(), serial::Response::renderBinary(), fers_signal::Signal::renderSlice(), fers_signal::RadarSignal::renderSlice(), serial::Response::renderSlice(), processing::renderWindow(), core::World::replace(), core::World::replace(), core::World::replace(), core::World::replace(), core::ProgressReporter::report(), noise::ClockModelGenerator::reset(), fers_signal::FmcwIfResamplingSink::reset(), noise::MultirateGenerator::reset(), serial::xml_parser_utils::resolve_reference_id(), core::World::resolveReceiverDechirpReferences(), params::rotationAngleUnitFromToken(), core::SimulationEngine::run(), core::runEventDrivenSim(), processing::runPulsedFinalizer(), simulation::CwPhaseNoiseLookup::sample(), simulation::CwPhaseNoiseBuffer::sampleAt(), XmlDocument::saveFile(), processing::scaleToInt16FixedFullscale(), core::World::scheduleInitialEvents(), serial::vita49::UdpSender::send(), serial::vita49::PacedSender::sendFailureCount(), serial::vita49::PacedSender::sentPacketCount(), serial::xml_serializer_utils::serializeAntenna(), serial::vita49::Vita49Serializer::serializeContext(), serial::xml_serializer_utils::serializeMonostatic(), serial::xml_serializer_utils::serializeMotionPath(), serial::xml_serializer_utils::serializeParameters(), serial::xml_serializer_utils::serializePlatform(), serial::xml_serializer_utils::serializeReceiver(), serial::xml_serializer_utils::serializeReceiverFmcwMode(), serial::xml_serializer_utils::serializeRotation(), serial::xml_serializer_utils::serializeSchedule(), serial::vita49::Vita49Serializer::serializeSignalData(), serial::vita49::Vita49Serializer::serializeSignalDataFixedFullscale(), serial::xml_serializer_utils::serializeTarget(), serial::xml_serializer_utils::serializeTiming(), serial::xml_serializer_utils::serializeTransmitter(), serial::xml_serializer_utils::serializeWaveform(), radar::Receiver::setActive(), params::setAdcBits(), timing::PrototypeTiming::setAlpha(), radar::Radar::setAntenna(), radar::Radar::setAttached(), XmlElement::setAttribute(), serial::xml_serializer_utils::setAttributeFromBool(), params::setC(), math::RotationPath::setConstantRate(), params::setCoordinateSystem(), radar::Receiver::setDechirpReference(), fers_signal::RadarSignal::setFilename(), radar::Receiver::setFlag(), radar::Target::setFluctuationModel(), radar::Receiver::setFmcwIfChainRequest(), radar::Receiver::setFmcwIfOutputCallback(), timing::PrototypeTiming::setFreqOffset(), timing::PrototypeTiming::setFrequency(), math::RotationPath::setInterp(), math::Path::setInterp(), radar::Receiver::setNoiseTemperature(), serial::xml_parser_utils::setOptionalRealParameter(), serial::xml_parser_utils::setOptionalUnsignedParameter(), params::setOrigin(), timing::PrototypeTiming::setPhaseOffset(), radar::Transmitter::setPrf(), timing::PrototypeTiming::setRandomFreqOffsetStdev(), timing::PrototypeTiming::setRandomPhaseOffsetStdev(), params::setRandomSeed(), params::setRate(), radar::Receiver::setResolvedDechirpSources(), XmlDocument::setRootElement(), radar::Receiver::setSchedule(), radar::Transmitter::setSchedule(), radar::Transmitter::setSignal(), XmlElement::setText(), params::setThreads(), radar::Radar::setTiming(), radar::Transmitter::setWave(), radar::Receiver::setWindowProperties(), serial::rotation_warning_utils::should_warn(), core::SimulationEngine::SimulationEngine(), serial::kml_generator_utils::sincAntennaGain(), noise::ClockModelGenerator::skipSamples(), noise::MultirateGenerator::skipSamples(), core::OutputMetadataCollector::snapshot(), serial::vita49::Vita49OutputSink::snapshotStats(), simulation::solveRe(), simulation::solveReDirect(), serial::vita49::PacedSender::start(), serial::Hdf5OutputSink::Impl::stateFor(), serial::vita49::PacedSender::stop(), serial::Hdf5OutputSink::Impl::submitBlock(), serial::Hdf5OutputSink::submitBlock(), serial::vita49::Vita49OutputSink::submitBlock(), core::World::swap(), fers_signal::FmcwIfResamplingSink::Stage::take(), serial::rotation_warning_utils::take_captured_warnings(), fers_signal::DownsamplingSink::takeOutput(), fers_signal::FmcwIfResamplingSink::takeOutput(), pool::ThreadPool::ThreadPool(), serial::vita49::timestampFromEpoch(), antenna::to_json(), math::to_json(), radar::to_json(), timing::to_json(), fers_signal::to_json(), radar::to_json(), math::to_json(), radar::to_json(), radar::to_json(), radar::to_json(), math::to_json(), xml_detail::toString(), xml_detail::toString(), serial::vita49::UdpSender::UdpSender(), serial::update_antenna_from_json(), serial::update_existing_antenna_pattern_fields(), serial::update_monostatic_from_json(), serial::update_monostatic_receiver_basics(), serial::update_monostatic_schedule_from_json(), serial::update_monostatic_timing_from_json(), serial::update_parameters_from_json(), serial::update_platform_paths_from_json(), serial::update_receiver_antenna_from_json(), serial::update_receiver_from_json(), serial::update_receiver_mode_from_json(), serial::update_receiver_noise_and_flags_from_json(), serial::update_receiver_schedule_from_json(), serial::update_receiver_timing_from_json(), serial::update_target_from_json(), serial::update_timing_from_json(), serial::update_transmitter_antenna_from_json(), serial::update_transmitter_from_json(), serial::update_transmitter_mode_from_json(), serial::update_transmitter_schedule_from_json(), serial::update_transmitter_timing_from_json(), serial::update_transmitter_waveform_from_json(), fers_signal::upsample(), fers_signal::DecadeUpsampler::upsample(), serial::validate_transmitter_signal_state(), serial::fmcw_validation::validateSchedule(), serial::fmcw_validation::validateSchedule(), serial::fmcw_validation::validateWaveform(), serial::fmcw_validation::validateWaveformModeMatch(), XmlDocument::validateWithDtd(), XmlDocument::validateWithXsd(), serial::xml_parser_utils::validateXml(), interp::InterpSetData::value(), core::vita49MetadataFromConfig(), pool::ThreadPool::wait(), radar::Receiver::waitAndDequeueFinalizerJob(), serial::world_to_json(), serial::world_to_xml_string(), serial::kml_generator_utils::writeAntennaBeamLine(), serial::vita49::ByteWriter::writeAsciiMetadata(), serial::vita49::ByteWriter::writeF64(), serial::kml_generator_utils::writeKmlHeaderAndStyles(), serial::writeOutputFileMetadataAttributes(), serial::kml_generator_utils::writePoint(), serial::Hdf5OutputSink::Impl::writePulsedBlock(), xml_detail::XmlCharBuffer::XmlCharBuffer(), serial::Hdf5OutputSink::~Hdf5OutputSink(), pool::ThreadPool::~ThreadPool(), and serial::vita49::Vita49OutputSink::~Vita49OutputSink().

◆ min

math::Vec3 min {}

Definition at line 232 of file sim_threading.cpp.

232{};

◆ root_u

RealType root_u

Definition at line 468 of file sim_threading.cpp.

◆ segment_length

RealType segment_length

Definition at line 467 of file sim_threading.cpp.

◆ unbounded

bool unbounded {false}

Definition at line 235 of file sim_threading.cpp.

235{false};

◆ upper_u

RealType upper_u

Definition at line 470 of file sim_threading.cpp.

◆ valid

bool valid {false}

Definition at line 234 of file sim_threading.cpp.

234{false};