您的位置首页>企业动态>

如何在Linux下搭建GNU Radio平台及它的应用分析

导读 大家好,我是极客范的本期栏目编辑小友,现在为大家讲解如何在Linux下搭建GNU Radio平台及它的应用分析问题。GNU Radio是一个开源的软

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解如何在Linux下搭建GNU Radio平台及它的应用分析问题。

GNU Radio是一个开源的软件无线电开发平台,可以通过c、Python等图形界面或文本语言快速开发软件无线电应用。本文介绍了Linux下GNU Radio平台的建立以及如何在该平台下使用nusrp设备。

1.概念描述

USRP设备需要同版本的固件镜像和FPGA镜像才能正常工作,与上位机使用的是哪个环境无关:Windows还是Linux,也就是在Windows LabVIEW和Linux GNU Radio下可以使用同一套固件和镜像,无需更换。

图1两组环境的比较。

在Windows系统下操作时,可以通过NI-USRP配置实用程序软件编写/更新固件和FPGA镜像,如图2所示。这样,USRP设备可以通过NI-USRP驱动器与主机进行通信。

图2 ni-usrp配置实用程序n2xx/ni-29xx映像更新程序。

在Linux GNU电台下,UHD驱动取代了NI-USRP驱动。您可以通过运行uhd_images_downloader将图像从互联网下载到本地,uhd_image_loader会更新图像,这将在后面详细描述。

2.环境建设。

2.1安装Ubuntu系统。

我们常用的电脑都是Windows系统。在计算机上运行Linux有两种方法。第一种方法是安装双系统,第二种方法是在虚拟机中安装虚拟机和Linux。因为第二种方法不需要额外的分区、BIOS更改等操作,而且操作不当也不会导致Windows崩溃,所以选择了第二种方法。

这里使用的是通用虚拟机软件VMware Workstation。Ubuntu 16.04可以从以下链接下载:Ubuntu在https://www.ubuntu.com/download/desktop是一个常用的Linux发行版。下载的文件是图像。Ubuntu系统的iso文件。选择文件在VMware中新建虚拟机,并根据提示逐步单击下一步。配置虚拟机硬件时,CPU数量和CPU核心数量与实际CPU一致,内存可以设置得稍大一些。我设置了8G内存(共16G物理内存)和40G硬盘(安装了Ubuntu系统和GNU Radio的所有相关软件后实际使用了8.1G)。

启动虚拟机,只需按照第一次启动向导配置好Ubuntu,进入桌面后点击左上角的图标,搜索终端,就是命令行工具,如图3所示。

图3查找Ubuntu命令行工具。

打开命令行工具并输入。

进入Sudo passwd。

设置上级用户的密码,即根密码。在用户设置密码之前,Ubuntu每次打开都会生成一个随机的根密码。注意输入密码时不会显示“* * * * * *”,但不会显示任何字符,这和我们一般的认知大相径庭!

系统提示再次输入密码,第二次输入并确认密码。两次一致后,密码设置成功。输入下一步。

Sudo apt-get更新输入。

更新源,系统将提示您输入管理员密码。输入刚刚设置的管理员密码后,点击输入。然后输入(或者复制粘贴,不要使用Ctrl C V的快捷键,而是右键在命令行窗口中选择粘贴)。

sudo apt-get -y安装git swig cmake DOX gen build-essential libboost-all-dev libtool lib USB-1.0-0 lib USB-1.0-0-dev libudev-dev libncurses 5-dev libff tw3-bin libfftw 3-dev libfftw 3-doc libcppunit-1.13-0 V5 libcppunit-dev libcppunit-doc ncurses-bin cpufrequtils python-numpy-numpy-doc python-numpy-numpy

swig g++ automake autoconf libtool python-dev libfftw3-dev libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77 libsdl1.2-dev python-wxgtk3.0 git-core libqt4-dev python-numpy ccache python-opengl libgsl-dev python-cheetah python-mako python-lxml doxygen qt4-default qt4-dev-tools libusb-1.0-0-dev libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools python-qwt5-qt4 cmake git-core wget libxi-dev gtk2-engines-pixbuf r-base-dev python-tk liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libzmq-dev libzmq1 python-requests python-sphinx libcomedi-dev python-zmq回车

大约会下载1个多G的依赖库和软件。等待其下载完成后,下载编译安装UHD驱动。

2.2 安装UHD驱动

UHD驱动是以源码形式提供的。在命令行中输入

git clone https://github.com/EttusResearch/uhd回车

会将uhd源码拷贝到HOME路径下,转到该路径并新建build目录

cd uhd回车

cd host回车

mkdir build回车

cd build回车

输入

cmake 。./回车

产生Makefile,输入

make回车

