如何使用UHD/GNURadio在将来时间接收有限数量的样本?
问题描述:
我正在使用到UHD的GNURadio python接口,并且我试图设置一个特定的时间来开始收集样本,并收集特定数量的样本或在特定时间停止收集样本。实质上,创建样本的定时快照。这与C++ Ettus UHD示例'rx_timed_sample'类似。如何使用UHD/GNURadio在将来时间接收有限数量的样本?
我可以得到一个流图开始在特定的时间,但我似乎无法让它停在特定的时间(至少不会导致溢出)。我也尝试过一种有限的采办方式,但是我无法在特定的时间开始。所以我有点迷失在接下来的事情上。
这是我在有限的收购尝试(似乎只是忽略的开始时间,并收集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)
我也试了下没有成功的一些组合(类型错误:在方法“ usrp_source_sptr_issue_stream_cmd '类型的自变量2' :: UHD :: stream_cmd_t常量&“):
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收集时间的任何事物,生成的流图会一致地溢出。
答
我遇到了类似的问题,并通过使用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
这对我来说非常合适。感谢您的回应! –