原文网站:http://radioware.nd.edu
在深入学习gnuradio之前你需要知道的
学习GNU Radio需要有一定电脑基础和深入的通信与信号处理知识,本文列举了一些有用的资源,包括教程、网页链接和一些在线教程。本教程的目的是帮助GNU Radio爱好者们为这个令人兴奋的工具做一些准备。
目录
1、对gnuradio有一个清楚的认识
2、为gnuradio编写程序
3、数字信号处理(DSP)
4、通信系统
5、准备好了吗?
相信你已经发现gnuradio中的乐趣,并且已经开始急切的想要使用它了。 不幸的是,除了无穷的乐趣外,这其中也包含许多挑战。 依据你使用gnuradio的目的,你需要广泛的知识,包括(无线)通信系统、数字信号处理、基本的硬件和电路设计、面向对象的编程等等。不管怎样,你的兴趣和激情都能让那些东西学起来容易得多。本文列举了一些有用的文章和资源,它们或许在你投入gnuradio之前是很重要的。这里也有一些gnuradio 社区推荐的文章,在这里你也能发现一些有用的信息。 记住,在你开始学习gnuradio之前,那些基础并不是你必须要掌握的,但在接下来的教程中你很可能会去回顾这些知识。
1、对gnuradio有一个清楚的认识
如果你还没有一个比较清楚地认识,请读Eric Blossom的Exploring GNU Radio,这是一个对于软件无线电的一个简短介绍。Eric是整个gnuradio工程的创建人。请确保你对ADC怎么工作以及为什么需要射频前端有一定的理解,回顾一下在信号与系统课程中学习的抽样定理,然后阅读一下这两篇文章:“The Universal Software Radio Peripheral”和“What Goes in the FPGA”。这篇文章提供了两个例子:拨号输出和FM接收机。你应该做到至少理解其中的一个。不能理解FM接收机?不用担心,看第二篇文章,Eric Blossom的 Listen to FM Radio in Software, Step by Step。并非要把每行代码都读懂,但你需要清楚信号是怎么从空气中传到声卡的。
寻找任何与gnuradio相关问题的答案都应该从 GNU Radio Wiki开始, Gnuradio协会在提供援助方面也表现的相当慷慨,它通过mailing list提供帮助。However, before posting a question that is stumping you, do an exhaustive search of the list's archive to make sure that it has not already been addressed. 然而,在你发表困扰你的问题之前,最好先仔细在邮件列表里搜索一番,确保你的问题没有被处理过,阅读一下发送邮件的参考以确保提供有用的信息,这对于别人解答你的问题也会有帮助。Gnuradio是软件定义无线电的支柱,射频前端是另外的东西。典型的,Ettus Research的USRP正是出于此目的。
§ Ettus Research - USRP的制造商。在这里您可以订购USRP及配件。
§ USRP - Frequently Asked Questions - 概述USRP和常见问题列表。
你不必拥有USRP(或任何射频前端)使用GNU Radio,但实际的实验需要一个前端。
2、为gnuradio编写程序
要充分利用gnuradio,你应该会自己编写代码。在“Exploring GNU Radio'”中,你知道里gnuradio的软件结构包含两层:所有的信号处理模块是用C++编写的,python用来创建网络或流图并且负责把信号处理模块粘到一起。在这种方案中,python相当于一种较高层的语言。Gnuradio已经提供了许多有用的经常使用的模块,所以很多情况下,你不需要用到C++。使用python在应用层开发是高效的,接下来的教程python在gnuradio应用中的使用。然而,要完成更复杂的任务你必须要使用C++来建立自己的模块,这种情况下,Eric Blossom的How to write a block 正是你所需要的,在后续的教程中我们会将这些内容。
你可能想要知道gnuradio中实现了哪些模块,不幸的是,不幸的是,GNUradio很多地方还没有很好的文档记录,但你仍然使用Doxygen生成有两个非常有用的资源。安装gnuradio-core和usrp模块之后,您可以找到两个html包位于
/usr/local/share/doc/gnuradio-core-x.xcvs/html/index.html
/usr/local/share/doc/usrp-x.xcvs/html/index.html
我已经在我的浏览器中添加了书签。虽然他们不够清晰,他们可以提供你很多信息。GNUradio Doxygen生成的文档也可以在线here。如果你还没有机会使用Python,请学习Python在线教程。这里有一些最重要的部分:
§ Section 2: Using the Python Interpreter
§ Section 3: An Informal Introduction to Python
§ Section 6: Modules
§ Section 7: Input and Output
§ Section 9: Classes
这些概念将在GNUradio编程中经常使用。如果面向对象编程(OOP)听起来陌生,你应该仔细阅读Section 9更多。 If object oriented programming (OOP) sounds unfamiliar to you, you should read section 9 more carefully. 下面的链接也可以帮助您掌握面向对象的本质:
§ Lesson: Object-Oriented Programming Concepts
§ Introduction to Object-Oriented programming Using C++
§ The Object Oriented Programming Web
对于更高级的开发,C++知识是必要的。For more advanced development, C++ knowledge will be necessary. 以下文献可能对你有用:
§ C++ Language Tutorial
§ C++ Reference
在这个阶段,Python是更重要,所以一定要掌握它。
3、数字信号处理 (DSP)
我们大多数人学习了信号与系统课程,在这门课中学到的东西是非常重要的。然而,这是不够的。请确保你不会迷路,如果把信号从模拟形式转换到数字形式、到时域或者到频域。你需要知道一些概念包括抽样定理、z变换,如何得到一个信号的频谱和有限脉冲响应(FIR)和无限脉冲响应(IIR)过滤器。在这里我推荐几本经典的书:
§ Signals and Systems (2nd edition) - Alan V. Oppenheim, Alan S. Willsky
§ Discrete-Time Signal Processing (2nd edition) - Alan V. Oppenheim, Ronald W. Schafer, John R. Buck
§ Digital Signal Processing: Principles, Algorithms and Applications (3rd edition) - John G. Proakis, Dimitris Manolakis
阅读关于离散时间傅里叶变换和FIR,IIR滤波器的章节。我知道书是昂贵的和乏味的,这里还有一些其他有用的在线资源:
§ Digital Signal Processing Tutorial
§ The Scientist and Engineer's Guide to Digital Signal Processing
4、通信系统
我们知道真正发送和接收的信号不是在基带,它们需要调制和解调。此时你可能在你的一些课程学习了调幅和调频收音机的概念,这两个属于模拟世界。为开发更有用和有趣的方案,我们需要数字通信。在这一点上,特别重要的和有趣的是数字调制,解调和同步。在大三时,你可能对通信原理更感兴趣。此外,我建议你读:
§ Chapters 4 and 5 - Digital Communications (4th edition) - John G. Proakis
这两个章节中介绍的知识正是我们需要的。这里是另一本很不错的书:
§ Digital Signal Processing in Communication Systems - Marvin E. Frerking
这本书有一个实际工程重点,包含很多很好的例子。Frerking对于一个给定的发射机或接收机的设计问题通常提供了多种解决方案,提出了实用的算法而不是纯粹的理论讨论,它甚至可以用作通信系统设计的字典。
5、准备好了吗?
我上面列出四个主题,并不意味着在使用GNUradio之前你需要一个接一个的完成。你当然也可以在本教程学习过程中学习它们。但是至少你应该阅读我在GNUradio部分提到的文章。