-2

我需要帮助制作 gnuradio OOT 模块。我实际上是在尝试扩展一个代码。

我正在尝试制作 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 规范、增益和频率分配。那些很好。

4

1 回答 1

2

为了完整起见: 昨天在 GNU Radio 邮件列表中提出了这个问题;Sanjoy已经得到了两个回应:

马丁布劳恩写道:

对不起,桑乔,

我们需要更多信息才能为您提供更好的反馈。目前尚不清楚您要实现什么,以及到底是什么失败了。

也许这有助于入门: http: //gnuradio.org/redmine/projects/gnuradio/wiki/ReportingErrors

干杯,马丁

我的回答有点冗长,但可以在这里找到。摘录:

嗨桑乔,

我正在尝试制作 2 TX 1Rx 标记的流块(OOT)。对于 1Tx 1Rx,它工作正常。我正在尝试扩展它。现在的问题是,我无法配置 send() 函数。

您创建自己的区块是否有特殊原因?gr-uhd 附带的 USRP 接收器和源是否缺少功能?

...

你的 send() 函数看起来有点奇怪;你正在做的是在一个通道上一个接一个地传输两个东西。此外,您应该做的(从编程风格的角度来看)是将要发送的缓冲区作为引用或其他内容传递,但不要将它们保存到类属性中,然后调用 send()。要将两个缓冲区发送到两个不同的通道,您需要使用包含两个缓冲区的向量——查看 rx_multi_samples;当然是recv()s 而不是send(),但是语义是一样的。

...

noutput_items 是给你的,让你的工作现在可以产生多少,这就是为什么它是一个参数。

...

当 usrp_echotimer_cc_impl::send() 甚至还没有开始传输样本时,GNU Radio 没有理由不能再次调用您的工作函数。然后,您的 d_send 变量将被覆盖。

...

由于单个 X310 本质上是连贯的并且具有相同的时间,您可以简单地使用 USRP 接收器和源,使用相同的时间规范在两者上使用 set_start_time(...),并让您的流程图以不同的方式消耗和生成样本线程,连贯。

于 2015-06-25T08:58:35.007 回答