gpt4 book ai didi

c++ - 动态更改输出项的数量

转载 作者:行者123 更新时间:2023-11-28 05:55:39 27 4
gpt4 key购买 nike

是否可以在 gr block 的 work() 函数中动态更改输出项的数量,同时保留相同数量的输入项?

在我的例子中,我需要 2 个基于条件的案例: 1) 4096 输入:0 输出 2) 4096 输入:4096 输出

谢谢

最佳答案

是的,您会希望您的 block 继承自 gr::block(与更常见的 sync_block 等相反)并使用 general_work 来处理样本。

general_work 中,您可以调用 this->consume() 来报告要从输入缓冲区中删除的样本数,并且 返回 [ int] 将动态地告诉调度程序这次您要传递给下一个 block 的样本数。

https://gnuradio.org/redmine/projects/gnuradio/wiki/BlocksCodingGuide#Basic-Block

这是他们来自 wiki 的代码示例,但请注意,此示例的编码风格与 gnuradio block 当前的编码方式并不完全匹配,但它让您了解如何使用 general_work。对于最新的示例,我建议关闭 gnuradio 源代码并为 general_work 进行 grepping:

#include <gr_block.h>

class my_basic_block : public gr_block
{
public:
my_basic_adder_block(...):
gr_block("another adder block",
in_sig,
out_sig)
{
//constructor stuff
}

int general_work(int noutput_items,
gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
//cast buffers
const float* in0 = reinterpret_cast<const float *>(input_items[0]);
const float* in1 = reinterpret_cast<const float *>(input_items[1]);
float* out = reinterpret_cast<float *>(output_items[0]);

//process data
for(size_t i = 0; i < noutput_items; i++) {
out[i] = in0[i] + in1[i];
}

//consume the inputs
this->consume(0, noutput_items); //consume port 0 input
this->consume(1, noutput_items); //consume port 1 input
//this->consume_each(noutput_items); //or shortcut to consume on all inputs

//return produced
return noutput_items;
}
};

关于c++ - 动态更改输出项的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34206210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com