Я реализовал C ++ коды передатчика и приемника, используя UHD API, начиная с примера, предоставленного Ettus.
До сих пор я тестирую свои коды, используя коаксиальный кабель для подключения USRP, используемого в качестве передатчика, и USRP, используемого в качестве приемника.
В этой настройке, непосредственно перед началом передачи данных, я обнаружил два побочных излучения (около 10000 сэмплов за раз), которые предшествуют данным, как вы можете видеть из прикрепленного изображения.
Вот мой код
uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make("");
//Lock mboard clocks
usrp->set_clock_source("internal");
//set the sample rate
usrp->set_tx_rate(10000000);
//set the center frequency
uhd::tune_request_t tune_request;
tune_request = uhd::tune_request_t(2400000000.0, 100000.0);
usrp->set_tx_freq(tune_request);
//set the rf gain
usrp->set_tx_gain(40);
usrp->set_tx_bandwidth(10000000);
//set the antenna
usrp->set_tx_antenna("TX/RX");
boost::this_thread::sleep(boost::posix_time::seconds(1)); //allow for some setup time
//Check Ref and LO Lock detect
std::vector<std::string> sensor_names;
sensor_names = usrp->get_tx_sensor_names(0);
if (std::find(sensor_names.begin(), sensor_names.end(), "lo_locked") != sensor_names.end()) {
uhd::sensor_value_t lo_locked = usrp->get_tx_sensor("lo_locked",0);
std::cout << boost::format("Checking TX: %s ...") % lo_locked.to_pp_string() << std::endl;
UHD_ASSERT_THROW(lo_locked.to_bool());
}
sensor_names = usrp->get_mboard_sensor_names(0);
//create a transmit streamer
uhd::stream_args_t stream_args("fc32", "sc16");
uhd::tx_streamer::sptr tx_stream = usrp->get_tx_stream(stream_args);
uhd::tx_metadata_t md;
md.start_of_burst = true;
md.end_of_burst = false;
// Some operations for creating IQ samples stored in float tx_vec
for(n_real=0;n_real<1000;n_real++) tx_stream->send((const void**)&tx_vec[0], 80, md);
Задача ещё не решена.
Других решений пока нет …