天天看點

gnuradio

在深入學習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部分提到的文章。