logo资料库

GNURadio入门教程.pdf

第1页 / 共58页
第2页 / 共58页
第3页 / 共58页
第4页 / 共58页
第5页 / 共58页
第6页 / 共58页
第7页 / 共58页
第8页 / 共58页
资料共58页,剩余部分请下载后查看
GNU radio 和 USRP 入门手册 同济大学电子科学与技术系 信道研究组 张文杰 余基伟 贺永宇 2012 年 6 月 7 日 1
目录 前言................................................................................................................................ 1 1 GNU radio 及 USRP 简介....................................................................................... 1 1.1 软件无线电的基本思想 ............................................................................................... 2 GNU radio 的软件架构 ............................................................................................... 4 1.2 Gnu radio 的硬件架构 ............................................................................................... 5 1.3 1.4 USRP 上 FPGA 的工作原理 ........................................................................................... 6 Microblaze 固件编译方法 ......................................................................................... 7 1.5 Linux 环境中 USRP FPGA 代码编译 ......................................................................... 10 1.6 FPGA 代码的编译 .......................................................................................... 10 FPGA 代码各模块功能 .................................................................................. 12 2 GNU radio 的配置方法 ........................................................................................ 13 Linux 操作系统的安装 .............................................................................................. 13 GNU radio 的配置方法 .............................................................................................. 14 GNU radio 配置图文教程 ......................................................................................... 16 No-fetching 模式 ............................................................................................ 16 Fetching 模式 ................................................................................................. 25 3 GNU radio 的使用 ................................................................................................ 29 GRC 使用举例 ............................................................................................................. 29 3.1.1 初识 GRC ............................................................................................................. 29 3.1.2 信号源的调节 ..................................................................................................... 38 3.1.3 AM 信号接收解调 ............................................................................................ 41 3.1.4 使用复信号与接收 SSB ........................................................................................ 48 GNU radio 增加新的模块 ........................................................................................... 53 4 如何编写 Python 应用程序 ................................................................................ 55 5 关于 GNU radio 一些有用的网站及资料 ............................................................ 56 2.1 2.2 2.3 2.3.1 2.3.2 1.6.1 1.6.2 3.1 3.2 2
前言 从 2012 年初接触 GNU radio 至今已经有四五个月了,在这期间,通过不断 的搜集资料,查阅文献,安装调试,数据测试,我对于软件无线电已经有了一个 初步的了解。但是软件无线电的资料在网络上犹如汗牛充栋,纷繁复杂,没有一 个比较完整的、全面的介绍该项目的参考文献,再加之大部分资料都是英文的, 对于国内的初学者来说难度甚大。 因此,我打算根据我们实验室已有的一些经 验,写一个参考或者叫索引的文档来指引初学者,以便使他们能够快速掌握 GNU radio, 软件无线电外设(USRP)的安装调试及其初步应用,为以后的学习科研 奠定良好的基础。 1 GNU radio 及 USRP 简介 GNU Radio 是一个通过最小程度地结合硬件(主要是 USRP),用软件来定义 无线电波发射和接收的方式,搭建无线电通信系统的开源软件系统。也就是说, 现在那些高性能的无线电设备中所遇到的数字调制问题将变成软件问题。我们都 知道 GNU 这个非常成功的自由软件项目,它包括 Linux 这样的操作系统软件, 也包括大批应用软件。但 GNU 在涉及硬件开源尤其是无线射频方面还是存在着 很大的盲区。 Gnu Radio 通过提供一套信号处理软件模块和相关联硬件(自由 的软件,价格合理便宜的硬件)给大众,以图填充这个空白。GNU Radio 应用程 序用 Python 语言来编写,真实的信息处理过程是由 C++浮点扩展库来实现的。 因此开发者可以获得实时高效的可复用的应用开发环境。虽然 GNU Radio 并不 是主要用于仿真,但也可以不用真实硬件,而使用预先记录或生成的数据来开发 信号处理算法。让我们来给几个简单的例子,看看 GNU Radio 可以用来做什么:  学生和研究人员用它来开发物理层信号处理算法,MAC 层甚至更上层的协 议。因为所有的通信协议,从上至下都是PC 机上的软件代码。你可以像使 用普通软件一样快速自如的修改、编译和运行,可以灵活地在多个协议层之 间互操作。当你撰写学术论文的时候,这些真实的实验结果常常能够为你的 论文增色不少。  创业型小公司或者学校里做横向开发项目的人,他们通常用它来开发原  型设备(prototype)。比如做一个支持多种制式的家庭网关,因为所有 1
 的东西都是“软”的,所以开发起来非常快,出现问题的时候也容易修改。  用来做高校里的教学用实验平台。比如做通信原理实验,现在大部分实验都 是用Matlab 仿真来做的,当有了GNU Radio,你就可以看到真正的信号星座 图,频率漂移等现象。而且它可以是一个远程的平台,供很多学生同时使用。  业余无线电爱好者,他们用GNU Radio 来搭建自己的电台。我猜想,它可以 让你同时在多个频道上呼叫。不过我不知道这是否违反无线电使用规定。  黑客!这是用户中很大的一个群体。特别是OpenBTS,也就是GNURadio 上的 GSM 基站开发出来之后,加上GSM 加密的破解算法,这吸引了很多对GSM 网 络感兴趣的人。当然,相反的,反黑客的人,我们的无线电监控部门,军方 的实验室,也对此很有兴趣。 GNU Radio 还可以做什么呢?发挥你的想象力吧。 本章将简单从软件无线电的基本概念开始,介绍 GNU Radio 的各个部分。 (以上部分参考 GNU Radio 入门 v0.99) 1.1 软件无线电的基本思想 软件无线电是指能够实现充分可编程通信,对信息进行有效控制,覆盖多个 频段,支持大量波形和应用软件的通信设备。其含义是系统功能由软件定义,其 物理层行为也能由于软件的改变而改变. 软件无线电是将模块化、标准化的硬件单元以标准开放的形式连接起来,形 成一个通用硬件平台,通过软件加载来实现各种无线通信功能的开放式无线通信 设备,并把尽可能多的无线通信及个人通信功能用软件实现。这样无线通信新系 统、新产品、新业务的开发将逐步转到软件上来,而无线通信的产品价值将越来 越多地体现在软件上。 2
