Мне нужна помощь в создании модуля OOT gnuradio. Я на самом деле пытаюсь расширить один код.
Я пытаюсь сделать 2 TX 1Rx помеченный блок потока (OOT). Для 1Tx 1Rx это
работает нормально. Я пытаюсь продлить это. Теперь проблема в том, что я не
возможность настроить функцию send (). С этим кодом один передатчик передает, а другой не работает. Спецификация subdev и частота и другие параметры распределены правильно. Я проверил.
Если я попытаюсь сделать тест, это не показывает никаких проблем. Я проверил каждый
порт моего USRP X310, работает нормально.
Вот код Я положил короткую часть, которая касается буфера отправки и получения.
void
usrp_echotimer_cc_impl::send()
{
// Data to USRP
num_tx_samps = d_tx_stream->send(d_in_send1, total_num_samps,
d_metadata_tx, total_num_samps/(float)d_samp_rate+d_timeout_tx);
num_tx_samps = d_tx_stream->send(d_in_send0, total_num_samps,
d_metadata_tx, total_num_samps/(float)d_samp_rate+d_timeout_tx);
}
int
usrp_echotimer_cc_impl::work (int noutput_items,
gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
gr_complex *in0 = (gr_complex *) input_items[0];
gr_complex *in1 = (gr_complex *) input_items[1];
gr_complex *out = (gr_complex *) output_items[0];
// Set output items on packet length
noutput_items = ninput_items[0]=ninput_items[1];
// Resize output buffer
if(d_out_buffer.size()!=noutput_items)
d_out_buffer.resize(noutput_items);
// Send thread
d_in_send0 = in0;
d_in_send1 = in1;
d_noutput_items_send = noutput_items;
d_thread_send =
gr::thread::thread(boost::bind(&usrp_echotimer_cc_impl::send, this));
// Receive thread
d_out_recv = &d_out_buffer[0];
d_noutput_items_recv = noutput_items;
d_thread_recv =
gr::thread::thread(boost::bind(&usrp_echotimer_cc_impl::receive, this));
Моя системная конфигурация — X310, дочерняя плата SBX-120, и я использую UHD-3.9. Я проверил спецификацию subdev, усиление и частотную привязку. Те
в порядке.
Для полноты:
Об этом вчера спросили в списке рассылки GNU Radio; Sanjoy уже получил два ответа:
Мартин Браун написал:
Извини, Санджой,
нам нужно больше информации, прежде чем мы сможем дать вам лучше
Обратная связь. Непонятно, чего именно вы пытаетесь достичь, и
что именно терпит неудачу.Возможно, это помогает начать:
http://gnuradio.org/redmine/projects/gnuradio/wiki/ReportingErrorsУра, Мартин
И мой ответ немного длинноват, но он доступен Вот. В выдержках:
Привет Санжой,
Я пытаюсь сделать 2 TX 1Rx помеченный блок потока (OOT). Для 1Tx 1Rx все работало нормально. Я пытаюсь продлить это. Теперь проблема в том, что я
Я не могу настроить функцию send ().Есть ли
Конкретная причина, по которой вы создаете свой собственный блок? Есть ли особенность
отсутствует на приемнике USRP и источнике, который идет с gr-uhd?
…
ваша функция send () выглядит немного странно; что ты делаешь
Передача двух вещей на одном канале друг за другом. Также,
что вы должны делать (с точки зрения стиля программирования)
передать буферы, которые вы хотите отправить как ссылки или что-то, но не
сохраните их в свойствах класса и затем вызовите send (). Отправить два
буферы на два разных канала, вам нужно будет использовать вектор
содержащий два буфера — взгляните на rx_multi_samples; это из
Конечно, recv (), а не send (), но семантика та же.
…
Вам дается noutput_items, чтобы позволить вашей работе сейчас, сколько это может дать, поэтому это параметр.
…
Нет причины, по которой GNU Radio уже не может снова вызывать вашу рабочую функцию, в то время как usrp_echotimer_cc_impl :: send () даже не начала передавать сэмплы. Затем ваши переменные d_send будут перезаписаны.
…
Поскольку один X310 является по своей природе когерентным и имеет одно и то же время, вы можете просто использовать приемник USRP и источник, использовать set_start_time (…) для обоих с одной и той же спецификацией времени, и ваш потоковый график потребляет и производит выборки в разных темы, связно.