【转载】第一个GNURadio应用程序心得

原文地址:我的第一个GNURadio应用程序心得作者:YEYE

目录:

前言

一.准备学习

二.针对性逐行研究代码

三.构建自己的应用流图,编写程序,调试通过

四、small tips

 

 

前言:学习背景:电子通信专业,相关专业课程都有学习,没学过python(大多数都没有学过)C++学习过,只学过C的话最好对面向对象编程的类,封装,重构有所了解,学习,有助于学习python编程。

 

一、           准备学习

步骤:入门中文文档——> 登陆gnuradio/wiki网站查看入门英文相关手册——>根据wiki在电脑上手动安装GNURadio平台(首先在电脑上安装虚拟机,虚拟机上安装LINUX系统)——>了解linux系统的基本操作指令,会运行安装好后的gnuradio源代码。

1.入门中文文档:

重点:[1]GNU_Radio入门_V0.99,黄琳著。

[2] Python简明教程

其他:对软件无线电基本概念,发展历史,随便找本书,有所了解。

2.http://gnuradio.org/redmine/projects/gnuradio/wiki,关于gnuradio的介绍这个网站是最全面的,入门时可以看看安装步骤介绍和FAQ。

3.安装最好参见上面网站的说明,因为其版本更新是最迅速的,中文文档版本过时,不便参考。

4.推荐论坛:http://www.ruby-forum.com/forum/gnuradio这个英文论坛确实有很多东西可以看,学会用搜索;http://gnuradio.cc/index.php?m-bbs.html这个中文论坛比较冷清,但是有牛人解答,尤其是meteor,很热心,很牛,几乎有问必答。

5.有问题时针对性在论坛和网站FAQ上都搜索不到时,可以直接google(英文学术搜索比百度好),或者直接联系牛人。(加群,邮件联系)

二、针对性逐行研究代码

   根据课题要求,在下载的gnuradio包中查看相应源代码,找到主程序。

这里以我的OFDM举例,相关程序涉及一个只有数据发送的benchmark代码,一个ofdm收发的benchmark ofdm。

●理解程序第一步:重点理解python程序的流图机制,顶层文件都是python程序,底层C++写的信号处理模块可暂时不了解,可通过在GRC里查找相应模块了解其接口参数即可。先从简单程序入手,GNURadio入门文档的第四章在这一阶段要重新重点看。

  另外,由于python编程的重要性,个人认为简明教程还是不太够,最好再看一本厚一点的编程入门。推荐清华大学出版的james payne的python编程入门经典,其他也行。

●Benchmark代码详细解析有gnuradio中文论坛版大meteor的解释非常详细,对读懂这个程序有很大帮助。因为gnuradio就是为了实现各种无线电应用,也就是一个收发通信系统,所以在阅读其他程序之前也非常有必要先把这个物理层的收发程序读懂。

●其他程序的阅读我认为大框架就是要搞懂流图的建立,一个大的应用一般自己编写了几个python文件,流图流向涉及好几个自己编写的文件,一个办法就是在该主程序顶头用from…import引入模块的句子中找到从当前路径引入的模块,再在当前路径中找到对应.py文件,联系起来即可知道流图去向。其他引入模块若为from gnuradioimport…则为从gnuradio中引入的模块,直接import则为调用的python的内嵌模块。

▲TIPS:

◆查找gnuradio的模块:为了读懂程序,不需要在阅读到前几句引入模块的时候就赶紧到gnuradio包中去搜索对应模块,而是读到具体语句的时候,确定是引用了gnuradio中模块的相关函数的时候再去查找其作用,一般格式举例:gr.sizeof_gr_complex 规律:所有gnuradio的模块调用前缀都是gr.后面有横杠表示类的私有函数。

查找方法:在gnuradio包下,例如gnuradio- 3.5.0文件夹下,选择“搜索”,注意键入关键字搜索方法:例如gr.sizeof_gr_complex就可以键入sizeof而不是全部键入,可断句键入搜索,一般我们要找的是CC文件和H文件,其他文件不用看。

