跳至主要內容

嵌入 GRC

Jia-Yin大约 2 分钟comm

现在要把 GNU Radio 产生出来的类别嵌进来。将上一单元所产生的 fm_recv.py 档案复制到工作目录。接著修改上一节的 main.py,将以下几行程式码放在 init 函数的最下方。

self.grc = fm_recv()
self.layout().replaceWidget(self.wGRC, self.grc)
self.layout().removeWidget(self.wGRC)
self.wGRC.deleteLater()
self.wGRC = None
self.grc.start()
self.grc.show()

这几行代码主要是把原先的 wGRC 那个元件换成 GRC 产生的类别元件,然后再把 wGRC 元件删除。

执行程式码,看是否产生如下的结果:

接著调整频率,看是否能正常执行,并听到广播电台的节目。

接下来在 __init__ 中加入以下按钮的触发事件:

self.bICRT.clicked.connect(lambda: self.setFreq(100.7))
self.bFengCheng.clicked.connect(lambda: self.setFreq(98.7))
self.bGuoJi.clicked.connect(lambda: self.setFreq(101.1))

然后增加一个类别的方法:

def setFreq(self, freq):
    self.grc.set_f(freq*1e6)

再次执行,试著按一下各电台的按钮,应该能够正常运作,并收听到不同电台的广播。

由于我们已改用按钮来控制电台,因此频率的卷动棒已经不需要了,所以我们打算把原来 GRC 中设定频率的卷动棒拿掉。

重新修改 fm_recv 的原始 GRC 档,将 GUI Range f 拿掉,并重新产出 Python 档。

接著我们要直接控制 GRC 讯号源的频率设定,修改 main.py 中 setFreq 方法如下:

def setFreq(self, freq):
    self.grc.analog_sig_source_x_0.set_frequency(100e6-freq*1e6)

重新执行程式,看频率的卷动棒是否已经拿掉。

練習 3

  1. 完成上述的说明,并确认执行结果正确。
  2. (Optional) 我们也可以自己设定音量的调整功能,并将 GRC 中的音量调整功能拿掉。音量的设定可以用卷动棒 (Slider)、Radio Button、或者下拉选单等来设计。另外也可以保留 GRC 的卷动棒,但修改其样式。请自行查询可能的方法来重新修改音量的设定功能。