编译源码,大约需要10-30min时间,可以通过开启多线程编译可大大缩短编译时间,用make -j4 代替make即可,就会启用4个线程同时编译,但也不是越多越好,一般和计算机CPU线程数或虚拟机CPU线程数一致即可。如编译中途死机(虚拟机可能会出现、由于内存不足),重新来过时会接着之前的编译进度继续。之后安装编译成功的库,输入

make test回车

sudo make install回车

更新共享库和环境变量

sudo ldconfig回车

export LD_LIBRARY_PATH=/usr/local/lib回车

此时UHD驱动已经安装完毕,可通过输入

uhd_find_devices回车

查看驱动的版本,若在同一子网中已有USRP设备,可看到USRP设备的信息,如图4

图4 验证UHD安装情况

一个小技巧:在输入上条命令时输入uhd_fin之后按Tab键看看会发生什么……自动填充!对于输一些比较长的命令时可以通过自动填充功能降低拼写错误,省时省力。

在找到设备的情况下,可运行以下程序查看CDMA移动电话的上行频谱

uhd_fft -a addr=10.144.97.123 -f 835M -s 10M回车

图5 UHD FFT测试程序

注意,若USRP中的镜像和UHD版本不匹配的话,无法直接运行上述测试程序,可以通过更新firmware image 和 FPGA image使之匹配。更新方法见第3节。

2.3 安装GNU Radio

安装GNU Radio与安装UHD驱动的步骤类似。

首先回到home路径

cd $HOME回车

之后下载GNU Radio源码

git clone --recursive https://github.com/gnuradio/gnuradio回车

下载完成后新建build目录

cd gnuradio回车

mkdir build回车

cd build回车

生成Makefile并编译安装

cmake 。./ 回车

make回车

make test回车

sudo make install回车

sudo ldconfig回车

完成后,可以测试安装是否正确,输入

gnuradio-companion回车

GNU Radio 开发环境应当可以正确打开。至此,环境搭建完成[3] 。

3. 运行一个GNU Radio程序

3.1 修改USRP IP地址并连接

这里使用的是USRP-2922,USRP设备使用固定IP,默认IP是192.168.10.2 。首先将USRP设备通过网线直连至PC,设置PC的ip为192.168.10.1,子网掩码255.255.255.0,在Windows下可通过NI-USRP Configuration Utility软件修改USRP设备的IP。在本次验证中,使用了超过1台的USRP,需要通过交换机和上位机通信,在处于同一个子网的PC上查看PC的IP地址:windows徽标键+R -》 输入cmd回车 -》 输入ipconfig回车,找到自己的本地网卡的IPv4地址,如10.144.97.17,将两台USRP的IP设置到同一个子网下,如10.144.97.123和10.144.97.124 。

在Linux下可通过以下方法修改设备IP [4] ,cd 到/usr/local/lib/uhd/utils目录下,运行

sudo 。/usrp2_recovery.py --ifc=eth0 --new-ip=10.144.97.123回车

以上方法需要防火墙允许UDP广播。需要注意的是,在虚拟机中运行Linux的话,需要将虚拟机的网卡配置为直连或者与主机共用IP。

图6 虚拟机网卡配置

设置IP后,可以ping一下USRP,命令行输入:

ping 10.144.97.123回车

此时应当看到ping通的信息,按Ctrl + Z可以退出ping的状态。

3.2 更新firmware image和FPGA image

如开篇所述,这两个镜像在Windows和Linux下是通用的,只要版本和驱动版本一致即可。NI-USRP 15.5提供的镜像和UHD 3.11.0提供的镜像是一致的。如果你的USRP在Windows下更新过镜像,可以跳过这一步。

在Ubuntu命令行中输入:

sudo uhd_images_downloader回车

这样可以自动地将网络上合适的镜像下载到本地计算机中。

再输入

uhd_image_loader --args=“type=usrp2,addr=,reset”回车

将镜像下载到USRP设备中并重启设备,这里的镜像是自动选择版本的。

3.3在GNU Radio中编程

首先,在命令行中输入

gnuradio-companion回车

运行GNU Radio开发环境,该环境也是使用图形化模块编程的,详细使用教程可以在网络上搜索。这里可以编写一个程序,在两台USRP-2922之间传文件。使用随机自带的天线,工作在915M ISM频段上。也可通过衰减器将两个USRP的TX/RX接口直连。注意:使用USRP发射无线电信号需遵守当地相关法律法规。

图7 一个GRC程序

图8 程序运行界面

图9 程序运行结果

责任编辑:gt

GNU Radio是一个开源的软件无线电开发平台,可以通过图形化界面或C++++、Python等文本语言快速开发软件无线电应用,本文介绍了Linux下GNU Radio平台的搭建及如何在该平台下使用NI USRP设备。

