基于GNU Radio和USRP的认知无线电平台研究

2013-11-08 来源:微波射频网 字号:

能和计算机硬件实现等多方面的内容,提出的认知模型也能较好地反映认知无线电的概念和内涵。

2.4 本章小结

结合无线电平台的发展背景介绍软件无线电和认知无线电等方面背景理论知识。介绍了基于软件无线电的认知无线电平台的基本结构和原理。

第三章 基于 GNU Radio 和 USRP 的认知无线电平台

3.1 选择 GNU Radio 和 USRP 作为实验平台的原因
广义上的软件无线电分为三类:

(1)将多种不同制式的设备集成在一起,例如 GSM-CDMA 双模手机。这方式只能在预置的几种制式下切换,要增加对新的制式的支持则意味着集成更多的电路,重配置能力十分有限。
(2)基于现场可编程门阵列(FPGA)和数字信号处理器(DSP),这类可编程硬件,重配置的能力得到了很大提高。但是用于 FPGA 的 VERILOG、VHDL 等语言以及DSP 的汇编语言都是针对特定厂商的产品,使得这种方式下的软件过分依赖于具体的硬件,可移植性较差。此外,对广大技术人员来说, FPGA 和 DSP 开发的门槛依然较高,开发过程也相对比较繁琐。
(3)第三类软件无线电设备采用通用硬件(例如:商用服务器、普通 PC 以及嵌入式系统)作为信号处理软件的平台,具有以下几方面的优势: 纯软件的信号处理具有很大的灵活性; 可采用通用的高级语言(如 C/C++)进行软件开发,扩展性和可移植性强,开发周期短;基于通用硬件的平台,成本较低,并可享受计算机技术进步带来的各种优势[13]。

GNURadio 是一个开源的可以构建软件无线电平台的软件包。它是由 Eric Blossom发起的、完全开放的软件无线电项目,旨在鼓励全球技术人员在这一领域协作与创新,目前已经具有一定的影响力。GNU Radio 主要基于 Linux 操作系统, 也可以移植到其他操作系统上, 采用 C++结合 Python 脚本语言进行编程,其代码完全开放[18]。

USRP,即 Universal Software RadioPeripheral 通用软件无线电平台,是 Matt Ettus的杰作,它是一个开源的低价格的专门为 GNU Radio 设计的硬件平台。USRP 是一个非常灵活的 USB 设备,它把 PC 连接到 RF 世界,可以在 0-5.9G 载频上实现最高 16M 的带宽信号收发。[19]

基于 GNU Radio 和 USRP 的软件无线电平台正是属于第三类的软件无线电系统,它除了具有第三类软件无线电系统的优点外,还具有如下优势:

(1)成本较低。软件免费,USRP 的价格为 700 美元,相当于一台 PC 的价格;带宽可满足目前多数音视频广播和无线通信制式的要求, 支持双工和多天线应用。

(2)技术门槛较低, 具有一定编程经验和 Linux 使用经验的用户可在较短时间内掌握其配置、使用和开发。

(3)开源软件,获得来自全世界众多 GNU RADIO 拥护者以及 Eric Blossom 和Matt Ettu(分别是 GNU RADIO 和 USRP 的发明者)本人的技术支持[12]。

GNU Radios 和USRP 的功能是将信息和无线射频信号互相转化,其过程以及各部分功能如图 3-1,信息流图。

3.2 GNU Radio 软件无线电介绍

3.2.1 GNU Radio 概述

在当今无线电领域中,由 Eric Blossom 发起的、完全开放的软件无线电项目 GNURadio 倍受关注。GNU Radio 是一个开源、免费的可以构建软件无线电平台的软件包。这是一种能运行于普通 PC 上的开放的软件无线电平台,其软件代码完全公开。它具备智能处理信号、拥有可重配置无线电硬件设备的特点。基于该平台,用户能够以软件编程的方式灵活地构建各种无线应用,进而很好地实现认知无线电的认知任务[13]。

GNURadio 旨在鼓励全球技术人员在这一领域协作与创新,目前已经具有一定的影响力。GNU Radio 可以被理解为开源软件的自由精神在无线领域的延伸,开放性和低成本是其最大的特点。低成本使得技术人员以及资金不那么充裕的机构可以像购买 PC 机一样拥有一套能自由进入频谱空间的软硬件系统,从而为更广泛的技术创新打下基础。在 GNU Radio 的邮件讨论组中每天都有来自世界各地的用户对各种相关技术问题的讨论,这些用户包括学生、大学教师、软硬件工程师、无线工程师、业余无线电爱好者,正是这些人推动了新技术的发展进步。

