[OpenAirInterface实战-19] :OAI 软件无线电USRP UHD硬件驱动程序的使用与网络架构

2023-10-27

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/121092297


目录

第1章 USRP UHD概述

1.1 官网主页

1.2 概述

1.3 USRP硬件型号的区别

第2章 USRP Hardware Driver (UHD)的网络架构

2.1 概述

2.2 Host 基带BB + Host UHD驱动 + USRP RF整体的网络架构

2.3 Host 基带BB

2.4 Host UHD驱动

2.5 USRP RF

2.6 多USRP组网方案

第3章 Host UHD驱动程序的特性

3.1 开源性

3.2 发布周期

3.3 代码可移植性

3.4 编译UHD代码外部的依赖文件

第4章 Host UHD驱动程序的IQ数据处理相关的配置

4.1 IQ数据的传输

4.2 射频频率微调

4.3 采用率Sample Rate

4.4 IQ数据的纠正

第5 其他

5.1 GPIO的功能

5.2 射频前端的扩展

5.3 USRP与BB开源软件的关系

第6章 其他资源



第1章 USRP UHD概述

1.1 官网主页

UHD - Ettus Knowledge Basehttps://kb.ettus.com/UHD

1.2 概述

Ettus Research USRP™ 系列软件定义无线电 (SDR) 是多功能设备,允许用户在通用硬件平台上以各种频率和设置发送和接收许多不同的自定义波形。

商业、学术和军事客户采用灵活且可重复使用的 USRP 硬件进行研究、无线探索和现场部署。

1.3 USRP硬件型号的区别

USRP 有多种外形和配置。USRP 的主要类别是:

  • 总线 (B) 系列 – 通过 USB 连接连接到主机
  • Network(N) 系列 – 通过以太网连接到主机
  • 高性能 (X) 系列 – 连接可以是以太网或 x4 PCI-Express 连接
  • 嵌入式 (E) 系列 – 旨在独立运行(无需主机)。

第2章 USRP Hardware Driver (UHD)的网络架构

2.1 概述

USRP 硬件驱动程序 (UHD) 是在通用处理器 (GPP) 上运行的用户空间库,可与所有 USRP 设备系列进行通信并对其进行控制。

UHD 通过提供灵活的功能丰富的 SDR API,帮助商业、学术、军事、业余爱好者和其他 SDR 用户进行无线协议的快速原型设计或部署。

B、N 和 X 系列 USRP 从主机发送和接收样本,如图 1 所示。

由于我们的嵌入式E系列(包括N系列)的USRP 包含一个内部 通用CPU,您可以在不需要主机的情况下运行这些无线电(独立模式) .

Uhd 介绍图 1.png

Host PC:充当的是基带板BB的功能(包括带支持L1加速卡硬件或其他基带板硬件平台) 

除了E系列,USRP充当的是RF (RRU)的功能。

USRP 是收发器,这意味着它们既可以发送也可以接收 RF 信号。

UHD 提供必要的控制,用于将用户波形样本传输到 USRP RF硬件和从 USRP RF硬件传输以及控制USRP RF硬件无线电的各种参数(例如采样率、中心频率、增益等)。

2.2 Host 基带BB + Host UHD驱动 + USRP RF整体的网络架构

Uhd 介绍图 2.png

2.3 Host 基带BB

这部分代码不是有软件无线电组织提供,就不在USRP的代码范围内,其他的基带开源组织提供。

支持的基带开源组织有:

Third Party

2.4 Host UHD驱动

UHD实现带有基带软件的主机Host与USRP硬件的通信,通信的手段和协议栈,取决于USRP与Host PC之间的连接方式:

  • 总线 (B) 系列 – 通过 USB 连接连接到主机 =》 USB驱动
  • Network(N) 系列 – 通过以太网连接到主机 =》  以太网驱动
  • 高性能 (X) 系列 – 连接可以是以太网或 x4 PCI-Express 连接 =》PCIe驱动

UHD是一个通用的软件,能够支持上述所有方式。

UHD X86 CPU驱动程序是用 C/C++ 编写的

