本文共 2388 字,大约阅读时间需要 7 分钟。
A running flow graph is static, and can't be changed. There are two ways to implement reconfigurability:
Using lock() and unlock(), you will actually stop the flow graph, and can then disconnect and re-connect blocks. In the following example, the flow graph will run for a second, the stop the execution (lock), disconnect the source, connect a different one, and resume. The resulting file will first have data from the vector source, then lots of zeros.
#!/usr/bin/env pythonimport timefrom gnuradio import grfrom gnuradio import blocksdef main(): tb = gr.top_block() src1 = blocks.vector_source_f(range(16), repeat=True) throttle = blocks.throttle(gr.sizeof_float, 1e6) sink = blocks.file_sink(gr.sizeof_float, 'out.dat') tb.connect(src1, throttle, sink) tb.start() time.sleep(1) print "Locking flowgraph..." tb.lock() tb.disconnect(src1) src2 = blocks.null_source(gr.sizeof_float) tb.connect(src2, throttle) print "Unlocking flowgraph..." tb.unlock() time.sleep(2) tb.stop() tb.wait()if __name__ == "__main__": main()
Note that this is not meant for sample-precision timing, but rather for situations where time does not really matter.
If sample-timing is an issue, use general blocks to react to certain events. In the following example, we assume that you have written a general block which stops reading from the first sink at a given time, and then seamlessly switches over to the second input:
#!/usr/bin/env pythonimport timefrom gnuradio import grfrom gnuradio import blocksimport my_awesome_oot_module as myoot # This is your custom moduledef main(): tb = gr.top_block() src1 = blocks.vector_source_f(range(16), repeat=True) src2 = blocks.null_source(gr.sizeof_float) switch = myoot.switch() # This is your custom block throttle = blocks.throttle(gr.sizeof_float, 1e6) sink = blocks.file_sink(gr.sizeof_float, 'out.dat') tb.connect(src1, switch, throttle, sink) tb.connect(src2, (switch, 1)) tb.start() time.sleep(2) tb.stop() tb.wait()if __name__ == "__main__": main()
There are many blocks that react to input data, or incoming tags.
参考:http://gnuradio.org/redmine/projects/gnuradio/wiki/FAQ#How-can-I-reconfigure-a-flow-graph-How-do-I-use-lock-unlock
转载地址:http://ixmra.baihongyu.com/