diff options
author | Martin Braun <martin.braun@ettus.com> | 2021-06-09 14:54:23 +0200 |
---|---|---|
committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2021-06-09 16:58:57 -0500 |
commit | 4574063639a3aa5389005f646577d5644f72d5d3 (patch) | |
tree | 97b9fc501bf708d7458b723c25a8841eb7ebe9de /host/lib | |
parent | 4f64b54e218232bc190b2aa091698781e5d1d12c (diff) | |
download | uhd-4574063639a3aa5389005f646577d5644f72d5d3.tar.gz uhd-4574063639a3aa5389005f646577d5644f72d5d3.tar.bz2 uhd-4574063639a3aa5389005f646577d5644f72d5d3.zip |
multi_usrp: Factor out make_overall_tune_range() and fix limits
This function had an issue where it might return negative frequency
values. A quick fix was to limit it to positive frequencies.
Since this function was duplicated between multi_usrp and
multi_usrp_rfnoc, this patch also moves it to a common location to not
have to fix it twice.
Diffstat (limited to 'host/lib')
-rw-r--r-- | host/lib/include/uhdlib/usrp/multi_usrp_utils.hpp | 37 | ||||
-rw-r--r-- | host/lib/usrp/multi_usrp.cpp | 20 | ||||
-rw-r--r-- | host/lib/usrp/multi_usrp_rfnoc.cpp | 24 |
3 files changed, 39 insertions, 42 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 diff --git a/host/lib/usrp/multi_usrp.cpp b/host/lib/usrp/multi_usrp.cpp index bb5b9e5fc..048db0d35 100644 --- a/host/lib/usrp/multi_usrp.cpp +++ b/host/lib/usrp/multi_usrp.cpp @@ -21,6 +21,7 @@ #include <uhd/utils/soft_register.hpp> #include <uhdlib/rfnoc/rfnoc_device.hpp> #include <uhdlib/usrp/gpio_defs.hpp> +#include <uhdlib/usrp/multi_usrp_utils.hpp> #include <boost/algorithm/string.hpp> #include <boost/assign/list_of.hpp> #include <boost/format.hpp> @@ -190,25 +191,6 @@ clipped:\n" " Target Frequency: %f MHz\n" " Clipped Target Frequency: %f M } }*/ -/*! The CORDIC 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. */ -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(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; -} - - /*********************************************************************** * Gain helper functions **********************************************************************/ diff --git a/host/lib/usrp/multi_usrp_rfnoc.cpp b/host/lib/usrp/multi_usrp_rfnoc.cpp index f87e52190..8a11be122 100644 --- a/host/lib/usrp/multi_usrp_rfnoc.cpp +++ b/host/lib/usrp/multi_usrp_rfnoc.cpp @@ -18,6 +18,7 @@ #include <uhdlib/rfnoc/rfnoc_rx_streamer.hpp> #include <uhdlib/rfnoc/rfnoc_tx_streamer.hpp> #include <uhdlib/usrp/gpio_defs.hpp> +#include <uhdlib/usrp/multi_usrp_utils.hpp> #include <uhdlib/utils/narrow.hpp> #include <unordered_set> #include <boost/format.hpp> @@ -441,29 +442,6 @@ public: } - /*********************************************************************** - * Helper methods - **********************************************************************/ - /*! The CORDIC 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. - */ - 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(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; - } - dict<std::string, std::string> get_usrp_rx_info(size_t chan) override { auto& rx_chain = _get_rx_chan(chan); |