如何在GNU Radio OOT块中获取UHD Sink的下溢通知?
在GNU Radio OOT块中检测UHD Sink下溢的方法
直接调用UHD API获取状态
UHD Sink底层依赖UHD设备API,其中uhd::tx_metadata_t结构体包含下溢(underflow)标志位。若你的OOT块与UHD Sink共享同一UHD设备上下文,可通过以下步骤获取:- 调用
uhd::usrp::multi_usrp::get_tx_stream()获取流对象; - 调用
recv_metadata()读取tx_metadata_t::underflow字段,判断是否发生下溢。
注意:需保证OOT块与UHD Sink使用同一设备实例,避免资源冲突。
- 调用
利用GNU Radio消息传递机制
UHD Sink原生支持将下溢事件以消息形式输出:- 在GRC中为UHD Sink的
msg_out端口连接消息接收逻辑(如自定义OOT块的消息端口); - 在OOT块代码中注册消息处理回调,当收到UHD Sink发送的下溢消息时,执行对应处理逻辑,消息通常包含下溢发生的时间戳等信息。
- 在GRC中为UHD Sink的
扩展自定义UHD Sink
若默认机制无法满足需求,可基于原UHD Sink源码修改:- 将UHD Sink源码复制到OOT模块中,修改其
work()函数; - 当下溢触发时,调用自定义回调函数或向OOT块发送信号,实现定制化通知。
- 将UHD Sink源码复制到OOT模块中,修改其
内容的提问来源于stack exchange,提问作者JeanJeanLabricot
相关产品推荐
相关产品推荐

