簡體   English   中英

在 GNU Radio Companion 中開發; 在單獨的 Python 文件中調用頂部塊的方法

[英]Develop in GNU Radio Companion; call top block's methods in separate Python file

我想...

  • 在 GNU Radio Companion 中制作流程圖
  • 從單獨的 Python 文件調用方法

例如,假設我想掃描此流程圖中的中心頻率:

Osmocom source --> NBFM Receive --> Audio sink

我猜消息傳遞將允許我以編程方式設置 osmocom 的中心頻率,但在 Python 中做這樣的事情會更容易(我認為......?):

freqs = [100e6, 101e6]
for freq in freqs:
    set_center_freq(freq)

你有什么建議? 我正在回答我自己的問題,但我很好奇其他人是否提出了改進建議!🙂

您可以從 GRC 生成的 Python 文件中導入頂部塊。 這樣,當文件重新生成時,您不會丟失所做的更改。

from my_generated_FM_receiver import my_generated_FM_receiver

tb = my_generated_FM_receiver()

運行流程圖需要做更多的設置。 (參見此處,第 103-128 行,從def main(top_block_cls... ) 開始。

如果您想訪問tb變量,您可以創建一個線程並將tb作為參數傳遞,如下所示(此代碼與通常生成的代碼相同,除了末尾附近添加的兩行):



from threading import Thread


def set_up_qt_top_block_and_run_func_in_thread(top_block_cls, func_to_run):

    if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
        style = gr.prefs().get_string('qtgui', 'style', 'raster')
        Qt.QApplication.setGraphicsSystem(style)
    qapp = Qt.QApplication(sys.argv)

    tb = top_block_cls()
    tb.start()
    tb.show()

    def sig_handler(sig=None, frame=None):
        Qt.QApplication.quit()

    signal.signal(signal.SIGINT, sig_handler)
    signal.signal(signal.SIGTERM, sig_handler)

    timer = Qt.QTimer()
    timer.start(500)
    timer.timeout.connect(lambda: None)

    def quitting():
        tb.stop()
        tb.wait()
    qapp.aboutToQuit.connect(quitting)

    #######################
    ## this is my addition
    ##
    thread = Thread(target = func_to_run, args = (tb, ), daemon=True)
    thread.start()
    ## end my addition
    #######################
    qapp.exec_()
    

以下是您可以使用它的方法:


# This is your GRC-generated Python module
from my_generated_FM_receiver import my_generated_FM_receiver


def runMe(tb):
    freqs = [100e6, 101e6]
    for freq in freqs:
        tb.osmosdr_source_0.set_center_freq(freq)

set_up_qt_top_block_and_run_func_in_thread(my_generated_FM_receiver, runMe)

PS:在 GRC 3.9+ 中, Python Snippit可能會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM