aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/include/uhdlib/usrp/multi_usrp_utils.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/include/uhdlib/usrp/multi_usrp_utils.hpp')
-rw-r--r--host/lib/include/uhdlib/usrp/multi_usrp_utils.hpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/host/lib/include/uhdlib/usrp/multi_usrp_utils.hpp b/host/lib/include/uhdlib/usrp/multi_usrp_utils.hpp
new file mode 100644
index 000000000..40c360339
--- /dev/null
+++ b/host/lib/include/uhdlib/usrp/multi_usrp_utils.hpp
@@ -0,0 +1,37 @@
+//
+// Copyright 2021 Ettus Research, a National Instruments Brand
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+
+#pragma once
+
+#include <uhd/types/ranges.hpp>
+
+namespace uhd {
+
+/*! Create a total tune range for multi_usrp objects
+ *
+ * Digital tuning can be used to shift the baseband below / past the tunable
+ * limits of the actual RF front-end. The baseband filter, located on the
+ * daughterboard, however, limits the useful instantaneous bandwidth. We
+ * allow the user to tune to the edge of the filter, where the roll-off
+ * begins. This prevents the user from tuning past the point where less
+ * than half of the spectrum would be useful.
+ * Also, we make sure that frequencies don't become negative.
+ */
+static meta_range_t make_overall_tune_range(
+ const meta_range_t& fe_range, const meta_range_t& dsp_range, const double bw)
+{
+ meta_range_t range;
+ for (const range_t& sub_range : fe_range) {
+ range.push_back(range_t(
+ std::max(0.0, sub_range.start() + std::max(dsp_range.start(), -bw / 2)),
+ sub_range.stop() + std::min(dsp_range.stop(), bw / 2),
+ dsp_range.step()));
+ }
+ return range;
+}
+
+
+} // namespace uhd