GNURadio问题与时间

时间:2016-12-07 14:53:01

标签: c++ gnuradio

我无法让自定义模块以高频率运行。

我想使用的块将从外部无线电中获取数据。

我正在使用Ettus USRP块来传输来自此收音机的数据,我可以在QT Scope上显示。我可以将此块的采样率设置为15 MHz,并且使用示波器这似乎可以正常工作。

问题:

我尝试使用gnuradio gr_modtool创建一个简单的块,它接收2个浮点数作为输入并具有0个输出。该块具有私有成员"计时器",time_t和"计数器",int。在"工作"函数,我的代码现在只是这样做:

const float *in_i = (const float *) input_items[0];
const float *in_q = (const float *) input_items[1];

if (count == 0){
    if (*in_i > 0.5){
        timer = clock();
        count = 30000;
    }
}else{
    count --;
    if(count == 0){
        timer = clock()-timer;
        printf("Count took %d clicks, or %f seconds\n",timer,(float)timer/CLOCKS_PER_SEC);
    }
}
  // Tell runtime system how many output items we produced.
  return 0;

但是,当我运行此代码时,它需要比预期时间更长的时间。 对于30000个循环,完成需要0.872970,而不是所需的0.002秒。由于使用gr_modtool生成的标准gnuradio块是同步块,并且块的输入流来自15 MHz USRP,我原本预计该块将以相同的频率运行。目前情况并非如此。

最终我的目标是能够在一段时间内存储数据流,并将其写入具有特定格式的文件(已经存在一个块来执行此操作,但是存在某种阻止该块的错误并且USRP阻止同时工作,所以我试图写自己的。)。但是,除非我能跟上15 MHz的采样率,否则我将丢失数据。由于这个块非常简单,我希望它能够足够快地运行以跟上。但是,输入流块能够从无线电中提取数据并以15 MHz的频率输出,因此我知道我的计算机能够实现这一点。

如何让这个自定义模块更快地运行,并保持15 MHz频率?(或者,如何使此同步模块在输入流频率下运行,因为它目前没有)

1 个答案:

答案 0 :(得分:0)

您的区块没有消耗任何样本。我假设您正在撰写sync_blockwork函数,而不是general_work),因此生成的项目的数量与的数量相同消费项目。但正如您的源代码所说:

// Tell runtime system how many output items we produced.
return 0;

换句话说,你的块告诉GNU Radio,它没有使用任何输入的GNU Radio,也没有产生输出。这意味着GNU Radio无能为力。您必须返回已生成的项目数,对于同步块,这是您消耗的项目数 - 即使您是一个接收器,输出流为零!