如何通过UHD Python API分别控制两台B205 mini USRP设备
用UHD Python API控制多台B205 mini USRP设备
完全可以通过uhd.usrp.MultiUSRP()结合序列号指定设备地址来实现多台USRP的单独寻址,具体操作如下:
核心实现逻辑
UHD的设备地址支持通过serial关键字精准定位设备,多个设备的地址用逗号分隔传入MultiUSRP后,就能同时管理多台设备,再通过设备索引或直接指定序列号来单独配置每台设备的参数。
具体步骤与代码示例
1. 构造多设备地址字符串
假设两台B205的序列号分别是SN12345和SN67890,按以下格式拼接地址:
device_addrs = "serial=SN12345,serial=SN67890"
2. 初始化MultiUSRP对象
import uhd usrps = uhd.usrp.MultiUSRP(device_addrs)
3. 单独配置单台设备
可以通过设备索引(从0开始,对应地址字符串里的设备顺序)或直接指定device_addr参数操作目标设备:
- 给第一台设备设置接收频率:
# 通过索引指定(0对应第一个地址的设备) usrps.set_rx_freq(uhd.libpyuhd.types.tune_request(2.4e9), 0) # 或者直接指定序列号 usrps.set_rx_freq(uhd.libpyuhd.types.tune_request(2.4e9), "serial=SN12345") - 给第二台设备设置接收增益:
usrps.set_rx_gain(30, 1) # 索引1对应第二个地址的设备
4. 多设备同时收发示例
以同时接收两台设备数据为例:
# 配置流参数 stream_args = uhd.usrp.StreamArgs("fc32", "sc16") rx_streamer = usrps.get_rx_stream(stream_args) # 启动接收 rx_streamer.issue_cmd(uhd.usrp.StreamCMD.stream_start()) # 接收采样数据 num_samps = 1024 recv_buff = rx_streamer.recv(num_samps, 1.0) # recv_buff形状为[通道数, 采样点数],两台单通道B205对应(2, 1024)
注意事项
- B205 mini是单收发通道设备,每台设备对应一个通道/主板,索引顺序和地址字符串中的设备顺序一致。
- 所有支持多设备的UHD API方法(如
set_tx_freq、set_tx_gain等),都支持通过索引或设备地址字符串指定目标设备。
内容的提问来源于stack exchange,提问作者akra1
相关产品推荐
相关产品推荐

