diff options
Diffstat (limited to 'host/include')
-rw-r--r-- | host/include/uhd/utils/math.hpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/host/include/uhd/utils/math.hpp b/host/include/uhd/utils/math.hpp index 4918ddf2e..6c8fceae9 100644 --- a/host/include/uhd/utils/math.hpp +++ b/host/include/uhd/utils/math.hpp @@ -278,6 +278,24 @@ inline constexpr int sign(T x) return (T(0) < x) - (x < T(0)); } +//! Return a wrapped frequency that is the equivalent frequency in the first +// Nyquist zone. +// +// Examples: +// - Just above the sampling rate: +// wrap_frequency(250e6, 200e6) == 50e6 +// - Just outside the Nyquist zone: +// wrap_frequency(120e6, 200e6) == -80e6 +// - Also works for negative frequencies: +// wrap_frequency(-250e6, 200e6) == -50e6 +inline double wrap_frequency(const double requested_freq, const double rate) +{ + double freq = std::fmod(requested_freq, rate); + if (std::abs(freq) > rate / 2.0) + freq -= uhd::math::sign(freq) * rate; + return freq; +} + } // namespace math } // namespace uhd |