Hi, Nikos, Thanks for your reply! I will try to learn and install ctag. Here is what I further find:
Following your directions, I can find the _tx_freq variable in "uhd/host/lib/usrp/common/ad9361_driver/ad9361_device.h". I assume that the " _tune_helper() " function implemented in "uhd/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp" is the underlying function that tunes the ad9361 front end. The problem is that I modify the _tune_helper() by throwing a uhd error at the beginning of the function, however after I re-compile the modified uhd and re-install it and then re-run my tuning loop, I didn't find the error message I throw in the _tune_helper() . Does that mean the E312 uhd does not run the _tune_helper() function in "uhd/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp"? I really would like to find where the underlying tuning source code is and I need to turn off the calibration procedure in the tuning code to speed up the tuning. Thanks, Yan On Thu, Jul 28, 2022 at 6:48 PM Nikos Balkanas <nbalka...@gmail.com> wrote: > Hi, > > _tx_freq is an intermediate frequency. > It is defined in: > uhd/host/lib/usrp/common/ad9361_driver/ad9361_device.h > If you need to modify uhd, you really need to install ctags, and grep > the sources... > > HTH > Nikos > > On Thu, Jul 28, 2022 at 10:42 PM <yanzhan...@gmail.com> wrote: > > > > Hi, all, > > > > > > > > I have a E312 device and I just find that the tuning speed of E312 is > very slow (~150ms) for each tuning. Thus I would like to modify the > underlying tuning source code in the uhd software architecture. > > > > > > > > Here is what I found: > > > > > > > > I first create a multi_usrp object: > > > > uhd::usrp::multi_usrp::sptr usrp = > uhd::usrp::multi_usrp::make(device_args); > > > > > > > > > > > > then I tune the usrp by running a loop: > > > > > > > > int count = 200; > > for(int a = 0; a < count; a++) { > > uhd::tune_request_t tune_request(600e6 + a*10e6); > > > > usrp->set_rx_freq(tune_request, 0); > > usrp->set_tx_freq(tune_request, 0); > > } > > > > > > > > Basically, the loop tunes the frequency from 600MHz to 2.6 GHz with a > step size of 10 MHz. The 200 tunings take 52 seconds, which is pretty slow. > > > > > > > > Thus, I traced the call stack from usrp->set_rx_freq(tune_request, 0). > Here is what I found: > > > > usrp->set_rx_freq(tune_request, 0); calls the method set_tx_frequency() > in uhd/host/lib/usrp/dboard/e3xx/e3xx_radio_control_impl.cpp > > > > then the method set_tx_frequency() in > uhd/host/lib/usrp/dboard/e3xx/e3xx_radio_control_impl.cpp calls the tune() > method in uhd/host/lib/usrp/dboard/e3xx/e3xx_ad9361_iface.cpp > > > > then the tune() method in > uhd/host/lib/usrp/dboard/e3xx/e3xx_ad9361_iface.cpp calls the method > set_tx_frequency() in uhd/host/lib/rfnoc/radio_control_impl.cpp. > > > > > > > > The conclusion I have reached so far is the underlying tuning method is > in uhd/host/lib/rfnoc/radio_control_impl.cpp: > > > > > > > > double radio_control_impl::set_tx_frequency(const double freq, const > size_t chan) > > { > > std::lock_guard<std::mutex> l(_cache_mutex); > > return _tx_freq[chan] = freq; > > } > > > > > > > > Then I just got stuck here, what is the _tx_freq[chan] ? I just can not > find more. > > > > > > > > > > > > What I want to do is to modify the underlying ad9361 driver, so that > when tuning a frequency, I can bypass the calibration in the ad9361 to > speed up the tuning speed. > > > > > > > > Can anyone point me to 1.where I can find the source code for tuning for > the E312 with uhd 4.0 or 2. how to use mpm to get low-level access to > ad9361 so that I can write my own tuning method for ad9361 ? > > > > > > > > Thanks, > > > > Yan > > > > _______________________________________________ > > USRP-users mailing list -- usrp-users@lists.ettus.com > > To unsubscribe send an email to usrp-users-le...@lists.ettus.com >
_______________________________________________ USRP-users mailing list -- usrp-users@lists.ettus.com To unsubscribe send an email to usrp-users-le...@lists.ettus.com