如何在引用外部/全局变量的层次块中创建参数?

时间:2019-10-23 14:09:48

标签: gnuradio gnuradio-companion

GNU Radio Companion中的许多默认块的“采样率”参数设置为 samp_rate ,因此,将这些块添加到画布上后,它们会立即采用< strong> samp_rate 变量(假设它当然存在)。

在创建自己的分层块时,如何指定参数引用外部/全局变量? Parameter块仅接受值。

2 个答案:

答案 0 :(得分:1)

我这样做的方法是在分层块中使用Parameter块。我给它一个ID,例如freq_ratio,键入float,默认值为0.5。无论我使用具有采样率参数的块(例如信号源)(正如您所说的,通常默认为samp_rate),我都将其替换为1.0,并设置频率到freq_ratio

要在顶级流程图中使用该块,则分层块的freq_ratio的默认值为0.5,但在顶层可以用1000.0 / samp_rate替换。假设顶部块的samp_rate用于实际设备(例如音频输出块),则内部的Signal Source块将为我产生1kHz的信号。

重点是,“采样率”在GNU无线电流程图中实际上并不意味着任何东西,除非它由表示物理内容的块(例如,音频输出块或实际SDR)使用。因此,人们可以很高兴地使用比率。

您可以执行的另一种方法是在分层块中使用两个参数。第一个可以称为samp_rate;给它一个默认值。第二个可以称为freq;再次给它一个默认值。然后,分层块中的信号源块可以将这两个参数用于其采样率和频率。在顶层,将层次结构块的采样率参数的默认值替换为samp_rate,并将其频率的默认值替换为所需的值(常量,其他变量,Qt Range小部件的ID,等等)。您在顶部块中键入的samp_rate将是顶部块的采样率变量。

我尚未真正回答您的问题

基本上,上述所有操作都是为了最大程度地方便而完成的方法,但是恐怕无法自动地将顶部块的samp_rate自动用于分层块中的块。恐怕就是答案。

这很有道理;如果您正在编写源代码,则不要期望函数能够访问尚未在函数访问范围内定义的全局变量。

anerisgreat在第二段中所说的话:

You can always access the .py of the block and make it read a global variable.

就是说,一旦GRC为您生成了所有.py源代码文件,您就可以手动对其进行编辑,以便分层块确实使用samp_rate全局变量而不是其参数之一的值。块。

之所以行之有效,是因为到那时,现在可以(通过手动编辑.py文件)查看从分层块生成的函数(或类+方法),以查看顶部块{{1 }}已定义。但这是一种非常难以维护的方法。

答案 1 :(得分:0)

在代码中没有适当的(可靠的)方式引用“全局变量”。

您始终可以访问该块的.py并使其读取全局变量。

执行此操作的正确方法是使用参数块,并将变量名作为值。在编辑分层块时,参数块不能访问任何变量。但是,您仍然可以将参数块的值设置为变量的值,默认情况下,它将在顶层使用该变量名读取变量。

假设您有一个名为“ my_samp_rate”的参数。您可以将其值设置为samp_rate(不带引号,不是字符串,而是变量名)。在该块内,它无法识别任何samp_rate值(因为未设置任何值)。

但是,当您将新块放置在流程图中时,其默认值(可以更改,请注意)将为samp_rate。如果流程图中有一个值为samp_rate的变量,它将读取该值并将其作为参数传递给该块。这样,您可以创建一个块,该块具有默认情况下绑定到顶层变量的值。

这种方法的好处是,它不会强迫使用块的任何人通过使用建议的变量来这样做。这是默认值,但是如果要将参数的值绑定到其他变量的值,则可以完全配置。