从零开始USRP+GNRRADIO系列(基础入门篇和C++自定义模块)

article/2025/9/22 17:38:32

从零开始USRP+GNRRADIO系列(基础入门篇)

文章目录

  • 从零开始USRP+GNRRADIO系列(基础入门篇)
    • usrp简介
    • 创建第一个usrp图
    • C++自定义模块

usrp简介

通用软件无线电外设(USRP)是由Ettus Research及其母公司National Instruments设计和销售的一系列软件定义无线电。 USRP产品系列由Matt Ettus领导的团队开发,旨在成为一个相对便宜的软件无线电硬件平台,并且常用于研究实验室,大学和业余爱好者。
大多数USRP通过高速链路连接到主机,基于主机的软件用它来控制USRP硬件和发送/接收数据。一些USRP型号还将主机的一般功能与嵌入式处理器集成在一起,使USRP设备能够以独立的方式运行。
USRP系列专为可访问性而设计,许多产品都是开源硬件。选择的USRP型号的电路板原理图可免费下载; 所有USRP产品均由开源UHD驱动程序控制,该驱动程序是免费的开源软件。USRP通常与GNU Radio软件套件一起使用,以创建复杂的软件定义无线电系统。
在这里插入图片描述
下图非常形象的展示了整个SDR的发射过程,PC和USRP之间用USB链接,PC端运行SDR程序,将数据传输给USRP,经过数字域处理后DAC给模拟域发送出去。
在这里插入图片描述
USRP系列型号一览图:
在这里插入图片描述
后面的章节都将是通过usrpB210进行展开,使用的开发环境是GNU Radio ,
GNU Radio是一个免费的开源软件开发工具包,它提供信号处理模块来实现软件无线电。它可以与现成的低成本外部 RF 硬件一起使用来创建软件定义的无线电,或者用于纯仿真环境。它广泛用于业余爱好者、学术和商业环境,以支持无线通信研究和现实世界的无线电系统。
安装过程就不在此处陈述了,安装包和安装流程链接
链接:https://pan.baidu.com/s/1x3bMr-xdBDhEnUm_QPpcNg
提取码:eh5r

创建第一个usrp图

GNU Radio包含了许多通信组件模块,是一个可以用来研发无线通信系统的集成工具库。在本文中,我们将介绍如何使用GRC(gnuradio-companion的简写,GNU Radio的图形化界面编程工具,类似于simulink)来创建不同的通信程序。
安装完gnuradio后,在linux命令行输入

sudo gnuradio-companion

界面如下,下图是一个简单的环回电路,就是自发自收在这里插入图片描述
定义了全局变量samp_rate=32k,右上角可调节的变量frq=[0-1M]。
signal source即是信号源,采样率32k,正弦波。两个正弦波相乘,通过USRP的TX/RX端口发送出去(上变频到5G)。
下面则是USRP的RX2端口接收(从5G下变频),用QT GUI Time Sink(时域示波器),QTGUI Sink(综合各种显示器件的组件)来显示结果。

USRP Sink的配置界面
在这里插入图片描述
其中比较重要的参数,
Input Type:输入数据类型
Device Address:设备地址是一个分隔字符串,用于定位系统上的UHD设备。如果留空,将使用找到的第一个UHD设备。
在这里插入图片描述
Clock Rate [Hz]:定义usrp的时钟频率,一般默认。
Num Channels:选择此多USRP配置中的通道总数(输入通道数量)。例如:4个主板,每个板2个通道=总共8个通道。
Sample Rate:采样率。

在这里插入图片描述
RF OPTIONS中,
Chx Center Frequency:中心频率是RF链的总频率(即上变频的载波频率)
Chx Gain Value:当使用默认的“绝对”增益类型时,增益值介于0和USRP的最大增益之间(通常在70到90之间)。当使用“归一化”增益类型时,它将始终为0.0到1.0,其中1.0将映射到所使用的USRP的最大增益。
Chx Antenna:发射的天线
Chx Bandwidth:USRP的抗锯齿滤波器使用的带宽。要使用默认带宽筛选器设置,该值应为零。
USRP SOURCE中的配置类似,基本一样。

