From 300f9fafa85e4f65c2638f358799a4bf13eb9035 Mon Sep 17 00:00:00 2001 From: TalFel Date: Wed, 11 Mar 2026 13:24:22 +0200 Subject: [PATCH] multi-usrp set_master_clock_rate function sets the duc output/ddc input rates --- host/lib/usrp/multi_usrp_rfnoc.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/host/lib/usrp/multi_usrp_rfnoc.cpp b/host/lib/usrp/multi_usrp_rfnoc.cpp index 8544cf01cd..43861390e8 100644 --- a/host/lib/usrp/multi_usrp_rfnoc.cpp +++ b/host/lib/usrp/multi_usrp_rfnoc.cpp @@ -747,17 +747,33 @@ class multi_usrp_rfnoc : public multi_usrp void set_master_clock_rate(double rate, size_t mboard) override { for (auto& chain : _rx_chans) { - auto radio = chain.second.radio; + auto& rx_chain = chain.second; + auto radio = rx_chain.radio; if (radio->get_block_id().get_device_no() == mboard || mboard == ALL_MBOARDS) { - radio->set_rate(rate); + const double actual_radio_rate = radio->set_rate(rate); + if (rx_chain.ddc) { + rx_chain.ddc->set_input_rate(actual_radio_rate, rx_chain.block_chan); + if (_rx_rates.count(chain.first)) { + _rx_rates[chain.first] = rx_chain.ddc->set_output_rate( + _rx_rates.at(chain.first), rx_chain.block_chan); + } + } } } for (auto& chain : _tx_chans) { - auto radio = chain.second.radio; + auto& tx_chain = chain.second; + auto radio = tx_chain.radio; if (radio->get_block_id().get_device_no() == mboard || mboard == ALL_MBOARDS) { - radio->set_rate(rate); + const double actual_radio_rate = radio->set_rate(rate); + if (tx_chain.duc) { + tx_chain.duc->set_output_rate(actual_radio_rate, tx_chain.block_chan); + if (_tx_rates.count(chain.first)) { + _tx_rates[chain.first] = tx_chain.duc->set_input_rate( + _tx_rates.at(chain.first), tx_chain.block_chan); + } + } } } }