1*4882a593SmuzhiyunFrom 3796175f32f0cc24c16809d8175d423bc7053de9 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: StefanBruens <stefan.bruens@rwth-aachen.de>
3*4882a593SmuzhiyunDate: Wed, 5 May 2021 18:24:58 +0200
4*4882a593SmuzhiyunSubject: [PATCH] usrp2: Replace boost::math::iround/math::sign with std::lround
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunInstead of multiplying zone with the sign repeatedly just make
7*4882a593Smuzhiyunthe zone a signed value.
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunSee #437, #438
10*4882a593Smuzhiyun
11*4882a593SmuzhiyunSigned-off-by: Aaron Rossetto <aaron.rossetto@ni.com>
12*4882a593Smuzhiyun[gwenhael.goavec-merou@trabucayre.com: backport from upstream]
13*4882a593SmuzhiyunSigned-off-by: Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
14*4882a593Smuzhiyun---
15*4882a593Smuzhiyun host/lib/usrp/usrp2/usrp2_impl.cpp | 10 +++++-----
16*4882a593Smuzhiyun 1 file changed, 5 insertions(+), 5 deletions(-)
17*4882a593Smuzhiyun
18*4882a593Smuzhiyundiff --git a/host/lib/usrp/usrp2/usrp2_impl.cpp b/host/lib/usrp/usrp2/usrp2_impl.cpp
19*4882a593Smuzhiyunindex 1be4c7339..c0719a316 100644
20*4882a593Smuzhiyun--- a/host/lib/usrp/usrp2/usrp2_impl.cpp
21*4882a593Smuzhiyun+++ b/host/lib/usrp/usrp2/usrp2_impl.cpp
22*4882a593Smuzhiyun@@ -22,6 +22,7 @@
23*4882a593Smuzhiyun #include <boost/asio/ip/address_v4.hpp>
24*4882a593Smuzhiyun #include <boost/asio.hpp> //used for htonl and ntohl
25*4882a593Smuzhiyun #include <boost/thread.hpp>
26*4882a593Smuzhiyun+#include <cmath>
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun using namespace uhd;
29*4882a593Smuzhiyun using namespace uhd::usrp;
30*4882a593Smuzhiyun@@ -844,20 +845,19 @@ double usrp2_impl::set_tx_dsp_freq(
31*4882a593Smuzhiyun         _tree->access<double>("/mboards/"+mb+"/tick_rate").get();
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun     //calculate the DAC shift (multiples of rate)
34*4882a593Smuzhiyun-    const int sign = boost::math::sign(new_freq);
35*4882a593Smuzhiyun-    const int zone = std::min(boost::math::iround(new_freq/tick_rate), 2);
36*4882a593Smuzhiyun-    const double dac_shift = sign*zone*tick_rate;
37*4882a593Smuzhiyun+    const int zone         = std::max(std::min(std::lround(new_freq / tick_rate), 2), -2);
38*4882a593Smuzhiyun+    const double dac_shift = zone * tick_rate;
39*4882a593Smuzhiyun     new_freq -= dac_shift; //update FPGA DSP target freq
40*4882a593Smuzhiyun     UHD_LOG_TRACE("USRP2",
41*4882a593Smuzhiyun         "DSP Tuning: Requested " + std::to_string(freq_/1e6) + " MHz, Using "
42*4882a593Smuzhiyun-        "Nyquist zone " + std::to_string(sign*zone) + ", leftover DSP tuning: "
43*4882a593Smuzhiyun+        "Nyquist zone " + std::to_string(zone) + ", leftover DSP tuning: "
44*4882a593Smuzhiyun         + std::to_string(new_freq/1e6) + " MHz.");
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun     //set the DAC shift (modulation mode)
47*4882a593Smuzhiyun     if (zone == 0) {
48*4882a593Smuzhiyun         _mbc[mb].codec->set_tx_mod_mode(0); //no shift
49*4882a593Smuzhiyun     } else {
50*4882a593Smuzhiyun-        _mbc[mb].codec->set_tx_mod_mode(sign*4/zone); //DAC interp = 4
51*4882a593Smuzhiyun+        _mbc[mb].codec->set_tx_mod_mode(4 / zone); // DAC interp = 4
52*4882a593Smuzhiyun     }
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun     return _mbc[mb].tx_dsp->set_freq(new_freq) + dac_shift; //actual freq
55*4882a593Smuzhiyun--
56*4882a593Smuzhiyun2.32.0
57*4882a593Smuzhiyun
58