GNURadio 的开放特性也是其具有广泛吸引力的重要因素,同时也是其生命力的源泉。由于代码和技术资料完全开放,人们可以了解到其运作的所有细节,并可自由地对其进行修改和开发。在这种开放的氛围之下,人们取得的知识、成果可以得到充分的交流共享,更有益于创新。

3.2.2 GNU Radio 的软件结构

GNURadio 提供一个信号处理模块的库,这个库包含多种调制模式(GMSK、 PSK、QAM、OFDM 等),多种纠错编码(Reed-Solomon、Viterbi、Turbo Codes 等),多种信号处理结构(任意滤波器、FFT、量化器等),并且有个机制可以把单个的处理模块连接在一起形成一个系统。编程者通过建立一个流向图(flow graph)就能搭建成一个无线电系统。

GNURadio 的编程基于 Python 脚本语言和 C++的混合方式。C++由于具有较高的执行效率,被用于编写各种信号处理模块,如:滤波器、FFT 变换、调制/解调器、信道编译码模块等,GNU Radio 中称这种模块为 block。GNU Radio 提供了超过 100 个的信号处理块,并且扩展新的处理模块也是非常容易的。

Python是一种新型的脚本语言,具有无须编译、语法简单以及完全面向对象的特点,因此被用来编写连接各个 block 成为完整的信号处理流程的脚本,GNU Radio 中称其为flow graph 流向图。这是一个相当强大的语言,新的 libraries 和功能经常被加进来。在某种程度上看,GNU Radio 用一个实时有效的信号处理库来扩展 Python。结合这些库,我们将拥有大量的功能。比如说,结合 GNU Radio 和 SCIPY(Python 科学计算库),可以实时记录 RF 信号,并且可以离线做大量的数学操作,保存统计数字到一个数据库当中,等等。结合这些库,不用使用 MATLAT 这样的软件都可以实现了。

编程者通过建立一个流向图(flow graph),如下图 3.1 所示,就能搭建一个无线电系统。形象地说,flow graph 就像一块电路板,在 flow graph 基础上的 blocks 就如电路板上的电路模块,而我们需要做的就是如何将这些模块很好地连接起来。

如上图所示,信号数据流不停的从信号处理模块的输入端口流入,再从相应信号处理模块的输出端口流出。信号处理块 (blocks)的属性包括输入和输出的端口数以及流过端口的数据的类型,经常使用的数据流的类型是短整型(short),浮点型(float),和复数(complex)类型。一些处理模块仅仅有输入端口或者输出端口,它们分别成为信号源(data source)和信号接收器(data sink)。有的信号源从文件或者 ADC 读入数据,信号接收器把数据写入文件或者 DAC、PC 的多媒体接口。

信号处理模块不仅能处理输入和输出的采样速率是整数倍关系的同步模块,也能处理异步模块。同步模块通常继承自 gr_sync_block(输入输出 1:1 的采样比)或者gr_sync_interpolator (1:N)或者 gr_sync_decimator (N:1)。异步模块通常直接继承自 gr模块。当模块已经实现,Python 通过把各个模块的输入输出连接在一起形成信号流图,在 main class 上把它们连接起来,这样即可运行了。

在用户用 block 和 graph 构造的应用程序下面是 GNU Radio 的运行支持环境,主要包括缓存管理、线程调度以及硬件驱动。GNU Radio 中巧妙地设计了一套零拷贝循环缓存机制,保证数据在 block 之间高效的流动。

在运行着的 GNU Radio 实例中,GNU Radio 通过其特有的线程调度控制模块和模块之间的数据流采样速率。除此之外还需要 forecast()的辅助,它由编程者告诉线程调度一个模块需要多少种输入采样速率来产生需要数量的输出采样速率。

实际信号处理是在函数 general_work()或者 resp.work()中实现。这些函数被线程调度调用并被赋予若干个输入采样速率,然后进行信号处理并返回输入采样处理量和输出采样的产生量。

GNURadio 也处理数据的缓存。信号处理模块通常以它们被输入的速率来处理,但有时候因为 CPU 的处理速率或者其它因素,数据处理的速度不够快,就需要缓存(buffer)来缓冲。这就要求编程者要注意:当数据传送的速率大于处理速度时,有些缓存有可能会溢出并导致数据丢失;而当数据传送速率小于处理速度时,缓存经常是空的,有可能会产生脉冲。