我已经设置了python代码以通过NBFM传输wav文件,它非常适合一次发送文件,或者如果我设置了自动重复,它将继续发送消息。但是,我想调用top_block.run()函数,等待而不是再次调用它,并且每次它将运行流程图(top_block)。
当前我有
self.samp_rate = samp_rate = 44000
##################################################
# Blocks
##################################################
self.rational_resampler_xxx_0 = filter.rational_resampler_ccc(
interpolation=2400000,
decimation=88200,
taps=None,
fractional_bw=None,
)
self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + "" )
self.osmosdr_sink_0.set_sample_rate(2400000)
self.osmosdr_sink_0.set_center_freq(463025000, 0)
self.osmosdr_sink_0.set_freq_corr(6, 0)
self.osmosdr_sink_0.set_gain(0, 0)
self.osmosdr_sink_0.set_if_gain(30, 0)
self.osmosdr_sink_0.set_bb_gain(20, 0)
self.osmosdr_sink_0.set_antenna("", 0)
self.osmosdr_sink_0.set_bandwidth(10000, 0)
self.blocks_wavfile_source_0 = blocks.wavfile_source("/home/ahmad/Test123.wav", True)
self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((2, ))
self.analog_nbfm_tx_0 = analog.nbfm_tx(
audio_rate=44100,
quad_rate=88200,
tau=75e-6,
max_dev=5e3,
)
##################################################
# Connections
##################################################
self.connect((self.analog_nbfm_tx_0, 0), (self.rational_resampler_xxx_0, 0))
self.connect((self.blocks_multiply_const_vxx_0, 0), (self.analog_nbfm_tx_0, 0))
self.connect((self.blocks_wavfile_source_0, 0), (self.blocks_multiply_const_vxx_0, 0))
self.connect((self.rational_resampler_xxx_0, 0), (self.osmosdr_sink_0, 0))
tb = top_block_cls()
i = 0
while i < 5:
tb.run()
i = i + 1
上面的代码为什么只发送一次,其余时间跳过运行cmd,我认为这些块中有一些布尔值,表明工作已经完成?并且需要重置。谢谢您的时间!
答案 0 :(得分:0)
您可以重用顶部块,但是您需要考虑顶部块的状态。特别是,很可能文件源块仍位于文件末尾。
选择一个解决方案:
wavfile_source
块不可用,因此您必须使用其他解决方案。)将其替换为新创建的文件源块。 (这种方法的优点是可以推广到所有类型的源块。)
要替换某个块,而流程图未运行,请使用self.disconnect(...)
(与self.connect(...)
相同的参数)从其中删除连接,然后使用{{ 1}}新区块。
创建一个新的self.connect(...)
,而不是重复使用上一个。 (这可以确保完全不执行上一次运行的状态,但是当然可能需要更多时间。)