嵌入 GRC
2024年5月9日大约 2 分鐘
現在要把 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
- 完成上述的說明,並確認執行結果正確。
- (Optional) 我們也可以自己設定音量的調整功能,並將 GRC 中的音量調整功能拿掉。音量的設定可以用捲動棒 (Slider)、Radio Button、或者下拉選單等來設計。另外也可以保留 GRC 的捲動棒,但修改其樣式。請自行查詢可能的方法來重新修改音量的設定功能。