aboutsummaryrefslogtreecommitdiffstats
path: root/host/include
diff options
context:
space:
mode:
Diffstat (limited to 'host/include')
-rw-r--r--host/include/uhd/utils/math.hpp18
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