从零开始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::sptr test1_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() { } void test1_1_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required) { /* <+forecast+> e.g. ninput_items_required[0] = noutput_items */ } int test1_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界面右侧找到自己的组件了。
基础篇至此结束
今天的文章
gnuradio模块详细介绍_英语如何自学从零开始分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/80195.html