2.5 USRP RF

  • USRP FPGA(现场可编程门阵列)开发的代码是用 Verilog 编写。
  • USRP  ARM firmware程序是用 C/C++ 编写的。

上述两个程序,可以Host下载到USRP硬件中,也可以通过仿真器预先烧录。

2.6 多USRP组网方案

UHD 将 USRP 系统上的通道数量全部视为一个复合设备,从而简化了扩展 USRP 系统上的通道数量,参见下图 9:使用4个2T2R组成一个8T8R的小区。

Uhd intro figure 9.png

备注:

在 X300/X310 的情况下,在这种多 USRP 配置中使用 USRP 时,用户可以使用外部时钟源(具有 10 MHz 时钟参考和 PPS 信号)来同步所有设备。

第3章 Host UHD驱动程序的特性

3.1 开源性

大多数 UHD 代码库是开源的,包括在主机上执行的代码,以及针对 USRP 硬件(FPGA 和微控制器固件)的代码。作为双重许可软件,UHD 可在开源 GNU 公共许可证版本 3 (GPLv3) 以及仅由 Ettus Research 提供的替代性、限制性较小的许可证下使用

3.2 发布周期

由于UHD的开源特性,整个开发过程也是开放的,可以通过我们的Git版本控制系统跟踪UHD的开发。用户可以选择是否喜欢最新的开发代码(功能最丰富但有时可能不稳定),或者是经过更彻底测试的不包含最新开发的代码。修订版本(例如 UHD 3.9.2 版)大约每两个月发布一次,并且通常只包含与先前版本相比的错误修正(例如,UHD 3.9.2 具有与 3.9.1 相同的功能集,但更稳定)。这些错误修复版本是在 maint 分支完成的,这是所有错误修复开发发生的地方。

新功能开发是在主分支上完成的。这个分支不应该被认为是稳定的,即使我们使用持续集成系统来监控它的状态。但是,主分支上的 API 或依赖项要求可能会发生变化。

在功能开发周期结束时,master 分支被冻结,并且只有错误修正被接受到 master 分支中。一旦 master 分支被认为是稳定的,maint 分支就会重置为主分支,并且从之前的 master 分支生成一个新的版本。这由主要版本号跳转指示(例如,从 3.8.3 到 3.9.0 时)。主要版本每年发布 1-2 次,通常伴随新产品发布。

除了 main 和 master 分支之外,有时会发布新功能分支(临时)以深入了解即将推出的功能,并更早地访问新开发。

3.3 代码可移植性

UHD 软件 API 支持所有 USRP SDR 产品的应用程序开发。

使用通用软件接口至关重要,可实现代码可移植性,并允许应用程序在开发需求扩展或新系统可用时无缝过渡到其他 USRP SDR 系统。因此,它允许您保留和重用遗留代码,从而显着减少开发工作。

UHD 可以安装在 Linux、Windows 或 Mac 上。

Uhd 介绍图 3.png

3.4 编译UHD代码外部的依赖文件

(1)Python

兼容 Python 2.7 及更高版本(支持 Python 3)。注意构建(build)UHD时需要Python,并且 UHD 附带的一些实用程序是用 Python 编写的。

注意:运行UHD和应用程序的可执行程序时,并不需要它。

(2)Linux