C++自定义模块

这一部分建议先看完GRC Boulogeorgos实例程序分析后再回过来看这个,就会清楚一些。
这里要用到gr_modtool工具来帮助创建框架,不用担心,这个一般安装了gnuradio就会带有这个。
使用指令

gr_modtool newmod test1 

创建一个名字为test1的框架,会产生如下的文件。
在这里插入图片描述
gr-mysource中有多个子目录。其中:
1)用C/C++写的程序都将放在lib文件夹中,而C/C++的头文件放在include文件夹中(如果它们是接口),或者放在lib文件夹中(如果它们只在编译时用到,在安装之后用不到,如*_impl.h文件)。
2)用python写的程序都将放在python文件夹中,包括未安装的测试单元和已安装的python模块。
3)虽然GNU Radio的模块是用C++写的,但这些模块可以在python中调用,这是通过SWIG(the simplified wrapper and interface generator)的帮助。SWIG的相关文件放在swig文件夹中。
4)如果想让自定义模块在GNU Radio图形界面(GRC)中也是可用的,就需要在grc文件夹中添加.xml描述文件。
5)在docs文件夹中包含一些说明,可以使用Doxygen和Sphinx从C++文件和python文件中提取文件的说明。
6)在apps文件夹中包含一些完整的已安装到系统的应用程序(包括在GRC中执行或单独执行的文件)。
7)examples文件夹用来保存例子,供其他开发者查看模块如何使用。
这个构建系统还带来了一些其它独立的包,比如Cmakelist.txt文件(存在于每一个子目录中)和cmake的文件夹。

然后上面创建的test1文件夹中输入指令

gr_modtool add -t general -l cpp test1_1

添加一个新的模块。建议不要C++ QAcode,可能带来未知bug。
在这里插入图片描述
然后需要修改lib文件夹中的test1_1_impl.cc,如果.cc中添加了其他的函数则需要再.h中声明。
在这里插入图片描述
图中带<>的是需要修改的,修改后的代码如下参考

