1

我正在尝试在由多个 B210 USRP 设备组成的 gnu 无线电中创建一个同步的 usrp 源块。朗:C++。

根据我的发现,我需要:

  • 实例化多个 multi_usrp_sptr,因为每个 B210 都需要一个,并且多个 B210 设备不能通过使用单个 sptr 来寻址
  • 使用外部频率和 PPS 源 - 可以从块中选择或以编程方式设置的选项
  • 同步重新/调整以实现节点之间的可重复相位偏移 - 这可以使用定时命令 API https://kb.ettus.com/Synchronizing_USRP_Events_Using_Timed_Commands_in_UHD来实现
  • 使用 time_spec 属性 issue_stream cmd 同步示例流

问题是我应该如何插入这些定时命令并在 GNU 无线电块或 gr-uhd 库中设置流的 time_spec?

我查看了接收器/源代码所在的 gr-uhd 文件夹,发现了可以更改的函数。不幸的是,我不知道如何复制或导出这个库来进行这些修改,然后编译以将我的自定义块插入到 GNU Radio,因为 gr-uhd 似乎是在安装 GR 时内置和编译的。我尝试应对然后制作 lib,但那不是方式 - 它没有成功。我应该通过 gr_modtool 添加我自己的源代码块并只插入我需要的命令吗?除了添加几行之外,与 uhd 及其功能的兼容性将有利于不从头开始编写源代码。

请指教

编辑
实验流程图,基于 Marcus Müller 的建议:
Experimental usrp synchronization flow

4

2 回答 2

0

问题是我应该如何插入这些定时命令并在 GNU 无线电块或 gr-uhd 库中设置流的 time_spec?

对于 USRP 接收器:将包含具有正确命令时间的字典的标签添加到流中。GNU Radio API 文档提供了有关这些字典的外观的信息。该time字段是您需要使用适当值设置的内容。

对于 USRP 源:使用块set_start_time上的uhd_usrp_source;使用与上述相同的字典在协调时间发出调整、增益设置等命令。

于 2020-07-23T12:57:04.157 回答
-1

我试图找到一种通过标签同步 USRP 的正确方法。我在这种方法中遇到了一些问题:

  1. 定时命令需要知道当前时刻,这是通过 完成的usrp.get_time_now(),尽管我会请求 USRP 通过标签给出时间,但我必须以某种方式从输出中提取它。(进行某种循环和适当的触发)(来源: https ://kb.ettus.com/Synchronizing_USRP_Events_Using_Timed_Commands_in_UHD )或者可能不是以相对方式计划所有事情 - 使用绝对值而不是偏移量。我已经看到一种方法可以定期重置每个 PPS 的时间感(将其设置为 0.0),然后将命令时间设置在 0.0-1.0 的范围内可能是可以接受的。那么用于读取时间并将时间插入命令的循环也将是多余的。
  2. 我没有找到一种通过块在 GR 中创建字典以使解决方案可扩展(无需在文本框中编写几行代码)或编写 OOT 块的方法
  3. 最后,很少有信息可以说明哪种解决方案最合适(PDU、事件、标签在 GR 中是否仍然相关?),而且文档非常稀缺,经过一些邮件,我决定添加一个简单的类它继承自主 top_bock.py 并在实例化 top_block 之后调用一些函数来同步设备。这种方案不是最灵活的方案,需要通过继承调用父类top_block.py,但它提供了一个简单的编程接口。

很快我将添加一个用于继承类的代码示例,以防万一。

如果有任何更简洁、动态或可扩展的解决方案,请告诉我或指向我的来源。

于 2020-07-27T19:42:03.003 回答