【发布时间】:2017-12-10 05:46:20
【问题描述】:
我是 GNU Radio 的新手,在理解输入和输出缓冲区的工作方式方面存在问题。
我希望制作一个具有 1 个输入和 2 个输出端口的模块。此外,我想将一个固定大小的输入分成 2 个具有相同项目数的输出流。
一开始,我做了一个有 1 个输入和 1 个输出端口的块。它接收 4 个元素,并且应该将每个其他元素放在输出端口上,即对于输入值 1、2、3 和 4,它应该输出 1 和 3。我以以下方式覆盖了预测和一般工作方法(添加printf 函数以便于调试):
void test_block_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required)
{
printf("Forcast, number of noutput_items %d\n", noutput_items);
ninput_items_required[0] = noutput_items * 2;
printf("Forcast, required input items %d\n", ninput_items_required[0]);
}
int test_block_impl::general_work (int noutput_items,
gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
const float *in = (const float *) input_items[0];
float *out = (float *) output_items[0];
int num_inputitems = ninput_items[0];
printf("General work, number of input items %d, number of output items %d\n", num_inputitems, noutput_items);
for (int i = 0; i < num_inputitems ; i++)
{
if (i % 2 == 0)
{
out[ i/2 ] = in[i];
printf("out %f, in %f\n", out[i/2], in[i]);
}
}
consume_each (noutput_items*2); // or should I put num_inputitems
// Tell runtime system how many output items we produced.
return noutput_items*2;
}
我还在构造函数中调用了set_max_noutput_items(2)。
我希望预测函数会告诉块它需要一个大小为 4 的输入,然后一般工作函数将处理这些项目并每隔一秒输出一次。
不幸的是,在编写 Python 测试后,我得到了很多意想不到的结果,所以我认为我没有正确理解缓冲区的概念。 测试:
src_data = array ( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
expected_result1 = (1.0, 3.0, 5.0)
src = blocks.vector_source_f(src_data)
dmx = tutorial.test_block(number)
dst1 = blocks.vector_sink_f()
self.tb.connect(src, dmx)
self.tb.connect(dmx, dst1)
self.tb.run (4)
我收到了:
4: Forcast, number of noutput_items 2
4: Forcast, required input items 4
4: Forcast, number of noutput_items 1
4: Forcast, required input items 2
4: Forcast, number of noutput_items 2
4: Forcast, required input items 4
4: General work, number of input items 6, number of output items 2
4: out 1.000000, in 1.000000
4: out 3.000000, in 3.000000
4: out 5.000000, in 5.000000
4: Forcast, number of noutput_items 2
4: Forcast, required input items 4
4: Forcast, number of noutput_items 1
4: Forcast, required input items 2
4: General work, number of input items 2, number of output items 1
4: out 5.000000, in 5.000000
4: Forcast, number of noutput_items 2
4: Forcast, required input items 4
4: Forcast, number of noutput_items 1
4: Forcast, required input items 2
4: (1.0, 3.0, 5.0, 0.0, 5.0, 0.0)
如果有人可以帮助我了解 GNU Radio 是从哪里得到这些零的,为什么它会按此顺序调用预测方法? :)
【问题讨论】:
标签: python c++ buffer gnuradio