GNU Radio入门系列1:GNU Radio以及软件无线电介绍
GNU Radio入门系列
GNU Radio以及软件无线电介绍
什么是GNU Radio
GNU Radio是一个软件无线电框架,使用户能够设计,模拟和部署功能强大的真实无线电系统。它是一个高度模块化的,面向“流程图”的框架,带有一个全面的处理模块库,可以轻松组合以构成复杂的信号处理应用程序。
GNU Radio已能够实现大量现实世界的无线电应用,包括音频处理,移动通信,跟踪卫星,雷达系统,GSM网络,Mondiale数字无线电等等。
就其本身而言,这并不是搭配任何特定硬件通信的解决方案,也没有为特定的无线电通信标准(例如802.11,ZigBee,LTE等)提供开箱即用的应用程序,但是它可以(并且已经)用于开发任何实施方案以及通讯标准。
为什么使用GNU Radio
以前,在设计无线电设备时,工程师必须开发用于检测特定信号类别的电路,设计能够传输特定编解码的集成电路,并使用专业设备进行调试。
软件无线电(SDR)进行信号仿真和处理,并在物理上和经济上可行的范围内,将其移动计算机上处理部分无线电信号算法。
当然,您可以从头开始编写程序,使用与计算机相连的无线电设备,并根据需要连接算法,自行移入和移出数据。但很快问题就来了:为什么要重新实现一个标准的滤波器,为什么要关心数据如何在不同的处理块之间的流动,使用高度优化和经过同行评审的实现而不是自己编写的代码不会是更好的选择吗?以及如何让程序在多核体系结构上能够很好地扩展,又能在功耗仅几瓦的嵌入式设备上很好地运行呢?真的要自己编写所有的GUI吗?
GNU Radio:专用于为商用计算机编写信号处理应用程序的框架。GNU Radio将功能包装在易于使用的可重用模块中,具有出色的可扩展性,提供了广泛的标准算法库,并针对各种通用平台进行了优化。它还带有大量示例,可以帮助使用者轻松入门。
数字信号处理
作为一种软件框架,GNU Radio使用计算机处理数字化信号以完成通信功能。
信号理论
用软件进行信号处理要求信号是数字的。但是什么是数字信号?
为了更好地理解,让我们看一个常见的“信号”场景:用手机录制语音。
从物理上讲,产生声音“信号”在这种情况下,该信号由人的声音和弦产生的气压变化波动组成,这种随时间变化的物理量(如气压)被定义为信号。
当波到达麦克风时,它将变化的压力转换为电信号,即可变电压:现在信号已经转变成电信号的形式了,我们可以使用它了。但是音频信号是模拟信号,作为数字计算机尚无法处理,为了进行计算处理,信号必须是数字信号,这意味着两件事:
它必须是一个有限的数值。
它只能存在有限长度的时间。
因此,该数字信号可以由采样的数字序列表示。采样之间的固定时间间隔是信号采样率。
提取物理量(电压)并将其转换为数字样本的过程由模数转换器(ADC)完成。数模转换器(DAC),可从数字计算机获取数字并将其转换为模拟信号。
现在我们得到数字序列,计算机可以使用它执行任何操作。例如,它可以使用数字滤波器,对其进行压缩,语音识别或使用链路传输信号。
将数字信号应用于无线电传输
类比声音信号,我们可以以相似的方式处理无线电波。信号,也就是电磁波,可以使用天线将其转换为随时间变化的电压。
该电信号处于“载波频率”上,通常为几MHz甚至GHz。
可以购买专用软件无线电外围设备,例如为用户提供的不同类型的接收器(例如,超外差接收器,直接转换,低中频接收器),或者可以购买消费级别的软件无线电设备(例如RTL-SDR项目)。
基于流图flowgraph的模块化数字信号处理方法
为了处理数字信号,可以将各个处理阶段(滤波,校正,分析,检测…)直接视为处理块processing blocks,使用简单的指示箭头将其连接:
构建信号处理应用程序时,将构建完整的块图,这样的图在GNU Radio中称为流程图。
GNU Radio是一个框架,用于开发这些处理模块并创建流程图,包括各种无线电处理应用程序。
作为GNU Radio的用户,您可以将现有的块组合成一个高级流程图,该流程图的执行与接收数字调制信号一样复杂,并且GNU Radio会自动在它们之间移动信号数据,并在准备好的时候进行信号处理
GNU Radio带有大量现成的模块。以下是一些最受欢迎的类别及其成员:
- Waveform Generators:Constant Source,Noise Source,Signal Source (e.g. Sine, Square, Saw Tooth)
- Modulators:AM Demod,Continuous Phase Modulation,PSK Mod / Demod,GFSK Mod / Demod,GMSK Mod / Demod,QAM Mod / Demod,WBFM Receive,NBFM Receive
- Instrumentation (i.e., GUIs):Constellation Sink,Frequency Sink,Histogram Sink,Number Sink,Time Raster Sink,Time Sink,Waterfall Sink
- Math Operators:Abs,Add,Complex Conjugate,Divide,Integrate,Log10,Multiply,RMS,Subtract
- Channel Models:Channel Model,Fading Model,Dynamic Channel Model,Frequency Selective Fading Model
- Filters:Band Pass / Reject Filter,Low / High Pass Filter,IIR Filter,Generic Filterbank,Hilbert,
Decimating FIR Filter,Root Raised Cosine Filter,FFT Filter - Fourier Analysis:FFT,Log Power FFT,Goertzel (Resamplers),Fractional Resampler,Polyphase Arbitrary Resampler,Rational Resampler (Synchronizers),Clock Recovery MM,Correlate and Sync,Costas Loop,FLL Band-Edge,PLL,Freq Det,PN Correlator,Polyphase Clock Sync
使用这些模块,只需将适当的模块连接到信号处理流程图即可完成许多标准任务,如信号标准化,同步,测量和可视化。
另外,您可以编写自己的块,或者将现有的块与某种算法结合在一起,以提供具有某些逻辑的新功能,或者对输入数据和输出数据进行操作。
因此,GNU Radio主要是用于开发信号处理模块及其交互的框架。它带有广泛的标准块库,并且开发人员可以在其中构建许多系统。但是,GNU Radio本身并不是准备进行特定操作的软件,尽管它已经附带了许多有用的工作示例,但用户仍需根据它来构建一些有用的算法。
参考资料
[1]https://wiki.gnuradio.org/index.php/Guided_Tutorial_Introduction