Я настраиваю USRP для записи на частоте 400 МГц и получаю данные правильно.Затем я настроил USRP для записи на частоте 400 МГц + смещение 18 кГц, и я получаю ошибки TIMEOUT по команде recv ().
Я устанавливаю новую частоту, используя тот же код, что и предыдущая частота, таким образом, это единственное, что меняется в этом примере.
Есть ли время очистки или время удержания, превышающее 2 секундыили так, что нужно сделать, чтобы перейти на новую частоту?
Когда класс интерфейса создан, мы инициализируем, используя следующие строки:
uhd::set_thread_priority_safe();
// Setup device addresses and create object
uhd::device_addr_t devAddr;
devAddr["addr0"] = "192.168.10.2";
devAddr["addr1"] = "192.168.20.2";
devAddr["addr2"] = "192.168.30.2";
m_usrp = uhd::usrp::multi_usrp::make(devAddr);
uhd::usrp::subdev_spec_t rxSpec("A:0");
m_usrp->set_rx_subdev_spec(rxSpec);
m_usrp->set_clock_source("external");
m_usrp->set_time_source("external");
m_usrp->set_rx_rate(m_sampleRate); //Sample rate is 500000
Мы готовимся к определенному захвату данных с помощьюследующие строки.Набор и получение совпадают с небольшой разницей в десятичных точках.
uhd::stream_args_t streamArgs("fc32");
for (size_t chan = 0; chan < m_usrp->get_rx_num_channels(); chan++)
{
streamArgs.channels.push_back(chan);
}
m_rxStreamer = m_usrp->get_rx_stream(streamArgs);
m_usrp->set_rx_gain(m_gainChannel1, 0); // All gains set to 31.5
m_usrp->set_rx_gain(m_gainChannel2, 1);
m_usrp->set_rx_gain(m_gainChannel3, 2);
uhd::time_spec_t cmdTime = m_usrp->get_time_now() + uhd::time_spec_t(1.0);
m_usrp->set_command_time(cmdTime);
m_usrp->set_rx_freq(m_freqChannel1 - CENTER_FREQ_OFFSET_HZ, 0); // Freq is 400000000 and CENTER_FREQ is 100000
m_usrp->set_rx_freq(m_freqChannel2 - CENTER_FREQ_OFFSET_HZ, 1);
m_usrp->set_rx_freq(m_freqChannel3 - CENTER_FREQ_OFFSET_HZ, 2);
m_usrp->clear_command_time();
sleep(1);
double actualChannel0Freq = m_usrp->get_rx_freq(0);
double actualChannel1Freq = m_usrp->get_rx_freq(1);
double actualChannel2Freq = m_usrp->get_rx_freq(2);
LOG(INFO) << "Acutal tuned USRP frequencies " << std::fixed << actualChannel0Freq << " " << actualChannel1Freq << " " << actualChannel2Freq;
Когда наступает время начала получения данных с использованием:
uhd::rx_metadata_t md;
double timeout = 5.0;
size_t samplesRxThisTime = m_rxStreamer->recv(buffPtrs, sampsThisTime, md, timeout);
// Smaller timeout for subsequent packets
timeout = 0.75;
// Handle any error codes
if (md.error_code == uhd::rx_metadata_t::ERROR_CODE_TIMEOUT)
{
LOG(ERROR) << "Timed out while receiving data from USRPs";
break;
}
У меня былоОжидается, что небольшое изменение частоты не вызовет проблем.Исходная частота работает ... обновленная частота не работает.