Gnuradio与时机有关

GNURadio issues with timing

本文关键字:时机 Gnuradio      更新时间:2023-10-16

我很难以高频进行自定义块。

我想使用的块将是从外部收音机中获取数据。

我正在使用ETTUS USRP块来从此无线电中流式传输数据,我可以在QT范围上显示此数据。我可以将此块的采样率设置为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 secondsn",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频率?

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

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

换句话说,您的块告诉GNU无线电,它没有使用任何输入GNU无线电,也没有产生输出。这意味着GNU收音机无能为力。您必须返回生产的项目数,对于同步块,这就是您消费的项目数 - 即使您是零件,输出流零!