【问题标题】:Reading signal from GNU Radio UDP sink from client side从客户端读取来自 GNU Radio UDP 接收器的信号
【发布时间】:2021-07-18 06:09:36
【问题描述】:

说实话,我有点困惑,我猜这个错误很明显。无论如何。

所以,一方面我有一个来自 GNU Radio 的 UDP 接收器,它向 Python 客户端发送数据。

问题是我收到的数据没有多大意义(如果我从文件接收器读取数据,我能够正确读取数据,所以它与我做网络部分的方式有关)。

我已经尝试过小端和大端,以防万一,我仍然会得到垃圾。

所以,在接收端(服务器端),块配置是:

self.blocks_udp_sink_0 = blocks.udp_sink(gr.sizeof_gr_complex*1, "the_ip",8080,1472,True)

那么,另一方面,我会得到 1500 个字节,不是吗? 1472的payload+28的UDP header。

我所做的,基于这个 [1] 示例似乎还可以,正在客户端读取 1500 个字节并假设标头是通过 recvfrom 方法取出的:

data_tmp, addr = sock.recvfrom(1500)

我假设 data_tmp 应该是 1472 字节的数据,至少长度匹配)。

当我发送 gr_complex 时,我读取了 8 个字节(两个浮点小端序,一个用于 I,一个用于 Q 组件)。

那么,我错过了什么?

谢谢!!

[1] 还有很多其他类似的,关键是我假设该方法将标头与有效负载分开。 https://www.binarytides.com/programming-udp-sockets-in-python/

【问题讨论】:

    标签: python gnuradio usrp


    【解决方案1】:

    当您从套接字读取时,UDP 标头已被删除,因此您不应尝试读取 1500 字节而是 1472。

    除此之外,这看起来不错。

    我通常建议使用 UDP(您必须自己处理数据包丢失,甚至可能是 L2 碎片等),但是 ZeroMQ 接收器之一(PUSH Socket 会是一个不错的选择)想法在这里)和你最喜欢的 Python ZeroMQ 库(pyzmq)作为另一端(PULL 套接字);您可以通过 TCP(如果您需要通过网络)、IPC(如果您的 GNU Radio 流程图和接收程序可以使用 Unix 进程间通信)或几个“专业”传输获得低开销的数据传递接口。

    【讨论】:

    • 您说的完全正确,错误出现在代码的另一部分。现在它起作用了。我将研究其他改进点,因为我认为基于 TCP 的通信需要这种级别的实时“速度”是不好的做法,但我会研究 ZeroMQ 点,谢谢!
    • 确实会带来惩罚,但话又说回来,您可能实际上并不愿意接受未被注意到的数据包丢失。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2021-11-09
    • 2023-03-31
    • 2023-03-06
    • 2021-05-05
    相关资源
    最近更新 更多