學(xué)習(xí)開源軟件無線電(GNU Radio)需要有一定電腦基礎(chǔ)和深入的通信與信號處理知識,本文列舉了一些有用的資源,包括教程、網(wǎng)頁鏈接和一些在線教程。本教程的目的是幫助GNU Radio愛好者們?yōu)檫@個(gè)令人興奮的工具做一些準(zhǔn)備。
目錄
1、對GNU Radio有一個(gè)清楚的認(rèn)識
2、為GNU Radio編寫程序
3、數(shù)字信號處理(DSP)
4、通信系統(tǒng)
5、準(zhǔn)備好了嗎?
相信你已經(jīng)發(fā)現(xiàn)gnuradio中的樂趣,并且已經(jīng)開始急切的想要使用它了。 不幸的是,除了無窮的樂趣外,這其中也包含許多挑戰(zhàn)。 依據(jù)你使用gnuradio的目的,你需要廣泛的知識,包括(無線)通信系統(tǒng)、數(shù)字信號處理、基本的硬件和電路設(shè)計(jì)、面向?qū)ο蟮木幊痰鹊取2还茉鯓?,你的興趣和激情都能讓那些東西學(xué)起來容易得多。本文列舉了一些有用的文章和資源,它們或許在你投入gnuradio之前是很重要的。這里也有一些gnuradio 社區(qū)推薦的文章,在這里你也能發(fā)現(xiàn)一些有用的信息。 記住,在你開始學(xué)習(xí)gnuradio之前,那些基礎(chǔ)并不是你必須要掌握的,但在接下來的教程中你很可能會去回顧這些知識。
1、對gnuradio有一個(gè)清楚的認(rèn)識
如果你還沒有一個(gè)比較清楚地認(rèn)識,請讀Eric Blossom的Exploring GNU Radio,這是一個(gè)對于軟件無線電的一個(gè)簡短介紹。Eric是整個(gè)gnuradio工程的創(chuàng)建人。請確保你對ADC怎么工作以及為什么需要射頻前端有一定的理解,回顧一下在信號與系統(tǒng)課程中學(xué)習(xí)的抽樣定理,然后閱讀一下這兩篇文章: “The Universal Software Radio Peripheral” 和 “What Goes in the FPGA”。這篇文章提供了兩個(gè)例子:撥號輸出和FM接收機(jī)。你應(yīng)該做到至少理解其中的一個(gè)。不能理解FM接收機(jī)?不用擔(dān)心,看第二篇文章,Eric Blossom的 Listen to FM Radio in Software, Step by Step。并非要把每行代碼都讀懂,但你需要清楚信號是怎么從空氣中傳到聲卡的。
尋找任何與gnuradio相關(guān)問題的答案都應(yīng)該從 GNU Radio Wiki開始, Gnuradio協(xié)會在提供援助方面也表現(xiàn)的相當(dāng)慷慨,它通過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. 然而,在你發(fā)表困擾你的問題之前,最好先仔細(xì)在郵件列表里搜索一番,確保你的問題沒有被處理過,閱讀一下發(fā)送郵件的參考以確保提供有用的信息,這對于別人解答你的問題也會有幫助。Gnuradio是軟件定義無線電的支柱,射頻前端是另外的東西。典型的,Ettus Research的USRP正是出于此目的。
• Ettus Research - USRP的制造商。在這里您可以訂購USRP及配件。
• USRP - Frequently Asked Questions - 概述USRP和常見問題列表。
你不必?fù)碛蠻SRP(或任何射頻前端)使用GNU Radio,但實(shí)際的實(shí)驗(yàn)需要一個(gè)前端。
2、為gnuradio編寫程序
要充分利用gnuradio,你應(yīng)該會自己編寫代碼。在“Exploring GNU Radio'”中,你知道里gnuradio的軟件結(jié)構(gòu)包含兩層:所有的信號處理模塊是用C++編寫的,python用來創(chuàng)建網(wǎng)絡(luò)或流圖并且負(fù)責(zé)把信號處理模塊粘到一起。在這種方案中,python相當(dāng)于一種較高層的語言。Gnuradio已經(jīng)提供了許多有用的經(jīng)常使用的模塊,所以很多情況下,你不需要用到C++。使用python在應(yīng)用層開發(fā)是高效的,接下來的教程python在gnuradio應(yīng)用中的使用。然而,要完成更復(fù)雜的任務(wù)你必須要使用C++來建立自己的模塊,這種情況下,Eric Blossom的How to write a block 正是你所需要的,在后續(xù)的教程中我們會將這些內(nèi)容。
你可能想要知道gnuradio中實(shí)現(xiàn)了哪些模塊,不幸的是,不幸的是,GNUradio很多地方還沒有很好的文檔記錄,但你仍然使用Doxygen生成有兩個(gè)非常有用的資源。安裝gnuradio-core和usrp模塊之后,您可以找到兩個(gè)html包位于
/usr/local/share/doc/gnuradio-core-x.xcvs/html/index.html
/usr/local/share/doc/usrp-x.xcvs/html/index.html
我已經(jīng)在我的瀏覽器中添加了書簽。雖然他們不夠清晰,他們可以提供你很多信息。GNUradio Doxygen生成的文檔也可以在線here。如果你還沒有機(jī)會使用Python,請學(xué)習(xí)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編程中經(jīng)常使用。如果面向?qū)ο缶幊?OOP)聽起來陌生,你應(yīng)該仔細(xì)閱讀Section 9更多。 If object oriented programming (OOP) sounds unfamiliar to you, you should read section 9 more carefully. 下面的鏈接也可以幫助您掌握面向?qū)ο蟮谋举|(zhì):
• Lesson: Object-Oriented Programming Concepts
• Introduction to Object-Oriented programming Using C++
• The Object Oriented Programming Web
對于更高級的開發(fā),C++知識是必要的。For more advanced development, C++ knowledge will be necessary. 以下文獻(xiàn)可能對你有用:
在這個(gè)階段,Python是更重要,所以一定要掌握它。
3、數(shù)字信號處理 (DSP)
我們大多數(shù)人學(xué)習(xí)了信號與系統(tǒng)課程,在這門課中學(xué)到的東西是非常重要的。然而,這是不夠的。請確保你不會迷路,如果把信號從模擬形式轉(zhuǎn)換到數(shù)字形式、到時(shí)域或者到頻域。你需要知道一些概念包括抽樣定理、z變換,如何得到一個(gè)信號的頻譜和有限脈沖響應(yīng)(FIR)和無限脈沖響應(yīng)(IIR)過濾器。在這里我推薦幾本經(jīng)典的書:
• 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
閱讀關(guān)于離散時(shí)間傅里葉變換和FIR,IIR濾波器的章節(jié)。我知道書是昂貴的和乏味的,這里還有一些其他有用的在線資源:
• Digital Signal Processing Tutorial
• The Scientist and Engineer's Guide to Digital Signal Processing
4、通信系統(tǒng)
我們知道真正發(fā)送和接收的信號不是在基帶,它們需要調(diào)制和解調(diào)。此時(shí)你可能在你的一些課程學(xué)習(xí)了調(diào)幅和調(diào)頻收音機(jī)的概念,這兩個(gè)屬于模擬世界。為開發(fā)更有用和有趣的方案,我們需要數(shù)字通信。在這一點(diǎn)上,特別重要的和有趣的是數(shù)字調(diào)制,解調(diào)和同步。在大三時(shí),你可能對通信原理更感興趣。此外,我建議你讀:
• Chapters 4 and 5 - Digital Communications (4th edition) - John G. Proakis
這兩個(gè)章節(jié)中介紹的知識正是我們需要的。這里是另一本很不錯(cuò)的書:
• Digital Signal Processing in Communication Systems - Marvin E. Frerking
這本書有一個(gè)實(shí)際工程重點(diǎn),包含很多很好的例子。Frerking對于一個(gè)給定的發(fā)射機(jī)或接收機(jī)的設(shè)計(jì)問題通常提供了多種解決方案,提出了實(shí)用的算法而不是純粹的理論討論,它甚至可以用作通信系統(tǒng)設(shè)計(jì)的字典。
5、準(zhǔn)備好了嗎?
我上面列出四個(gè)主題,并不意味著在使用GNUradio之前你需要一個(gè)接一個(gè)的完成。你當(dāng)然也可以在本教程學(xué)習(xí)過程中學(xué)習(xí)它們。但是至少你應(yīng)該閱讀我在GNUradio部分提到的文章。
翻譯:李懷遠(yuǎn)