我们开发了一个小型Gnuradio流程图,该流程图使用了 3 个“ UHD:USRP源”(N210设备),它们均通过交换机连接在同一子网中。由于它们每个仅具有250 kS / s的采样率,因此千兆以太网上的数据率应该绰绰有余。启动应用程序时,我们将获得以下输出:
linux; GNU C++ version 5.3.1 20151219; Boost_105800; UHD_003.009.002-0-unknown
-- Opening a USRP2/N-Series device...
-- Current recv frame size: 1472 bytes
-- Current send frame size: 1472 bytes
UHD Warning:
Unable to set the thread priority. Performance may be
negatively affected.
Please see the general application notes in the manual for
instructions.
EnvironmentError: OSError: error in pthread_setschedparam
-- Opening a USRP2/N-Series device...
-- Current recv frame size: 1472 bytes
-- Current send frame size: 1472 bytes
UHD Warning:
Unable to set the thread priority. Performance may be
negatively affected.
Please see the general application notes in the manual for
instructions.
EnvironmentError: OSError: error in pthread_setschedparam
Using Volk machine: avx2_64_mmx_orc
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD
检查了一段时间后,我们非常确定此输出意味着Gnuradio仅打开了与两个的usrp设备的连接(它只显示“打开USRP2 / N系列设备...”两次),因此其中之一丢失。
从其中一台设备接收到的数据似乎被路由到Gnuradio中的两个“ UHD:USRP源”,这又导致这两个设备丢失数据包(因为从它们的角度来看,这些数据包没有递增的数据包编号)。因此,我们在输出中看到所有“ D”,这在USRP Hardware Driver Manual中进行了解释。
有人认为这与线程优先级或最大接收和发送缓冲区大小有关,但是我们试图更改这些内容,但这没有帮助。
此外,我们知道Ettus声明每个设备都应连接到主机上的单个以太网端口,并且每个设备都具有自己的子网。但是我认为该建议仅对高数据速率要求成立。因此,为了测试usrps,网络连接和交换机是否能够处理此数据速率,我同时启动了三个uhd_fft
应用程序。以1 GBit / s的数据速率和每个复杂样本32位的速率,我假设我的总采样率可以减去31.25 MS / s的控制开销。因此,我将两个uhd_fft
应用程序设置为10 MS / s,然后逐渐增加了第三个应用程序。 9 MS / s正常工作,而10MS / s再次出现溢出(“ D”)。
因此,硬件(和UHD)能够执行此操作,但是使用Gnuradio,似乎不可能使总数据速率接近此水平。有人可以解释那里发生的事情以及我们该如何解决吗?
注意:我观察到,在Gnuradio Usrp Source块中指定了不存在的IP地址之后,Gnuradio连接到它可以找到的任何设备。也许这与我们的问题有关?