1. 概念性描述

USRP设备需要固件(firmware image)和FPGA镜像(FPGA image)且版本一致才能正常工作,此二者与上位机使用何种环境:Windows还是Linux无关,即:同一套固件和镜像不需要更换可在Windows LabVIEW及Linux GNU Radio下使用。

图1 两套环境对比

在Windows系统下操作时,可通过NI-USRP Configuration Utility 软件进行固件与FPGA镜像的写入/更新,如图2 。这样,USRP设备就能通过NI-USRP驱动与上位机通信。

图2 NI-USRP Configuration Utility – N2xx/NI-29xx Image Updater

而在Linux GNU Radio下,UHD驱动代替了NI-USRP驱动的工作 。可以通过运行 uhd_images_downloader 从网上下载镜像到本地,uhd_image_loader 更新镜像,之后会详细描述。

2. 环境搭建

2.1 安装Ubuntu系统

我们常用的电脑都是Windows系统的,有两种方法在电脑上运行Linux。第一种方法是安装双系统,第二种方法是安装虚拟机并在虚拟机中安装Linux,由于方法二不需要额外分区、更改BIOS等操作、在操作不当时也不会导致Windows的崩溃,因此选用方法二。

这里使用了常见的虚拟机软件 VMware Workstation。在以下链接中可以下载Ubuntu 16.04:https://www.ubuntu.com/download/desktop Ubuntu是一个Linux常用的发行版。下载到的文件是Ubuntu系统的镜像.iso文件,在VMware中选择File – New Virtual Machine 按照提示一步步点击下一步即可,在配置虚拟机硬件时,CPU数及CPU核心数与实际CPU一致即可,内存可设的稍大一些,我设置了8G内存(共16G物理内存),硬盘设置40G(装完Ubuntu系统、安装完GNU Radio的所有依赖软件后实际使用了8.1G)。

启动虚拟机,按照第一次启动向导简单配置Ubuntu,进入桌面后点击左上角的图标,搜索terminal即命令行工具,如图3 。

图3 找到Ubuntu的命令行工具

打开命令行工具,输入

sudo passwd回车

设置管理员(Supper User)密码即root密码,在用户设置密码之前,Ubuntu每次开机会产生一个随机的root密码。注意,输密码时不会显示“****”,而是什么字符也不显示,这一点和我们一般的认知很不一样!

系统提示再次输入密码,第二次输入密码并确认、两次一致后密码设置成功。接下来输入

sudo apt-get update回车

更新源,会提示输入管理员密码,输入刚才设置的管理员密码后点回车。之后输入(或复制粘贴,请勿使用Ctrl C + V的快捷键,而是鼠标右键在命令行窗口中单击 – 选择paste)

sudo apt-get -y install git swig cmake doxygen build-essential libboost-all-dev libtool libusb-1.0-0 libusb-1.0-0-dev libudev-dev libncurses5-dev libfftw3-bin libfftw3-dev libfftw3-doc libcppunit-1.13-0v5 libcppunit-dev libcppunit-doc ncurses-bin cpufrequtils python-numpy python-numpy-doc python-numpy-dbg python-scipy python-docutils qt4-bin-dbg qt4-default qt4-doc libqt4-dev libqt4-dev-bin python-qt4 python-qt4-dbg python-qt4-dev python-qt4-doc python-qt4-doc libqwt6abi1 libfftw3-bin libfftw3-dev libfftw3-doc ncurses-bin libncurses5 libncurses5-dev libncurses5-dbg libfontconfig1-dev libxrender-dev libpulse-dev swig g++ automake autoconf libtool python-dev libfftw3-dev libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77 libsdl1.2-dev python-wxgtk3.0 git-core libqt4-dev python-numpy ccache python-opengl libgsl-dev python-cheetah python-mako python-lxml doxygen qt4-default qt4-dev-tools libusb-1.0-0-dev libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools python-qwt5-qt4 cmake git-core wget libxi-dev gtk2-engines-pixbuf r-base-dev python-tk liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libzmq-dev libzmq1 python-requests python-sphinx libcomedi-dev python-zmq回车

大约会下载1个多G的依赖库和软件。等待其下载完成后,下载编译安装UHD驱动。

2.2 安装UHD驱动

UHD驱动是以源码形式提供的。在命令行中输入

git clone https://github.com/EttusResearch/uhd回车

会将uhd源码拷贝到HOME路径下,转到该路径并新建build目录

cd uhd回车

cd host回车

mkdir build回车

cd build回车

输入

cmake 。./回车

产生Makefile,输入

make回车

