我使用GNURadio python接口到UHD,我试图设置一个特定的时间开始收集样本并收集特定数量的样本或停止在特定时间收集样本。基本上,创建样本的定时快照。这类似于C ++ Ettus UHD示例' rx_timed_sample'。
我可以在特定时间启动流程图,但我似乎无法在特定时间停止(至少不会导致溢出)。我也试过做一个有限的采样,这是有效的,但我不能让它在特定的时间开始。所以,我有点迷失在下一步该做什么。
这是我对有限采集的尝试(似乎只是忽略了开始时间并收集了0个样本):
num_samples = 1000
usrp = uhd.usrp_source(
",".join(("", "")),
uhd.stream_args(
cpu_format="fc32",
channels=range(1),
),
)
...
usrp.set_start_time(absolute_start_time)
samples = usrp.finite_acquisition(num_samples)
我也尝试过以下几种组合但没有成功(TypeError:在方法' usrp_source_sptr_issue_stream_cmd',类型' :: uhd :: stream_cmd_t const&&#39的参数2 ):
usrp.set_command_time(absolute_start_time)
usrp.issue_stream_cmd(uhd.stream_cmd.STREAM_MODE_NUM_SAMPS_AND_DONE)
我还在流程图中尝试了以下内容:
...
usrp = flowgrah.uhd_usrp_source_0
absolute_start_time = uhd.uhd_swig.time_spec_t(start_time)
usrp.set_start_time(absolute_start_time)
flowgrah.start()
stop_cmd = uhd.stream_cmd(uhd.stream_cmd.STREAM_MODE_STOP_CONTINUOUS)
absolute_stop_time = absolute_start_time + uhd.uhd_swig.time_spec_t(collection_time)
usrp.set_command_time(absolute_stop_time)
usrp.issue_stream_cmd(stop_cmd)
无论出于何种原因,一个生成的流程图一直溢出,大于.02s的收集时间。
答案 0 :(得分:0)
我遇到了类似的问题,并使用head
阻止了它。
这是一个简单的例子,可以从正弦波源中保存10,000个样本然后退出。
#!/usr/bin/env python
# Evan Widloski - 2017-09-03
# Logging test in gnuradio
from gnuradio import gr
from gnuradio import blocks
from gnuradio import analog
class top_block(gr.top_block):
def __init__(self, output):
gr.top_block.__init__(self)
sample_rate = 32e3
num_samples = 10000
ampl = 1
source = analog.sig_source_f(sample_rate, analog.GR_SIN_WAVE, 100, ampl)
head = blocks.head(4, num_samples)
sink = blocks.file_sink(4, output)
self.connect(source, head)
self.connect(head, sink)
if __name__ == '__main__':
try:
top_block('/tmp/out').run()
except KeyboardInterrupt:
pass