2017-04-14 75 views
1

我正在使用到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收集時間的任何事物,生成的流圖會一致地溢出。

回答

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 
+0

這對我來說非常合適。感謝您的迴應! –

相關問題