namespace gr {namespace test1 {test1_1::sptrtest1_1::make( ){return gnuradio::get_initial_sptr(new test1_1_impl());}/** The private constructor*/test1_1_impl::test1_1_impl( ): gr::block("test1_1",gr::io_signature::make(<+MIN_IN+>, <+MAX_IN+>, sizeof(<+ITYPE+>)),gr::io_signature::make(<+MIN_OUT+>, <+MAX_OUT+>, sizeof(<+OTYPE+>))){}/** Our virtual destructor.*/test1_1_impl::~test1_1_impl(){}voidtest1_1_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required){/* <+forecast+> e.g. ninput_items_required[0] = noutput_items */}inttest1_1_impl::general_work (int noutput_items,gr_vector_int &ninput_items,gr_vector_const_void_star &input_items,gr_vector_void_star &output_items){const <+ITYPE+> *in = (const <+ITYPE+> *) input_items[0];<+OTYPE+> *out = (<+OTYPE+> *) output_items[0];// Do <+signal processing+>// Tell runtime system how many input items we consumed on// each input stream.consume_each (noutput_items);// Tell runtime system how many output items we produced.return noutput_items;}} /* namespace test1 */
} /* namespace gr */

写.cc文件的时候可以参考类似的官方写好的文件进行修改,就不用完全自己来写。

还有要修改python文件夹中的qa_test1.py文件,这个代码相当于测试.cc代码正确性。当然不写也是可以生成的。参考如下图在这里插入图片描述
然后返回上一级,创建一个build文件夹并进入,
1.输入指令cmake …/
2.输入指令make
3.输入指令make test
4.返回上一级,输入指令gr_modtool makexml test1 让工具自动生成XML文件,将block添加到GRC中。
5.回到build目录中更新文件库,即输入指令 make install。
就可以在grc界面右侧找到自己的组件了。

基础篇至此结束


http://chatgpt.dhexx.cn/article/0JMhBEeW.shtml

相关文章

入门学习计算机第十八天——自定义数据类型(结构体)

入门学习计算机第十八天——自定义数据类型&#xff08;结构体&#xff09; 编译器&#xff1a;Microsoft Visual Studio 2019 自定义类型&#xff1a; 结构体枚举联合体 结构体 结构体类型的声明 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量 结构的…

【计算机基础】

文章目录 线程、协程的状态 计算机网络DNS解析 计算机基础进程间通讯的7种方式讲一下程序的虚拟内存、常驻内存和逻辑内存。堆和栈是存啥的&#xff1f;什么是大小端? 什么是死锁&#xff1f;什么情况下会发生&#xff08;避免&#xff09;死锁&#xff1f;死锁产生的4个必要条…

计算机基础(1)

目录 一、计算机发展 1.1计算机发展史 1.2计算机分类 1.2.1按规模划分 1.2.2服务器与客户机 1.2.2.1 服务器按外形分类 1.3服务器硬件 一、计算机发展 1.1计算机发展史 1、第一代计算机(1946-1957) 电子管时代 冯诺依曼体系结构&#xff1a;数字计算机的数制采用二进…

计算机基础介绍

1、组成部分 中央处理器、内存、存储设备、输入/输出设备、通信设备&#xff08;各部分通过总线来连接&#xff09; 2、冯诺依曼体系结构&#xff1a;现代计算机的基础 3、中央处理器&#xff08;CPU&#xff09;——计算机的大脑 &#xff08;1&#xff09;作用&#xff1a…

C语言基础入门——自定义类型

学习目标&#xff1a; 学习并了解C语言自定义类型 目录 学习目标&#xff1a; 一、结构体 ●结构体的声明 ●结构体的引用 ●结构体的定义和初始化 ●结构体的内存对齐 ●结构体的传参 ●结构体的位段&#xff08;位段的可填充和可移植性&#xff09; 二、枚举 ●枚举的定…

1.计算机基础

目录 1.1计算机系统 1.3 计算机硬件 1.4 计算机常用计数制 1.5 数据表示 1.1计算机系统 计算机多种形式&#xff1a;电脑&#xff0c;笔记本&#xff0c;智能手机&#xff0c;服务器等&#xff1b; 两部分组成&#xff1a;硬件系统和软件系统。 1.1.1 世界上第一台计算机 世…

一、计算机基础

计算机基础 一、第 1 章 计算机基础知识1-1 计算机概述1-1-1 计算机的产生与发展&#xff08;一&#xff09;计算工具的发展&#xff08;二&#xff09;现代计算机的发展&#xff08;三&#xff09;计算机的分代&#xff08;四&#xff09;计算机新技术的发展 1-1-2 计算机的特…

计算机基础及入门

1、计算机基本概念 1.1、计算机是什么 计算机&#xff08;computer&#xff09;&#xff1a; 俗称电脑&#xff0c;是现代一种用于高速计算的电子计算机器 特点&#xff1a; 数值计算&#xff1b;逻辑计算&#xff1b;存储记忆&#xff1b;能按照程序运行、自动、高速处理处理…

计算机基础入门

说明&#xff1a;计算机包含硬件(hardware)和软件(software)两部分。 计算机分为6大硬件&#xff1a; 1.CPU 即中央处理器&#xff08;central processing unit&#xff0c;简称CPU&#xff09;作为计算机系统的运算和控制核心&#xff0c;是信息处理、程序运行的最终执行单元。…

计算机基础的介绍

计算机概念 这是一个家用计算机的硬件和软件组成&#xff1a; 计算机软件代码最基层 — 固件&#xff0c;在计算机首次启动时由处理器运行一些引导加载程序&#xff0c;比如从U盘、光盘等读取操作 系统。这些程序永久储存在计算机内存中&#xff0c;所以称作固件。嵌入式操作…

计算机基础

文章目录 一、数据结构1. 排序算法快排归并排序堆 2. 结构堆和栈区别数组与链表数据库相关的B树、B树跳表LSM树红黑树前缀树 二、Java基础0 基础问题1. 抽象类和接口的区别2. final关键字、内部类、static3. 多态4. 成员变量和局部变量5. String类、StringBuilder类6. Java集合…

计算机基础知识——基础入门(一)

目录 CPU 一、CPU是什么 二、CPU 实际做什么 三、CPU 的内部结构 CPU 是寄存器的集合体 四、CPU 指令执行过程 内存 一、什么是内存 二、内存的物理结构 内存的读写过程 内存的现实模型 三、内存的使用 指针 数组是内存的实现 栈和队列 链表 二叉树 磁盘 认…

计算机基础教程(一)

《大学计算机基础教程PDF》下载链接 链接&#xff1a;https://pan.baidu.com/s/1PGsvh1oRD1euWUedEXNl8w 密码&#xff1a;zt4x 推荐先看下面的两本&#xff1a; 计算机是怎样跑起来的 程序是怎样跑起来的 这两本百度云连接&#xff0c;CSDN审核不通过&#xff0c;可以自己…

韩漫《绿色镌像》又名《绿色镌刻》

雕塑专业的学生马修在第一眼遇到陈时感受到了命运&#xff0c;而陈青宇看透了充满肮脏金钱和背叛的冷酷世界&#xff0c;他不断忍受着心中的疼痛&#xff0c;直到与马修相见&#xff0c;他开始展露自己的欲望...隐藏着不同欲望的两个男人的故事自此开幕——

推荐几个免费看漫画的资源网站,请低调收藏

1、木马动漫 https://omyschool.com/ 2、第6夜漫画 http://www.d6ye.com/ 3、土豪漫画 https://www.tohomh123.com/ 4、动漫屋 http://www.dm5.com/ 5、漫画柜 https://www.manhuagui.com/

电子漫画 - 轻轻松松

▲ 有的器件的功能只有在它损坏的时候才能够体现 1970,5 《大众电子》 ▲ 欧姆定律漫画 ▲ 另外一个欧姆定律漫画 ▲ LED应用时总是需要串联一个限流电阻 LED&#xff1a;你使我闪亮&#xff0c;否则我会灭亡 电阻&#xff1a;你是那么漂亮&#xff0c;直戳我的新房

有哪些漫画在线观看?最好是好看的完结漫画

在线漫画就是指把原有的漫画书籍以图片加文字的形式绘画出来&#xff0c;再连载于各大漫画网站或者漫画软件上&#xff0c;漫画在线观看&#xff0c;不用下载。而现在好看的漫画太多了&#xff0c;有些漫画是新番&#xff0c;有些漫画是完结作品。机智的我&#xff0c;当然是要…

【破解软件】知音漫客免费看更多漫画

历史文章推荐&#xff1a; 1、漫客栈破解版 2、漫画岛破解版 3、漫画台破解版 4、二次元漫画破解版 【软件名称】: 知音漫客&#xff08;免费版&#xff09; 【软件版本】: v_4.9.5 【软件大小】: 23.25MB 【支持系统】: 安卓系统 【亲测演示】: 软件无需登录包含更多漫画…

没有好看的百合漫画,纯纯的校园爱情漫画也不错

百合漫画一般都是指女孩与女孩之间的爱情故事&#xff0c;有很多漫迷小伙伴喜欢看这一类好看的百合漫画。现在动漫为了迎合读者的口味&#xff0c;越来越多的动漫作品中也加入了百合情节。不过呢&#xff0c;没有找到好看的百合漫画的同学&#xff0c;其实纯纯的校园爱情漫画也…

专属EE的精美电子漫画

关注、星标公众号&#xff0c;精彩内容每日送达 来源&#xff1a;网络素材 ▲ 图1 硬盘表面的指纹 ▲ 图2 电路中的维修人员 ▲ 图3 电路中的拆卸工人 ▲ 图4 电路进行局部维修 ▲ 图5 电路环境下的钻探工 ▲ 图6 磁盘表面的施工人员 ▲ 图7 搬运电阻 ▲ 图8 这个电容与有问题 …