微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > USRP中FM接收机代码学习笔记

USRP中FM接收机代码学习笔记

时间:10-02 整理:3721RD 点击:
Gnuradio中FM接收机的实现是一个经典的例子,从它的源代码中可以学习python语言的一些特点,还有软件无线电的一些基本概念。其中的python程序是重点。

1、初识Pyhton语言的特点

Python语言是一种解释性语言,利用解释器即时的执行命令,不需要编译和链接。它对类的组织管理是以module/package的形式实现的。其中模块(module)文件包含了python的一些定义和声明,后缀为.py。包(package)是有相似功能的模块的集合,这些模块通常都在同一个目录下。一个package下的可以是模块,也可以是子包(sub-package)。如a.b即是指a包中的b模块。

任何一段程序都需要预先包含进相应的包或者模块。这些的导入很灵活,可以导入整个包,也可以导入子包、模块,甚至也可以导入某个模块下一个类的定义。

python语言中没有明确的像C中的大括号或者其他语言中类似的标识程序开始的符号,它是通过缩进来实现的(个人觉得这点在一开始编程时,会很容易出错,而且不容易找出来,但是这是一个好的习惯,可以编写出条理的程序)。注释语句是通过#来标注的。所以#后的语句,解释器都自动忽略。

在函数参数中有可能出现的*表示在函数被调用时,参数可为任意。即参数的数目是可以变化的,也可以没有这个参数。

2、Gnuradio中一种非常重要的类:flow_graph(流图类)。

gr是gnuradio中重要的一个子包,也是整个gnuradio软件的核心。flow_graph类即在gr中定义。现在程序里用到了stdgui.gui_flow_graph,它继承于gr.flow_graph,而gr.flow_graph又继承自gr.basic_flow_graph.这样形成了一个很大的graph 家庭。它的编写以及连接机制暂时还不清楚。只知道SWIG作为了python和C++的接口,在后台做了很多事。许多以gr开头的模块都是以C++来编写的,其形式为gr_sig_source_f,通过SWIG的工作,使得我们可以在python中以gr.sig_source_f来调用它。

3、每个程序结尾处的if _name_='_main_':

每一个模块都有一个属性"_name_"来指明当前模块的名字。当其被导入时,就会在模块名称空间创建_name_来保存模块的名称。但是如果不是被导入而是直接运行脚本的话,就需要语句得到执行。在执行过程中,系统会自动将_name_设为_main_(其他情况下,模块是不会得到main的名称的),因此if _name_='_main_'这个判断语句下的语句就可以得到执行了。

原码地址:http://gnuradio.org/redmine/projects/gnuradio/repository/revisions/e4cf0d1b51b7bc9843e76e8d6e35097664b6f2b3/entry/gr-uhd/examples/usrp_wfm_rcv.py

完全看不懂

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top