我编写了一个小型GNU Radio程序来捕获和绘制来自USRP N210的FFT数据。
为了避免锁定我的GUI(matplotlib和wxpython),我只在GUI报告它空闲后才运行流程图。
为了实现这种时间安排,我使用了GNU Radio Tutorial中引入的非流程图集中方法。
基本上,我有一个看起来像这样的主循环(伪代码):
topblock.set_usrp_freq()
while True:
topblock.run()
data = topblock.vector_sink.data()
thread-safe call to plot data
wait for gui.EVT_IDLE
topblock.skiphead.reset()
topblock.head.reset()
流程图基本上看起来像:
self.connect(usrp, skiphead, stream_to_vector, head, fft, c2mag_sq, stats, volts_to_dBm, vector_sink)
# skiphead is modified to be resettable like head
当我使用类似的参数时,我希望看到我在运行uhd_fft -f 700M -s 10e6
时看到的相同内容:
我的matplotlib图的输出首先非常相似,但非常明显的LO除外。我试图通过uhd_fft
跟踪代码而我没有看到他们做任何LO抵消,所以我的第一个问题是问:是否uhd_fft避免以某种方式绘制LO,或者是我是如何从主循环运行流程图导致LO发音的?
编辑:我已经确认极端LO是电压尖峰的副产品,每次流程图运行时都会发生电压尖峰(#34; run()"您需要降低到LO的样本数量可以在我的后续帖子中的时间数据中看到:voltage pulse from USRP when using simple GNU Radio flowgraph from Python
第二次运行后,我定期得到奇怪的数据,这些数据绝对没有。发生在uhd_fft。我可以通过使用skiphead
块为每个流程图运行转储数千个样本来消除此问题,但我的第二个问题是:问:为什么从单独的主循环运行流程图会导致绘制垃圾数据,即使USRP没有被重新调整? uhd_fft
使用以流程图为中心的流程,但没有这个问题:
我的直觉是,在教程中没有提到运行非流程图中心应用程序时会有一些注意事项。