首页 > 解决方案 > wavfile_sink: 值 nan 不能在目标整数类型中表示

问题描述

我有几个通过 Internet 进行通信的 gnuradio 应用程序。流程图相当复杂,所以我将它们归结为最简单的形式来重新创建我看到的问题。

问题是,当我调用客户端时,它按预期连接到服务器,但立即抛出异常“值 nan 无法以目标整数类型表示”并且似乎来自 wavfile sink 块。

我将服务器简化为一个简单的拨号音流图,它在 TCP 端口上显示拨号音信号。客户端可以连接到该端口并期望接收拨号音信号。

如果我在同一台计算机上运行客户端和服务器并使用 localhost 进行连接,则客户端可以正常连接并按预期工作。但是,如果客户端和服务器相隔一段距离(通过互联网),那么我每次都会收到 nan 异常。

理论:

  1. 也许客户端正在启动并且没有足够快地接收数据(连接时间+ 20ms延迟)并且wavfile块正在从套接字PDU或流到标记的流块接收NaN?
  2. 也许数据在通过互联网时被破坏,导致数据包没有按预期到达 - 碎片?我尝试了 MTU 512,但问题仍然存在。Trued MTU 10000:相同的结果。
  3. 也许我在构建流程图时忽略了一个简单的用法/语法错误
  4. wavfile 接收器中有一个错误,它应该更优雅地处理数据的缺失。

更新 1:将错误报告记录到 gnuradio 项目https://github.com/gnuradio/gnuradio/issues/1763

更新 2:socket PDU 块似乎发挥了重要作用。如果我将流的数据包长度参数调整为标记流块,以及套接字 PDU 块的 MTU 参数,我可以获得带有丢弃数据包的无错误流(低 MTU)或带有 NaN 异常的死流(高 MTU )。

服务器流程图 在此处输入图像描述

客户端流程图(XYZ.com当然不是我的真实IP) 在此处输入图像描述

互联网上的 wav 结果(20-100ms 延迟) 在此处输入图像描述 此 wav 文件为 1k,可能与异常同时被截断,但很难确定。

wav 跨本地接口的结果(1 毫秒或更短的延迟) 在此处输入图像描述 跨本地接口客户端运行愉快,直到我停止它。接收到的信号符合预期。一件小事——注意到最初的几个样本有问题吗?不确定这是否是一个因素。可能不是。但是即使在本地接口上,前 10 毫秒左右的数据也是垃圾。

标签: gnuradio

解决方案


推荐阅读