2

我想知道是否可以停止处理图,将其中一个块与另一个具有相同数量的输入/输出通道和数据类型的块交换,然后重新启动它,而无需拆除整个图?例如:

MAX = 10000

class my_top_block(gr.top_block):
  def __init__(self, peak_hold=80):
    gr.top_block.__init__(self)
    self.sample_rate = 10e3
    self.s = gr.noise_source_f (gr.GR_UNIFORM, MAX)
    u = foo.peak_fv (MAX, peak_hold)
    self.connect(s, u)
    self.v = foo.wait_vv ()
    self.connect(u, v)
    self.t = gr.null_sink (4 * 1024)
    self.connect(v, t)

  def set_peak_record(self, record, peak_hold=80):
    self.stop()
    if record == True: 
      u = foo.peak_record_fv (MAX, peak_hold)
    else: 
      u = foo.peak_fv (MAX, peak_hold)
    self.connect(self.s, u) 
    self.connect(u, self.v) 
    self.start()

这有点做作,但我希望它能说明我的问题。谢谢!

4

2 回答 2

3

听起来您需要在 gr-basic 中使用 Stream Selector 块:

http://lists.gnu.org/archive/html/discuss-gnuradio/2011-11/msg00228.html

将来,我认为您会发现 GNURadio 邮件列表是寻求有关 GNURadio 帮助的更好媒介。所有开发人员在邮件列表中都非常活跃,但据我所知,只有我和其他几个人在监视 Stack Overflow 上的 GNURadio 问题 =)

https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

干杯,

于 2013-08-26T19:41:25.727 回答
1

的,您可以任意重新排列流程图,我编写的代码与您展示的非常相似。为了使更改生效,您特别需要做的是在它们之前self.lock()和之后使用self.unlock(). (请注意,锁定/解锁对不能嵌套。)我不记得停止和启动是否会产生相同的效果。

我遇到了很多特定于块的怪癖,例如:

  • hier_block2.disconnect_all打破了块的输入和输出,但个人disconnect工作正常。现已修复。
  • 在 Mac OS X 上,第一次重新启动或解锁audio.sourceaudio.sink停止工作。(正在修复中。
  • blocks.throttle的计时器连续运行(因此,如果您将其取出一段时间然后再将其放回,它将运行得太快,直到赶上为止)。

但是,这些都可以解决,它们是特定块实现的问题,而不是重新配置流程图的基本概念。我还没有遇到一般重新配置所固有的任何问题。

(很可能stream_selectorHokieTux的回答中提到的对于它可以处理的情况来说更快,更可靠,但我觉得我应该报告任意重新配置是一种选择。)

于 2013-08-26T22:04:01.987 回答