我很难让自定义块在高频下运行。
我想使用的模块将从外部无线电接收数据。
我正在使用一个Ettus USRP块来流式传输来自这个无线电设备的数据,并且我可以在QT作用域上显示它。我可以将此块的采样率设置为15 MHz,并且在此范围内似乎可以正常工作。
问题:
我试着用gnuradio gr_modtool做了一个简单的块,它接受2个浮点数作为输入,输出为0。该块具有私有成员"timer“和”time_t“。在"work“函数中,我的代码只是在此时执行此操作:
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秒。目前情况并非如此。
最终,我的目标是能够在一段时间内存储数据流,并以某种格式将其写入文件(已经有一个块可以做到这一点,但有某种bug阻止了该块和USRP块同时工作,所以我正在尝试编写自己的。)。但是,除非我能跟上15 MHz的采样率,否则我将丢失数据。由于这个代码块相当简单,我希望它能够运行得足够快,以便跟上。但是,输入流模块能够从无线电中提取数据并以15 MHz的速度输出,因此我知道我的计算机能够做到这一点。
发布于 2016-12-08 04:34:10
你的区块没有消耗任何样本。我假设您正在编写一个sync_block (work函数,而不是general_work),因此您生产的项目的数量与消费的项目的数量相同。但正如你的源代码所说:
// Tell runtime system how many output items we produced.
return 0;这意味着GNU无线电不能什么都不做。你必须返回你生产的项数,对于同步块,这是你消费的项数--即使你是一个接收器,输出流为零!
https://stackoverflow.com/questions/41020587
复制相似问题