跳至主要內容

嵌入 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 的捲動棒,但修改其樣式。請自行查詢可能的方法來重新修改音量的設定功能。