◆查找python函数:程序中没有任何前后声明的一般为python的内嵌函数,举例: data =source_file.read(pkt_size - 2),这里source_file为前面定义的一个文件变量,python把其当做对象,read()函数没有任何说明,即可分析其为python内嵌函数。查找方法:安装一个python编辑调试器IDLE非常有必要!!!安装IDLE以后会有一个强大的帮助文档,类同matlab的帮助文档,可以直接在安装目录里打开,也可以打开编辑器以后按F1调出文档,要学会用其搜索功能,所有python函数都可以搜索到,对理解程序非常有帮助,另外,也可以尝试用编辑器编写一些小的python程序,帮助理解其编程原理。在GNURadio平台上构建自己的无线应用,初期阶段其已有C++编写的信号处理模块绝对已经足够,所以python编程就非常重要。也不需要单纯对python了解太深,脱离了gnuradio个人认为得不偿失。

三、构建自己的流图,编写程序,调试通过

●GRC的运用:初期学习构建简单通信系统可以尝试用grc,构建成功后仔细分析其生成的.py文件,对python程序的流图机制理解很有帮助。这一步甚至可以放在逐行阅读程序(第二步)之前。GRC的使用非常简单,不用细说,就是拖动模块过来连线,刚开始用的时候不知道怎么连线,有人告诉就是把两个端点各单击一次即可,若有问题则主要是原理的问题,对于模块接口参数的设计理解了原理根据提示修改一般没有问题,不过还是建议自己的程序不要用GRC,自己编写会好得多,参考模版也建议不要参考GRC生成的程序,参考源代码为好。

●在心中构建了一个流图以后,一个当然是可以用GRC仿真检验后再自己编程,如果GRC不能完成,则可以自己编程实现了。由于python是脚本语言,不需编译,所以目前作为仍然是新手级别,我只知道在终端直接运行,根据错误提示调试,新手遇到的问题多于缩进有关:indentation error:unexpected indent

或者变量定义位置:attribute error:”str” object has no attribute“read”(属性错误),这个错误在于我把变量写在了一个if语句下面,后面else又用了,总之都是基础错误,python语言对于变量不需要事先声明,所以对于新手理解程序有点障碍,必须慢慢习惯。再有莫名其妙的问题在各个论坛问了也没人理的时候就有可能是你的流图接口有问题了,这个必须就要自己慢慢的把自己用到的各个模块的接口搞懂然后再更改就行了。这个时候也可以求助于GRC看能不能解决。

四、small tips

1、USRP采样率(sample rate)问题:

USRPN系列时钟为100MSPS(samples persecond):可调范围为masterclock/4----masterclock/512范围,通过调节比特率(bitrate)和每符号样值率(samples per symbol),公式如下:

采样率=符号速率(symbol rate)*每符号样值数=时钟频率(masterclock)/2的n次幂(n属于2-9)

符号速率=比特率/每符号比特数

2.python中的数值类型和长度:重点:complex型。查找文档费了点时间,这里直接贴出吧,复数complex是按照(实部,虚部)存储的,实部,虚部都是按浮点型float存储的,python没有double型,与matlab接口时要注意,由于文档中说数据类型的长度与版本和机器都有关,所以建议在python编辑器IDLE上编写一个小程序测试一下,一般float是4个字节,所以complex就是8个字节。

Gnuradio编程就是python编程,所以其数据类型是相通的。

这里注意python操作的数据对象(据我看的程序貌似都是)string,所以其函数一般都把得到的数据转成了string型,这里不用紧张,收发是匹配的,会有还原。典型函数如:chr();ord();

时间: 2024-09-17 23:38:08

【转载】第一个GNURadio应用程序心得的相关文章

C++ Builder 6中开发Office程序心得(二)

(四) 单元格的操作 单元格的操作实际上就是对范围(Range)的操作.一般的代码段如下: RangePtr r; r=EWS4->get_Range(V("a1"), V("a1")); r->set_Value(V("Species No")); 所以,对单元格内容的操作实际就是先获得一个要操作的范围(Range),然后再set_Value的过程. 和数据库连接并不很困难.将数据库中的数据写到Excel Worksheet中也不是

《ASP.NET MVC 4 实战》----2.2 创建第一个MVC应用程序

