如何以编程方式更改GNUradio流中的属性?

时间:2017-07-07 22:20:00

标签: gnuradio gnuradio-companion

我需要根据将在我自己的代码片段中计算的数据分别更改源/接收器上的接收和发送增益。做这个的最好方式是什么?这些教程都没有描述如何完成。

理想情况下,GNUradio python脚本只会在循环中调用几个函数,它们会返回增益值,系统会动态变化。

2 个答案:

答案 0 :(得分:0)

UHD接收器/源可以通过消息端口上的特定命令语法来控制。有关详细信息,请参阅https://gnuradio.org/doc/doxygen/page_uhd.html#uhd_command_syntax

这是一个示例嵌入式python块,其中包含用于增益双值的传入消息端口和必须连接到USRP接收器/源的传出端口

from gnuradio import gr

class tuning_uhd(gr.sync_block):
    def __init__(self):
        gr.sync_block.__init__(self,
            name="Gain Tuning",
            in_sig=[],
            out_sig=[]
            )
        # Message ports
        self.message_port_register_out(gr.pmt.intern("uhd"))
        self.message_port_register_in(gr.pmt.intern("gain"))
        self.set_msg_handler(gr.pmt.intern('gain'), self.handle_msg)

    def handle_msg(self, msg):
        self.message_port_pub(gr.pmt.intern('uhd'), gr.pmt.to_pmt({'gain': gr.pmt.to_double(msg) })

答案 1 :(得分:0)

几个月前我对此功能有类似的需求。我的实现涉及制作自动生成的Python 2.7文件的副本,然后编辑它以添加所需的功能。在我的情况下,我需要一种快速而简单的方法来生成多个通道并在执行文件时设置变量。这是通过使用click模块完成的,该模块允许设置变量并通过终端窗口执行文件。

如果您在执行期间尝试动态计算和更改变量,我的建议是使用threading模块(或等效模块)在main()函数中创建单独的线程。这个新线程应该调用一个循环遍历您的代码的单独函数。在此函数中,您的算法应该使用GRC自动生成的variablename_getvariablename_set函数。

目前还不清楚您用来计算这些收益变化的数据来自哪里,但希望这个答案很有帮助。