【发布时间】:2016-12-08 04:34:09
【问题描述】:
我无法让自定义块以高频率运行。
我想使用的模块将从外部无线电接收数据。
我正在使用 Ettus USRP 块从这个收音机流式传输数据,我可以在 QT Scope 上显示它。我可以将此模块的采样率设置为 15 MHz,并且在示波器上这似乎可以正常工作。
问题:
我尝试使用 gnuradio gr_modtool 制作一个简单的块,它接受 2 个浮点数作为输入并有 0 个输出。该块具有私有成员“timer”,一个 time_t,和“counter”,一个 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 的频率?(或者,我怎样才能让这个同步块在输入流频率下运行,因为它目前没有)
【问题讨论】: