USRP E320在GNU Radio中源-宿环路延迟非确定性问题求助
USRP E320 + GNU Radio 转发延迟非确定性问题排查与解决
这种延迟波动的核心原因是主机与USRP之间的以太网传输缓存、GNU Radio流图启动时序以及USRP内部缓冲区初始化的差异,以下是针对性解决方法:
1. 固定USRP同步与缓冲区参数
- 统一时钟源:将USRP Source和Sink模块的
Clock Source都设为internal(无外部时钟时),确保收发共用同一硬件时钟。 - 手动设置缓冲区大小:在两个USRP模块的参数里,把
Num Samples(或Buffer Size)设为固定值,比如16384,避免每次启动自动分配不同大小的缓冲区。 - 启用同步选项:在USRP Sink模块勾选
Sync,强制TX流与RX流严格对齐。
2. 优化Windows以太网传输设置
- 关闭TCP自动调优:以管理员身份打开命令提示符,执行:
netsh int tcp set global autotuninglevel=disabled - 禁用Nagle算法:执行命令:
netsh int tcp set global nagle=disabled - 启用Jumbo帧:在设备管理器找到网卡,进入「属性→高级」,找到“MTU”或“最大传输单元”,设置为
9000,同时确保USRP端MTU也设为9000(可通过uhd_usrp_probe查看,用uhd_configure_usrp修改)。
3. 配置GNU Radio流图为确定性模式
- 添加UHD时间同步模块:在RX和TX之间插入
UHD Time Sync模块,强制TX流起始时间与RX流对齐。 - 固定流图缓冲区:在GNU Radio Companion偏好设置的「流图」选项里,勾选“固定缓冲区大小”,并设置为与USRP模块匹配的值。
- 启动前校准USRP:在流图开头加
UHD Calibrate模块,确保每次启动时USRP完成射频校准,消除硬件状态差异。
4. 验证与前置操作
- 每次启动流图前,先重置USRP状态:
uhd_usrp_reset --addr=你的USRP IP地址 - 用
Message Debug模块记录RX/TX时间戳,对比每次启动的时间差,确认延迟是否稳定。 - 切换传输协议:把USRP模块的
Transport Method改成udp,TCP的滑动窗口机制容易引发延迟波动。
内容的提问来源于stack exchange,提问作者Ahmet Said Akan
相关产品推荐
相关产品推荐