编译源码,大约需要10-30min时间,可以通过开启多线程编译可大大缩短编译时间,用make -j4 代替make即可,就会启用4个线程同时编译,但也不是越多越好,一般和计算机CPU线程数或虚拟机CPU线程数一致即可。如编译中途死机(虚拟机可能会出现、由于内存不足),重新来过时会接着之前的编译进度继续。之后安装编译成功的库,输入

make test回车

sudo make install回车

更新共享库和环境变量

sudo ldconfig回车

export LD_LIBRARY_PATH=/usr/local/lib回车

此时UHD驱动已经安装完毕,可通过输入

uhd_find_devices回车

查看驱动的版本,若在同一子网中已有USRP设备,可看到USRP设备的信息,如图4

图4 验证UHD安装情况

一个小技巧:在输入上条命令时输入uhd_fin之后按Tab键看看会发生什么……自动填充!对于输一些比较长的命令时可以通过自动填充功能降低拼写错误,省时省力。

在找到设备的情况下,可运行以下程序查看CDMA移动电话的上行频谱

uhd_fft -a addr=10.144.97.123 -f 835M -s 10M回车

图5 UHD FFT测试程序

注意,若USRP中的镜像和UHD版本不匹配的话,无法直接运行上述测试程序,可以通过更新firmware image 和 FPGA image使之匹配。更新方法见第3节。

2.3 安装GNU Radio

安装GNU Radio与安装UHD驱动的步骤类似。

首先回到home路径

cd $HOME回车

之后下载GNU Radio源码

git clone --recursive https://github.com/gnuradio/gnuradio回车

下载完成后新建build目录

cd gnuradio回车

mkdir build回车

cd build回车

生成Makefile并编译安装

cmake 。./ 回车

make回车

make test回车

sudo make install回车

sudo ldconfig回车

完成后,可以测试安装是否正确,输入

gnuradio-companion回车

GNU Radio 开发环境应当可以正确打开。至此,环境搭建完成[3] 。

3. 运行一个GNU Radio程序

3.1 修改USRP IP地址并连接

这里使用的是USRP-2922,USRP设备使用固定IP,默认IP是192.168.10.2 。首先将USRP设备通过网线直连至PC,设置PC的ip为192.168.10.1,子网掩码255.255.255.0,在Windows下可通过NI-USRP Configuration Utility软件修改USRP设备的IP。在本次验证中,使用了超过1台的USRP,需要通过交换机和上位机通信,在处于同一个子网的PC上查看PC的IP地址:windows徽标键+R -》 输入cmd回车 -》 输入ipconfig回车,找到自己的本地网卡的IPv4地址,如10.144.97.17,将两台USRP的IP设置到同一个子网下,如10.144.97.123和10.144.97.124 。

在Linux下可通过以下方法修改设备IP [4] ,cd 到/usr/local/lib/uhd/utils目录下,运行

sudo 。/usrp2_recovery.py --ifc=eth0 --new-ip=10.144.97.123回车

以上方法需要防火墙允许UDP广播。需要注意的是,在虚拟机中运行Linux的话,需要将虚拟机的网卡配置为直连或者与主机共用IP。

图6 虚拟机网卡配置

设置IP后,可以ping一下USRP,命令行输入:

ping 10.144.97.123回车

此时应当看到ping通的信息,按Ctrl + Z可以退出ping的状态。

3.2 更新firmware image和FPGA image

如开篇所述,这两个镜像在Windows和Linux下是通用的,只要版本和驱动版本一致即可。NI-USRP 15.5提供的镜像和UHD 3.11.0提供的镜像是一致的。如果你的USRP在Windows下更新过镜像,可以跳过这一步。

在Ubuntu命令行中输入:

sudo uhd_images_downloader回车

这样可以自动地将网络上合适的镜像下载到本地计算机中。

再输入

uhd_image_loader --args=“type=usrp2,addr=,reset”回车

将镜像下载到USRP设备中并重启设备,这里的镜像是自动选择版本的。

3.3在GNU Radio中编程

首先,在命令行中输入

gnuradio-companion回车

运行GNU Radio开发环境,该环境也是使用图形化模块编程的,详细使用教程可以在网络上搜索。这里可以编写一个程序,在两台USRP-2922之间传文件。使用随机自带的天线,工作在915M ISM频段上。也可通过衰减器将两个USRP的TX/RX接口直连。注意:使用USRP发射无线电信号需遵守当地相关法律法规。

图7 一个GRC程序

图8 程序运行界面

图9 程序运行结果

责任编辑:gt

.dfma { position: relative; width: 1000px; margin: 0 auto; } .dfma a::after { position: absolute; left: 0; bottom: 0; width: 30px; line-height: 1.4; text-align: center; background-color: rgba(0, 0, 0, .5); color: #fff; font-size: 12px; content:"广告"; } .dfma img { display: block; }
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。