diff options
author | Ciro Nishiguchi <ciro.nishiguchi@ni.com> | 2018-10-05 10:33:51 -0500 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2018-10-05 10:46:31 -0700 |
commit | 12e4c4405c22093a220882d06872989e2eeb36d3 (patch) | |
tree | 0f04c8e1831b3250fb572daf98cbab538b2402ca /host/lib | |
parent | 2a4bf0197c1c980e15eca7b8f4e4f4e4043b5eb1 (diff) | |
download | uhd-12e4c4405c22093a220882d06872989e2eeb36d3.tar.gz uhd-12e4c4405c22093a220882d06872989e2eeb36d3.tar.bz2 uhd-12e4c4405c22093a220882d06872989e2eeb36d3.zip |
uhd: Fix rounding in ddc/duc rate calculation
The DDC and DUC convert the requested rate to an integer before
selecting a decimated / interpolated rate. This causes the selection to
select a lower rate than requested in some corner cases. The effect is
more pronounced when the input rate of the DDC or the output rate of the
DUC is very small.
Diffstat (limited to 'host/lib')
-rw-r--r-- | host/lib/rfnoc/ddc_block_ctrl_impl.cpp | 2 | ||||
-rw-r--r-- | host/lib/rfnoc/duc_block_ctrl_impl.cpp | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/host/lib/rfnoc/ddc_block_ctrl_impl.cpp b/host/lib/rfnoc/ddc_block_ctrl_impl.cpp index 9247708ef..b70ae8959 100644 --- a/host/lib/rfnoc/ddc_block_ctrl_impl.cpp +++ b/host/lib/rfnoc/ddc_block_ctrl_impl.cpp @@ -245,7 +245,7 @@ private: return range; } - double set_output_rate(const int requested_rate, const size_t chan) + double set_output_rate(const double requested_rate, const size_t chan) { const double input_rate = get_arg<double>("input_rate"); const size_t decim_rate = diff --git a/host/lib/rfnoc/duc_block_ctrl_impl.cpp b/host/lib/rfnoc/duc_block_ctrl_impl.cpp index 7f22ca903..cc9d30361 100644 --- a/host/lib/rfnoc/duc_block_ctrl_impl.cpp +++ b/host/lib/rfnoc/duc_block_ctrl_impl.cpp @@ -230,7 +230,7 @@ private: return range; } - double set_input_rate(const int requested_rate, const size_t chan) + double set_input_rate(const double requested_rate, const size_t chan) { const double output_rate = get_arg<double>("output_rate", chan); const size_t interp_rate = boost::math::iround(output_rate/get_input_rates().clip(requested_rate, true)); |