39 LOG(Level::WARNING,
"Timing source '{}' already initialized. Skipping re-initialization.", _name);
44 _frequency =
timing->getFrequency();
46 std::normal_distribution normal_dist{0.0, 1.0};
48 _freq_offset =
timing->getFreqOffset().value_or(0);
49 if (
const std::optional<RealType> random_freq_stdev =
timing->getRandomFreqOffsetStdev(); random_freq_stdev)
51 LOG(Level::INFO,
"Timing source '{}': applying random frequency offset with stdev {} Hz.", _name,
52 random_freq_stdev.value());
53 _freq_offset += normal_dist(_rng) * random_freq_stdev.value();
56 _phase_offset =
timing->getPhaseOffset().value_or(0);
57 if (
const std::optional<RealType> random_phase_stdev =
timing->getRandomPhaseOffsetStdev(); random_phase_stdev)
59 LOG(Level::INFO,
"Timing source '{}': applying random phase offset with stdev {} radians.", _name,
60 random_phase_stdev.value());
61 _phase_offset += normal_dist(_rng) * random_phase_stdev.value();
64 timing->copyAlphas(_alphas, _weights);
66 _model = std::make_unique<noise::ClockModelGenerator>(_rng, _alphas, _weights, _frequency, _phase_offset,
69 if (
timing->getFrequency() == 0.0f)
71 LOG(Level::INFO,
"Timing source frequency not set, results could be incorrect.");
74 _sync_on_pulse =
timing->getSyncOnPulse();