GNURadio-软件无线电入门教程
目录第一章 GNURadio 和软件无线电概述1.1什么是 GNU Radio1.2为什么我们要使用 GNU Radio1.3关于数字信号处理1.4GNU Radio 是如何工作的第二章 GNU Radio 软件安装与配置2.1操作系统的选择2.2Linux 环境下的直接安装2.3Linux 下使用PyBOMBS 辅助自动从源码构建2.4Linux 下手动从源码编译构建请参阅2.5Windows 环境下的安装2.6Mac OS X 环境下的安装第三章 教程初阶3.1熟悉使用 GNU Radio Companion第一章 GNURadio 和软件无线电概述1.1什么是 GNU RadioGNU Radio 是一个软件框架使用户能够设计、模拟和部署功能强大的软件无线电系统。它是一个高度模块化的面向“流程图”的框架带有一个全面的处理模块库可以轻松组合并构成复杂的信号处理系统的应用程序。GNU Radio 已用于大量的无线电应用程序。包括音频处理移动通信跟踪卫星雷达系统GSM数字无线电等等所有这些都在计算机软件中使用。1.2为什么我们要使用 GNU Radio以前在开发无线电通信设备时工程师必须先开发用于接收并处理特定信号的接收机 来对特定信号传输进行解码或编码。随着数字信号处理与其算法越来越复杂这些信号处理的平台也变得越来越复杂通常需要较为高速的 ADC、FPGA 以及能将实时数据串流到计算机平台的连接芯片等每个系统所对应的硬件平台不一定是一样的这就带来了巨大的开发成本。通过使用软件无线电SDR设备进行模拟信号处理在相同的硬件平台上可以同时兼容运行各种不同的软件程序不仅节约了开发成本也提高了开发新系统的效率。1.3关于数字信号处理作为一种软件框架GNU Radio 通过硬件平台串流的比特数据流输入到计算机中并在操作系统中运行相应的应用程序以此达到对特性信号进行处理的目的。我们都知道计算机只能处理数字信号。如何去理解数字信号呢简单举个例子当你想要录制一段人声的时候说话的人会产生声音信号该信号由震动导致周围气压发生变化而产生。这样一个时变的物理量就是一种信号。当空气波到达麦克风时麦克风将变化的压力转换为电信号即可变电压现在我们已经将信号转化为了电信号在一些模拟系统中已经可以开始对信号进行处理。但是对于我们的计算机系统一个数字的系统这还远远不够。为了使计算机能够处理这样的数据我们还需要满足两个条条件1.是有限点数的 2.是在有限时间之内的因此该数字信号可以由称为样本的数字序列表示。采样之间的固定时间间隔直接影响到采样率。提取物理量电压并将其转换为数字样本的过程由模数转换器ADC完成。相反我们还有数模转换器DAC可从将计算机中提取数字序列转换为模拟信号。现在我们已经有了一个数字序列我们的计算机就可以使用它进行各种操作。同样电磁波显然也是一种波它跟声波有许多相同的性质。我们可以用天线将变化的电信号发射出去这个电信号一般位于一个较高的频率上可以是数百 KHz 到 GHz。通过使用软件无线电接收机我们可以接收并对这些信号进行处理以此进行我们想要的操作。1.4GNU Radio 是如何工作的在 GNU Radio 中为了处理数字信号我们可以使用简单的流程指示箭头将其连接在上图中Signal Source 即为信号源左边的输入接口可以输入频率参数右边的输出接口可以输出音频数据流。右边的 Audio Sink 为音频接收器允许通过扬声器或其他音频设备播放出输入的信号。这就构成了一个十分简单的流程图点击软件中的运行按钮即可非常简单快捷的编译流程图并运行。GNU Radio 是一个框架用于开发这些处理模块并创建流程图。软件自带大量的处理模块在这里简单举例一些Waveform Generators 信号发生器Constant Source 常数源可以理解成直流分量Noise Source 噪声源Signal Source e.g.Sine,Square,SawToothe.g.Sine,Square,SawTooth 信号源ModulatorsAM Demod AM 解调Continuous Phase Modulation 连续相位调制PSK Mod / Demod PSK 调制/解调GFSK Mod / Demod GFSK 调制/解调GMSK Mod / Demod GMSK 调制/解调QAM Mod / Demod QAM 调制/解调WBFM Receive 宽带 FM 接收机NBFM Receive 窄带FM 接收机使用这些模块我们只需要进行相应的连接操作就可以快速搭建数字信号处理系统。另外当然你也可以自己开发新的 block或者将现有的块与其他软件结合在一起开发出新的功能。因此GNU Radio 主要是用于开发信号处理模块及其交互的软件框架。它带有广泛的标准块库开发人员可以在其中构建许多系统是十分方便的软件无线电开发工具。第二章 GNU Radio 软件安装与配置GNURadio 的官方 GitHub 页面为 https://github.com/gnuradio/gnuradio。其首页中也明确说明了对于不同操作系统的不同安装方式。2.1操作系统的选择我个人最推荐使用 Ubuntu18.04 我在这个系统版本上搭建过很多次所需要的环境没怎么出过问题使用一直很稳定。19 版本或许可以我没有尝试过但是 20 版本一定不可以 因为有接到过软件报错的情况报告。2.2Linux 环境下的直接安装对于GNU Radio如果只是简单轻度使用我就建议大家直接使用 Linux 的二进制软件包安装。最快捷方便而且最重要不容易出错。根据 GNURadio 官方 GitHub 界面首先的安装方式也是直接使用 apt 安装。以下命令适用于 DebianUbuntu 及其衍生版本。它将使用 Python2 安装 GNURadio 3.7 版sudo apt install gnuradio对于以上操作系统直接执行这条命令即可安装完成。如果遇到报错建议自行查询报错信息解决。对于其他 Linux 发行版请查阅https://wiki.gnuradio.org/index.php/InstallingGR#From_Binaries2.3Linux 下使用PyBOMBS 辅助自动从源码构建PyBOMBS 是安装GNURadio 以及相关软件工具的一个快捷工具。你可以使用它来安装各种 SDR 设备所依赖的支持库绝大部分操作都是全自动的。PyBOMBS 是方便用来从源代码构建 GNU RadioUHD 和各种 Out of TreeOOT模块然后将其安装到指定的用户目录中的工具。在使用之前PyBOMBS 会检测用户的操作系统并在构建的第一阶段加载所有先决条件可能会出现各种花式报错。如果你对于自己解决 Linux 环境配置问题不是很有信心我不建议你使用这种方法安gnuradio。注意GitHub 中详细描述了安装的步骤请自行参阅项目地址https://github.com/gnuradio/pybombs因为它是从源代码安装GNU Radio所以第五步可能需要一些时间要进行更快的安装 请参阅 https://wiki.gnuradio.org/index.php/InstallingGR#Ubuntu_PPA_Installation2.4Linux 下手动从源码编译构建请参阅https://wiki.gnuradio.org/index.php/InstallingGR#From_Binaries2.5Windows 环境下的安装在 Windows 环境下官方提供了非正式版的 GNU Radio 3.7 和 3.8 的安装文件虽然我也不推荐你真的在 Windows 平台运行这个软件但是它在 Win 平台是真的可以使用的。不管是 USRP 还是 PlutoSDR有驱动程序的话就可以使用。对于 USRP可能存在固件版本的问题按照教程后面的解决办法是可以解决的。相关的安装软件包在这里下载http://www.gcndevelopment.com/gnuradio/index.htm2.6Mac OS X 环境下的安装你是认真的请参阅https://wiki.gnuradio.org/index.php/MacInstall第三章 教程初阶3.1熟悉使用 GNU Radio Companion学习目的使用标准块库创建流程图了解如何使用检测模块 Sink 调试流程图了解GNU Radio 中的采样和调节功能了解如何使用文档找出模块的功能在本教程中我们将从简单框图开始探讨如何使用 GNU Radio 的图形工具GNU RadioCompanionGRC来创建不同的框图。GRC 是为了简化 GNU Radio 而诞生的有了它 我们可以以图形化编程的方式创建 python 脚本替代了传统的复杂代码编写进而降低软件无线电编程的入门门槛。那么我们开始。首先打开终端输入以下指令。$ sudo gnuradio-companion或者直接单击软件图标也是可以运行软件的。如果你发现不仅应用程序中没有出现软件图标而且终端也不能打开这个软件那么你的安装很有可能出现了问题。请检查安装是否存在问题。这里有一点区别。当你通过终端运行 GRC 时下图绿色部分的终端会同时在系统终端里显示。而如果直接通过点击软件图标运行则只能在GRC 的终端面板中观察信息。首先我们来介绍软件界面。总共分为五个部分库工具栏终端工作区和变量。红色区域为工具栏部分放置了平时最常用的工具比如运行、停止、编译等重要功能按键。新建、打开、保存、关闭打开/关闭变量编辑器、截图、剪切、复制、粘贴、删除选中模块查看错误信息、编译流程图、执行流程图、停止运行流程图撤销、重做启用选中模块、禁用选中模块、绕过选中模块、反转禁用连接/模块的状态查找模块、重置模块、打开选中阶梯模块源码蓝色区域即为我们绘制具体流程图的地方。我们可以将右边灰色部分库中的模块拖入蓝色区域并且将他们通过箭头连接起来这样就可以构成一个真正的信号处理系统。黄色部分显示的是当前框图中所使用到的变量。在蓝色部分的左上角可以看到两个方框 分别是 Options 与 Variable这两个是创建工程时就会自动创建的。在界面的右边灰色区域中存放了大量可以用于拖拽到流程图中的模块。其中有很大一部分是软件安装时就自带的如果你安装了其他gnuradio 附属的插件脚本也会一并显示在框中通常自行安装的会显示在最后面。因为模块非常多因此平时寻找想要的模块时一个一个手动翻找会非常麻烦。此时可 以点击工具架上的放大镜图标或是输入 Ctrl f 输入该块的关键字进行检索就可以更容易的找到这个block。例如这里我们输入 sink接收器,就可以看到包含单词“接收器”的所有块以及将在其中找到每个块的类别。现在我们来添加一个名为 QT GUI Time Sink 的块方法是单击其名称并将其拖动到工作区中或者双击其名称以将其自动放置在工作区中。工作区包含构成流程图的所有块在每个块内部都有不同的块参数但是每个新流程图都需要有一个特殊的块称为“选项块”。让我们双击选项块以检查其属性。双击opthions 模块可以看到它的具体内容。Options 中包含了工程的特殊参数设置每个流程图仅允许存在一个这样的选项模块。上面的 IDtitleauthordescription分别表示这个流程图的 ID标题以及作者和简介。该块的 ID 决定了生成文件的名称和类的名称。例如一个 ID 为 top_block 的文件将生成文件 top_block.py 和 top_block 类。Cavans Size 窗口大小控制流程图编辑器的尺寸。窗口大小宽度高度必须介于300300和40964096之间。Generate options 生成选项控制生成的代码的类型。非GUI 流程图应避免使用带有GUI的组件或图形变量控件。Run流程图的运行可由变量控制以在需要时启动和停止流程图。Max number of output 最大输出数是流程图中任何方框所允许的最大输出项数要禁用此功能将max_nouts 设置为 0 即可。使用此功能可以调整流程图可以显示的最大延迟。可以注意到另一个关键的东西。我们可以输入信息的字段中存在的不同颜色。这些实际上对应于不同的数据类型我们将在本教程的后面部分介绍这些数据类型。GRC 将我们在编辑器中创建的流程图转换为Python 脚本。因此当我们执行流程图时 实际上是在运行编译好的Python 程序。ID 用于命名该 Python 文件该文件与.grc 文件保存在同一文件夹内。默认情况下ID 是默认值因此它将创建一个名为 default.py 的文件。更改 ID 可让我们更改保存的文件名以便更好地管理文件。在 GNUradio 3.8 中如果不更改默认 ID则会收到错误消息因此需要更改此 ID 才能运行流程图。Variable 即变量它的 ID 是 samp_rate你可以在框图中的其他地方调用这个变量。例如这样这里的数值就会随着该变量的变化而变化。如果你点进了设置面板的第三个选项卡就能看到有关这个block 的文档。通常情况下正规的 block 都是会写使用文档的当然少数自定义的模块可能是没有的。虽然这些说明是英文的但是我十分建议大家自己去用谷歌等工具翻译一下这些文档因为教程不可能每个详细的点都能讲到有时还是得靠自己查一查的。如果我们删除了一个重要的参数或是填入了什么不正确的参数以至于我们的框图无法正常运行那么此时你会看到执行按钮变成灰色不可点击的状态。此时报错信息按钮亮起并且在出现错误的block 上它的名称出现了红色的高亮显示。你可以点击这个按钮就可以看到存在问题的错误信息。在错误信息中详细指出了错误出现的位置如果看不懂就用翻译工具翻译一下不过英语这么差我建议你直接放弃这玩意高中生都能看懂。#日常劝退我们只需要按照报错信息所提示的位置模块-top block-选项中的一个参数max_nouts双击打开这个模块就可以看到在模块中也存在同样的错误信息提示位于正下方。错误明确指出在这个输入框中数值“”不能被接受因为这里必须填写的是一个数字 我们填写数字 0 进去后点击确定即可发现错误信息已经消失。执行按钮也亮起说明框图无明显错误可以正常运行。现在我们对如何找到块如何将它们添加到工作区以及如何编辑块属性有了更好的了解下面我们随意以几个 block 组成一个框图来进行简单的演示。刚才我们拖入了 QT GUI Time Sink 这个模块这是个图形接收器可以同时显示多个信号。接下来我们搜索并向流程图中添加 Signal Source信号源模块和 Throttle节气门模块有关这几个模块详细的说明将在之后的教程中详细讲解现在只需知道此块会限制流程图的某些数据即可以确保它不会占用 100CPU 资源导致电脑直接卡到裂开。“生成流程图”“ 执行流程图”和“终止流程图”的快捷键分别为 F5F6 和 F7。你可以在我们刚刚提到的工具架上点击这些按钮或者直接按快捷键来进行相关的操作。当你按下生成流程图按钮之后软件就会自动将你刚才绘制的流程图转化为一个 python 脚本文件。单击执行流程图按钮之后就可以看到以下运行结果。如果你不想运行了只要点击终止流程图即可停止当前运行的程序。这样我们的第一个流程图就成功运行了。这是一个从信号源产生信号经过限流器限制后输出到 time sink 进行接收并显示到屏幕上的操作。你可以注意到这里有两根数据曲线被绘制出来他们都来自于 Data 0蓝色的曲线为Re实部红色部分为 Im虚部。如果你根本不知道Re 和 Im 是什么个玩意儿那么我建议你先学习下我们电子通信类专业的一门必修课程《复变函数》这将会对你的系统性学习产生很大的帮助。有意思的是这两个信号的相位差正好为 这对于我们的零中频Zero-IF接收/发2射机有至关重要的意义不过这个咱们以后有机会再提。在这个流程图中我们很轻松的就把所有的block 连起来了轻松的离谱你不觉得吗 没有出现任何头疼的问题或是错误。那么有没有会出现错误的情形呢当然有而且经常会有。Source IO size 8 does not match sink IO size 4.源 IO 大小“ 8”与接收器 IO 大小“ 4”不匹配。这似乎是一个和数据类型有关的报错。既然出现了这个错误那么就说明我们还没有搞懂框图输入输出的数据类型到底是个什么玩意儿。那么现在就让我们点击软件上方的help这里面有对于数据类型的说明。最上面那个棕色的看的不是很清楚不过这问题不大你用鼠标把它选中高亮就能看清了。我们可以看到在许多编程语言中都可以看到的常见数据类型。在我们刚才搭建的流程图中你可以注意到所有连接的模块端口均是蓝色的这代表当前所传输的数据为Complex Float 32 类型这意味着它们同时包含实部和虚部并且每一个都是 Float 32 类型。我们可以推断出当“Time Sink 时间接收器”采集到这样一个Complex 的数据类型时 它将在两个不同的通道上同时输出实部和虚部的图像也就是我们刚才看到的红蓝两种颜色的图像了。现在进入其 Signal Source 的属性面板并更改“输出类型”参数将信号源更改为浮点型输出。此时我们传输的数据流是一个普通的 32 位浮点数。可以看到现在我们所有连接的点均变成了橘色当然 throttle 也要调整别问我为什么它还是蓝色的这也就说明了目前数据类型均匹配当然刚才出现的报错也就消失了。有同学发现 throttle 的输出连接了两个 block。不同的节点之间是可以支持多条同样的数据链路的这是非常方便的一点也是绝大部分图形化编程界面都具有的功能。可以注意到刚才的两条线此时变成了只有一条线这是因为我们刚刚修改了数据类型。现在让我们来尝试一些更复杂的框图吧。运行结果如下
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2443092.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!