这取决于您使用的发行版,但大多数(如果不是全部)依赖项应该在您的包管理器的包存储库中可用。有关更多信息,请参阅Linux 构建说明 (后续单独说明,如何在Linux下Build UHD

(3)Mac OS X

安装 Xcode 应用程序以获取构建工具(GCC 和 Make)。使用 MacPorts 获取 Boost 和 Mako 依赖项。其他依赖项可以作为 DMG 安装程序从 Web 下载或通过 MacPorts 安装。有关更多信息,请参阅UHD OS X 构建说明

(4)Windows

可以通过可安装的 EXE 文件获取依赖项。通常,可以在项目的网站上找到 Windows 安装程序。某些项目不托管 Windows 安装程序,如果是这种情况,请遵循 Windows 安装程序的辅助下载 URL(如下)。有关详细信息,请参阅Windws 构建说明

(5)Git

(6)Build Dependencies

UHD Version GCC Clang MS Visual C++ CMake Boost LibUSB Mako Doxygen Python Xilinx Vivado
3.9.X >= 4.4 >= 3.3 >= 2012 (11.0) >= 2.8 >= 1.46 >= 1.0 >= 0.5.0 >= 1.8 (recommended) >= 2.7 == 2014.4
3.10.X >= 4.8 >= 3.3 >= 2012 (11.0) >= 2.8 >= 1.53 >= 1.0 >= 0.5.0 >= 1.8 (recommended) >= 2.7 == 2015.4

Other compilers (or lower versions) may work, but are unsupported.

Note on MSVC: The free Visual Studio Express Edition for Desktop works.

Note on Boost: Older versions of UHD may not work with newer versions of Boost, as the Boost API sometimes changes, and we can't retroactively fix older UHD versions. For example, UHD 3.8.X (and older) won't work with Boost 1.60.

第4章 Host UHD驱动程序的IQ数据处理相关的配置

4.1 IQ数据的传输

UHD使用以太网、USB 和 PCI-Express 等标准接口方法处理传输 I 和 Q 样本数据(有关 I 和 Q 样本的信息,请参见此处)的控制。

样本可以以连续流的形式发送,如图 4a 所示,

也可以以突发形式发送,如图 4b 所示。

此外,用户可以使用内置的突发定时命令指定何时接收或发送样本数据。

Uhd 介绍图 4.png

4.2 射频频率微调

USRP RF 前端可能支持特定频率步长,所有但不能满足用户的或许多要求。因此,UHD 在 FPGA 中包含数字上变频 (DUC) 和数字下变频 (DDC) DSP 模块,用于微调 RF 频率(请参阅此处)。这允许用户:

  • 具有 sub-Hz RF 频率步长
  • 缓解直接转换(零中频)硬件上存在的 DC 问题(请参阅此处)。
  • 在可用带宽内快速调谐

如下图所示:

Uhd intro figure 5.png

4.3 采用率Sample Rate

不同的 SDR 配置、波形和应用,需要不同的采样率。

例如,用户可能希望监控 100 MHz 的瞬时 RF 带宽,但他们的主机 PC 可能只能分析 20 MHz 的实时带宽。

对于这种情况和其他情况,UHD 允许用户设置各种采样率以满足他们的自定义应用程序。

在 FPGA 中,UHD 包括抽取和插值模块,以执行这些采样率转换。

4.4 IQ数据的纠正

所有直接变频(零中频)RF 架构的固有特性是 IQ 不平衡的影响。在此处找到的名为“正交损害对 802.11ac EVM 的影响”的视频演示了此属性。在此处查找其他信息。总之,使用直接转换架构的设备上的任何给定信号都有两条 TX 路径和两条 RX 路径。

一条路径是同相或“I”,另一条路径是正交“Q”,也称为实数和虚数。

Uhd 介绍图 6.png

 由于组件、温度和其他因素的差异,I 和 Q 信号路径会受到不同条件的影响,因此会改变初始捕获时存在的原始信号。当 I 或 Q 的相位或幅度改变时,结果显示为原始信号中实际上不存在的信号。例如,请注意在 GNU Radio Companion 中创建的这个 GNU Radio Flowgraph 中的以下 IQ 损伤模拟。

Uhd 介绍图 7.png

通过使用“HW Impairments”模块,您可以模拟 I 和 Q 信号路径中断时发生的情况。在图 8a 中没有添加损伤。但是,当 I 路径的幅度略有增加时,您会得到如图 8b 所示的伪影。

Uhd 介绍图 8.png

可以减轻数字域中的一些不良影响。UHD 包含 FPGA 内的功能块以补偿 IQ 损伤;这些块作为 IQC 块出现在图 1 中。用户可以根据经验测量自定义这些块的参数,或者允许 UHD 执行自动分析并根据内置的 IQ 校正算法提供参数。有关更多信息,请参阅UHD 手册中的以下功能:

  • uhd_cal_rx_iq_balance: - 最小化 RX IQ 不平衡与 LO 频率
  • uhd_cal_tx_dc_offset: - 最小化 TX DC 偏移与 LO 频率
  • uhd_cal_tx_iq_balance: - 最小化 TX IQ 不平衡与 LO 频率

第5 其他

5.1 GPIO的功能

通用输入输出 (GPIO) 引脚可以通过 UHD 手动控制,也可以从 UHD 设置为在发生 TX 或 RX 等事件时自动触发。在何处或如何使用此自动触发的示例:当用户将 RF 放大器连接到 USRP 的 TX 或 RX 端口时,只有在 USRP 正在传输时才能开启放大器。您可以在此处找到有关 E3x0/X3x0 上的辅助 GPIO 的更多信息。

备注:GPIO的硬件位于USRP RF硬件上,UHD对GPIO的功能进行配置。

5.2 射频前端的扩展

USRP 可以与来自 3rd 方的不同 RF 前端接口。

通过使用 BasicRX 和 BasicTX 子板,用户可以向第 3 方的射频前端硬件发送或接收基带或 IF(中频)模拟信号。

5.3 USRP与BB开源软件的关系

除了将 USRP 系列 (UHD) 集成到 GNU Radio 的 gr-uhd 模块的开发之外,Ettus Research 还经常为 GNU Radio 项目做出贡献。尽管 USRP 无线电通常与 GNU Radio 软件框架相关联,但许多 USRP 应用程序(例如OpenBTS)在没有 GNU Radio 的情况下运行。有关 GNU Radio 的更多信息,请参见此处

第6章 其他资源

Github:https : //github.com/EttusResearch/uhd

手册:https : //files.ettus.com/manual/index.html


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/121092297

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[OpenAirInterface实战-19] :OAI 软件无线电USRP UHD硬件驱动程序的使用与网络架构 的相关文章

随机推荐

  • 达尔文商品管理

    什么是达尔文 达尔文是一套全新的商品管理体系 它不同于淘宝原来的分类法 基于类目属性体系 的管理思路 而是以最细粒度的产品节点 CSPU 为核心 使用系统 运营机制的方式维护一套丰富 准确的产品库 通过产品实现聚合 管控商品 以确保商品信息
  • Spring中typeAliasesPackage的作用

    typeAliasesPackage 是自动配置别名 也就是设置这个之后 在Mybatis的Mapper文件里就可以写对应的类名 而不用写全路径名了 例如 typeAliasesPackage xyz hashdog modules bea
  • UE4物体随着样条线(Spline)运动

    1 样条线原理 1 1 贝塞尔曲线 一定要经过起止点 若干个控制点用于控制曲线弯曲的方向 最终形成一条光滑的曲线 由于贝塞尔曲线点太多了不好控制 一般每四个点做一次贝塞尔曲线 得到的若干段相邻贝塞尔曲线的连接点需要共线且距离相同 即为C1连
  • Java 菜鸟入门

    前言 所谓进制转换 就是人们利用符号来计数的方法 进制转换由一组数码符号和两个基本因素 基数 和 位权 所构成 其中基数是指进位计数制中所采用的数码的个数 逢 n 进 1 中的 n 就是基数 而位权则指的是进位制中每一个固定位置所对应的单位
  • Vue PostCss插件——autoprefixer配置完成后无效,已解决

    在使用autoprefixer时 先前的配置能成功添加css浏览器前缀 但结合postcss pxtorem插件后 px可以转换为rem 但css前缀无效 经过几个小时的鼓捣 终于让我发现了蛛丝马迹 哈哈哈 好开心 好激动 一起来看一看博主
  • Vue.js面试题

    目录 1 如何再Vue的单文件组件里的样式定义全局CSS 2 vue router 3 1 0
  • C语言itoa函数实现-数字面值转字符串

    数字面值转字符串 思路 首先判断是否为负数若是则转为正数 将待转换的int类型值每次对10取余获得最低位的数字 将该数字转为字符面值 然后将int类型值除以10 直到等于0结束循环 此时由于是从int类型值的最低位开始取得 所以转换出来的字
  • Vulkan-实践第一弹

    上一篇文章中 我们浅析了Vulkan对传统图形API的优势 主要就是在其性能和精细化操控GPU上 具体可参考Vulkan 性能及精细化 今天我们就来用个简单的例子 亲身感受下Vulkan的开发 魅力 include
  • 网络安全——SQL注入漏洞

    一 SQL注入概述 1 SQL注入漏洞 攻击者利用Web应用程序对用户输入验证上的疏忽 在输入的数据中包含对某些数据库系统有特殊意义的符号或命令 让攻击者有机会直接对后台数据库系统下达指令 进而实现对后台数据库乃至整个应用系统的入侵 2 S
  • 代码审计-弱类型整数大小比较绕过

    temp GET password is numeric temp die no numeric NULL if temp gt 1336 echo flag is numeric 同样可以用数组绕过 00截断 添加其他字符 http 12
  • 为何我的请求报错handshake_failure

    这两天被httpclient发送https请求烦死了老是失败 今天终于连通的于是来说说这几天遇到的坑 首先是域名 因为配置的是公网域名和地址 原来的工程内网用ip访问是不行的 在验证host的时候会给错误不让连 解决方案是修改本机hosts
  • LaTeX学习笔记(表格操作)

    1 创建tabular表格 使用如下语句创建表格 且创建表格时必须声明表格中各元素对其方式 有几列就需要几个对其参数 begin tabular clr c为居中对其 l为左对齐 r为右对齐 表格数据 end tabular 注 表格中用
  • python虚拟环境,conda的安装与使用

    axiner 声明 错了另刂扌丁我 如若有误 记得评论指出 谢谢了 简介 Conda 是一种通用包管理系统 当然包含管理Python 支持linux mac win Anaconda 是一个开源的Python发行版 包含了conda pyt
  • 微信小程序简洁登录页面(附源码)

    文章目录 1 登录页面 2 用户不存在 3 代码 3 1 login wxml 3 2 login css 3 3 login js 4 斜体样式 总结 1 登录页面 登录的具体流程 1 当用户输入密码和账号后首先检验账号和密码是否为空 2
  • 双线性插值_亚像素边缘尺寸测量

    读了好几篇关于亚像素边缘的博客 记录几点收获总结 若有错 还请读者朋友指正 亚像素边缘常见的方法主要是插值法和拟合法 如 近邻插值 双线性插值 三次插值 最小二乘法拟合等 实际并不存在亚像素边缘坐标 可以通过放大或缩小图像获得原图像的亚像素
  • 微信公众号网页授权-java开发

    1 项目需求背景 需要在公众号菜单挂开发的页面 2 参考微信开发文档微信开放文档 我总结了以下几步 正式环境 只需要在公众号平台自定义配置菜单链接 把项目部署到公网 下面重点说一下开发环境如何编写和测试 开发环境 首先你需要一个微信测试账号
  • cadence allegro学习记录(三)

    1 中英文切换 需要17 4 2019 s019以上补丁 此电脑 属性 高级系统设置 环境变量 新建用户变量 变量名 intl enabled 变量置 1 重新启动软件 2 主题设置 setup user preference UI Gen
  • Python格式化输出

    Python格式化输出有两种方式 用百分号 占位实现格式化输出 用format函数和大括号 占位实现格式化输出 推荐 个人喜欢这种方式 用百分号占位实现格式化输出 用百分号加一个英文字母占位 英文字母代表不同的数据类型 参考C语言的形参 实
  • mysql 判断是否日期类型_MySQL:日期类型

    1 datetime 年月日时分秒 格式 YYY MM DD HH MM SS 占用 8字节 范围 1000 01 01 00 00 00 到 9999 12 31 23 59 59 tip 可以接收任意分隔符的日期 主要是判断日期是否正确
  • [OpenAirInterface实战-19] :OAI 软件无线电USRP UHD硬件驱动程序的使用与网络架构

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 121092297 目录 第1章 USR