2.2 创建第一个MVC应用程序 ASP.NET MVC 4 实战 现在,你的PC机上已经安装了ASP.NET MVC,可以创建第一个MVC应用程序了.我们首先使用默认模板简单地创建一个新项目,然后扩展它显示一些动态内容.在此之后,将漫游一个标准的项目布局,以使你明白构成一个MVC应用程序的各个组件. 2.2.1 创建新项目 创建新的MVC项目是一个简单的过程-在Visual Studio 2010(或Visual Web Developer Express)中点击"文件"(File)

《ASP.NET 开发从入门到精通》----2.4 第一个ASP.NET程序

2.4 第一个ASP.NET程序 知识点讲解:光盘:视频\PPT讲解(知识点)\第2章\第一个ASP.NET 4.5程序.avi 学习完搭建ASP.NET开发环境的基本知识后,接下来将详细讲解利用Visual Studio 2012创建第一个ASP.NET 4.5程序的基本操作. 实例000 创建第一个ASP.NET 4.5程序 源码路径 光盘\codes\2\ 创建第一个ASP.NET 4.5程序的具体操作如下. (1)打开Visual Studio 2012,在菜单栏中依次单击[文件]︱[新

《ASP.NET MVC 4 实战》----第 2 章 第一个MVC应用程序 2.1 设置开发环境

第 2 章 第一个MVC应用程序 ASP.NET MVC 4 实战 本章内容 本章将介绍Guestbook(留言簿)应用程序,它也是本书第1部分的其余章节所使用的示例.Guestbook是一个简单的应用程序,它让用户向网站递交他们的姓名和消息,并查看其他用户递交的消息.虽然这个Guestbook的概念很简单,但是我们将用它来考察ASP.NET MVC的核心组件. 在本书的第1部分中,我们将建立这个示例.为了使用MVC应用程序,首先看看需要安装的开发工具,然后创建Guestbook应用程序的初步骨

使用PyQt来编写第一个Python GUI程序

原文:使用PyQt来编写第一个Python GUI程序 本文由 伯乐在线 - Lane 翻译,Daetalus 校稿.未经许可,禁止转载!英文出处:pythonforengineers.com.欢迎加入翻译小组. 简介 许多人在学习如何创建一个 GUI 应用的时候都感到十分的困难.其中最重要的原因是,他们不知道应该从何下手.大多数的教程都只有文字,但事实上仅仅依靠文字很难学会 GUI 编程,因为 GUI 应用大多数都是基于视觉上的. 我们将通过创建一个简单的 GUI 应用来避免上面提到的这些问题

《精通 ASP.NET MVC 4》----第 2 章 第一个MVC应用程序 2.1 准备工作站

第 2 章 第一个MVC应用程序 精通 ASP.NET MVC 4 鉴赏一个软件开发框架最好的办法是投入其中并使用它.本章将带领读者创建一个简单的.使用ASP.NET MVC框架的数据录入应用程序.本书将把事情分成一个个步骤,以使读者能够明白ASP.NET MVC应用程序是如何构造的.为简化起见,本书会跳过某些技术细节.但不必担心--如果是MVC新手,就会发现大量有趣有东西.对于一些未进行解释的内容,本书提供了参考章节,读者会在那里看到完整细节. 本文仅用于学习和交流目的,不代表异步社区观点.非

用php+mysql一个名片库程序_php基础

用php+mysql一个名片库程序,有分类查找,分页功能. 第一步:按下列代表先做个静态页面. <form method="post" action="find1.php" name="card" onSubmit="return card_Validator(this)">           <table width="400" border="0" cellspa

【AngularJS】—— 3 我的第一个AngularJS小程序

首先要注意的是,引用AngularJS的资源文件angular.min.js文件. 由于这个框架是Google的工作人员开发的,因此国内访问的时候,会被墙导致无法下载资源文件. 因此,可以使用百度开源的静态链接: http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js 代替原来的国外的资源文件链接:http://code.angularjs.org/angular-1.0.1.min.js 解决了资源文件的下载问题,就可以手动编写小

我的第一个Node web程序

NodeJS的流行也带来了开发由前端转到全栈,前端不再局限于页面如何展现,用户如何操作,也设计到整个应用的架构以及业务流程. 本篇来简单的通过实例,讲述node中web开发的模式. 参考来自<Node web开发>一书. 关于node node是基于事件的异步驱动系统,通过可扩展的方式创建网络服务器. 例如,创建一个网络服务器: var http_port = 8124; var http = require('http'); var server = http.createServer(fu