gnuradio 源代码块如何知道要输出多少样本?

How does a gnuradio source block know how many samples to output?

我正在尝试了解 gnuradio 源代码块的工作原理。我知道如何制作一个简单的 并且我了解采样率的含义,但我不确定如何(或在哪里)将两者结合起来。

源块是否负责调节输出的数据量?或者它输出的数量是否取决于流程图中的其他块以及它们消耗了多少?一些源代码块将 sample_rate 作为输入,这让我认为它是前者。但是其他街区没有,这让我认为是后者。

如果源块负责其采样率,它如何调节它?他们是否根据此检查系统时钟和输出样本?

Do they check the system clock and output samples based upon that?

绝对不是。所有 GNU Radio 块都以处理器可以提供的最大速度运行。

然而,GNU Radio 依赖于这样一个事实,即每个流程图可能有一个源 and/or 接收器设备(例如 USRP、其他 SDR 设备、声卡),该设备 produces/consumes 以恒定速率采样。因此,流程图以硬件的速度受到限制。

为了避免CPU饱和,如果none这些硬件设备存在,GNU Radio提供了尝试Throttle块(它不是那么准确)以给定的速率限制每秒的样本,通过在每个通过 Throttle 块的样本之间休眠适当的时间。

sample_rate 参数而言,不包括 Throttle 和设备特定块, 用于图形表示或内部计算。