所以我对一个 RC 玩具无线协议进行了逆向工程,并在 GNU Radio Companion 中编写了一个流程图来重现玩具的命令。
sink 块为 osmocom sink,发送设备为 HackRF One。
我遇到的问题是按下按钮和玩具反应之间的严重滞后,大约是 1-2 秒。
快速按下,例如“前进”按钮两次,玩具也会快速连续地向前猛拉两次,大约在按下后一秒钟。所以它不像流程图本身很慢。CPU使用率也相当低。这看起来像一些缓冲问题。
我很确定流程图本身会立即对按钮按下做出反应,因为调试打印出现在按钮被按下/按下的同时,并且方波也会立即出现在 GUI 范围接收器中。
我试图将 HackRF 缓冲区的数量减少到一个(通过将设备参数设置为hackrf,buffers=1
),但这没有帮助。
我也将流程图的“最大输出数”设置为 10,它也没有任何区别(我也尝试了其他一些值)。鉴于该信号出现在 GUI 范围内的时间比 1 秒后要快得多,因此它无论如何都不应该起作用。
那我怎样才能减少延迟呢?
编辑:我遵循@Manos 的建议并尝试调整采样率。
添加一个带有 8 插值的有理重采样器块(并相应地调整接收器采样率)和设置hackrf,buffers=1
使延迟几乎不存在。
但是,将我的自定义块的输出采样率降低到 500k 并具有 16x 插值仍然会导致明显的延迟,可能是 400-500 毫秒(仍然没有源和接收器都为 1M 时那么显着)。我不知道如何解决它。不幸的是,以 1M 运行我的自定义块会消耗 100% 的 CPU 并导致偶尔的下溢。