图 1.1 典型的软件无线电处理流程 上图表示一个典型的软件无线电处理流程图。为了理解无线电的软件模块, 首先需要理解和其关联的硬件。在这个图中的接收路径上,能够看到一个天线, 一个神奇的 RF 前端,一个模拟数字转换器 ADC 和一堆代码。ADC 是一个连接连 续模拟的自然世界和离散的数字世界的桥梁。图 1.2 是同济大学电信学院电子 科学与技术系无线信道研究实验室所使用的 USRP N210 母版及 SBX 子板。 图 1.2 USRP N210 母版和 SBX 子板 以图 1.1 中接收路径为例 ,图 1.2 中的子板 SBX 即为射频前端(最高频率 可知 4.4GHz),完成射频信号的模拟下变频到模拟中频,然后由母版上的 12 位 ADC 芯片完成模数转换,之后送入 FPGA 完成数字下变频至基带信号,最后通过 3
网线传输至 PC 进行数据的分析处理。由于 FPGA 的可重构性,大部分的信号处理 的工作都可以由用户编程完成信号的处理,使得无线通信系统的设计得以简化和 降低成本。同时,GNU radio 为开源项目 GNU 的正式项目之一,全世界很多的 开发者都为其贡献自己的代码及成果,比较成功的有 OpenBTS,利用 GNU radio 及 USRP 建立 GSM 通信基站,实现 GSM 通信。该项目在同济大学无线信道研究实 验室已经成功实现,最大通话距离可达 15 米。 1.2 GNU radio 的软件架构 GNU Radio 的编程基于 Python 脚本语言和 C++的混合方式。Python 用来构 造流图。C++由于具有较高的执行效率,被用于编写各种信号处理模块,如:滤 波器、FFT 变换、调制/解调器、信道编译码模块等,GNU Radio 中称这种模块 为 block。Python 是一种新型的脚本语言,具有无须编译、语法简单以及完全 面向对象的特点,因此被用来编写连接各个 block 成为完整的信号处理流程的 脚本,GNU Radio 中称其为 graph。 GNU Radio 的软件结构顶层是面向用户的 block 及其“粘合剂”——graph。 用户除了能够开发自己的 block 之外,还可使用 GNU Radio 所包含的丰富的 block,包括各种滤波器、FFT 变换、调制/解调模块、时频同步模块等等,其 中一些利用了 CPU 的增强指令集(如:MMX、SSE、3D Now!)进行了优化,以提高 性能。 在用户用 block 和 graph 构造的应用程序下面是 GNU Radio 的运行支持环 境,主要包括缓存管理、线程调度以及硬件驱动。GNU Radio 中巧妙地设计了一 套零拷贝循环缓存机制,保证数据在 block 之间高效的流动。多线程调度主要 用于对信号处理流程进行控制以及各种图形显示,GNU Radio 对此也提供了支 持。GNU Radio 的硬件驱动包括 USRP、AD 卡、声卡等等,用户也可根据需求进 行扩充。 GNU Radio 应用程序的图形化接口是使用 python 来实现的,接口能使用 python 的任何 toolkit 来实现,我们推荐使用 wxPython,它能最大化的实现跨 平台应用。GNU Radio 提供由 C++到 Python 的连接机制。 GNU Radio 提供一个信号处理模块的库,并且有个机制可以把单个的处理模 块连接在一起形成一个系统。编程者通过建立一个流向图(flow graph)就能搭 4
建成一个无线电系统。信号处理模块是使用 C++来实现的, GNU Radio 提供了 超过 100 个信号处理块,并且扩展新的处理模块也是非常容易的。软件图形化 接口和信号处理模块的链接机制是通过 python 脚本语言来进行的。因此,熟练 使用 PYTHON 对于 GNU radio 的开发来说无疑使锦上添花。 关于如何使用 PYTHON 对信号流程(flow graph)进行灵活控制:暂停,自 动 启 动 等 , 可 以 在 以 下 链 接 找 到 相 关 的 指 导 说 明 。 http://gnuradio.org/redmine/projects/gnuradio/wiki/Tutorial sWritePythonApplications 1.3 Gnu radio 的硬件架构 GNU Radio 是硬件独立的。也就是说除了我们熟悉的 USRP 以外,还有其他 一些硬件可以用 GNU Radio:比如说一种 cable modem tuner(型号 mc4020,用 来接收 FM 广播);另外还有一些业余无线电设备也用 GNU Radio。 USRP(Universal Software Radio Peripheral)——通用软件无线电外设, 由 Ettus 等人设计,网站:http://www.ettus.com/ 。完整的 USRP 一般有母板 与用户所需功能相对应的子板组成,如图 1.2 的 USRP N210 母板和子板 SBX。其 工作原理如图 1.3 所示,如下  用于通信系统中的数字基带和中频部分;  使信号在基带或中频和射频之间作转换;  所有的和波形相关的操作,比如调制解调都在CPU上执行;  所有的具有普遍性的高速处理如数字上下变频,插值与降采样等都在FPGA中实现; 图 1.3 USRP 硬件工作原理 5
以 USRP N210 为例讲解 USRP 硬件构成及特性:  两个 100 MS/s 的14 位模数转换器  两个 400 MS/s 的16 位数模转换器  可编程控制抽样率的数字下变频器  可编程控制插值率的数字上变频器  千兆以太网接口  2 Gbps 的高速串行接口用于扩展  能处理的信号带宽高达100 MHz  模块化的架构,可以支持更多的射频子板  附属的模拟和数字I/O 支持复杂的无线电控制,例如RSSI 和AGC  多达 8 天线的全相关多信道系统(支持MIMO)  1 兆字节的板载高速SRAM USRP 之所以具有很强的灵活性,主要是取决于 FPGA 的可编程特性。因此有 必要对 USRP 上 FPGA 工作原理作一阐述。 1.4 USRP 上 FPGA 的工作原理 数字中频——FPGA 的职责: 简单的说,USRP 上的 FPGA 的职责就是做上下变频,在数字中频和基带信 号之间进行转换。 FPGA 像一个小的、高性能的并行计算机一样,可以完成你设计的任务,设 计 FPGA 需要一些技能,并且如果不慎还会烧坏你的板子。还好我们已经提供一 个标准的适应性很广的 FPGA 配置。 USRP N210 上 FPGA 的型号为:Xilinx Spartan 3A DSP XC3SD3400A FPGA, 以下是 N210 上 FPGA 的资源使用情况:  通用逻辑阵列: 63% 剩余  存储空间: 66% 剩余  DSP资源: 88% 剩余 (其余型号的USRP 系列的硬件资源可查询参考文献 hardware of USRP series) 由此可见,USRP N210 上 FPGA 的剩余资源可以为用户提供了更加灵活的控 制方式。用户可以利用剩余的 FPGA 资源自定义一些新的功能给 USRP 让其完成一 些用户希望的新的功能。比如,可以利用 FPGA 中的 32 位 RISC 处理器 Microblaze 控制 USRP 摆脱对 PC 上 CPU 的依赖,从而使 USRP 可以完全独立的运行用户的设 6
分享到:
收藏