Gnuradio如何學(xué)習(xí)?Gnuradio成為 GNU 的正式項目
開源軟件無線電(Gnuradio)或 開源軟件定義無線電 是一個對學(xué)習(xí),構(gòu)建和部署軟件定義無線電系統(tǒng)的免費軟件工具包。發(fā)起于2001年,Gnuradio成為 GNU 的正式項目之一。慈善家 John Gilmore 發(fā)起并捐助 $320,000.00 (US) 給 Eric Blossom用來構(gòu)建代碼和維護。
Gnuradio [1] 是一個無線電信號處理方案,它遵循 GNU 的 GPL 的條款分發(fā)。它的目的是給普通的軟件編制者提供探索電磁波的機會,并激發(fā)他們聰明的利用射頻電波的能力。正如所有軟件定義無線電系統(tǒng)的定義, 可重構(gòu)性是其最重要的功能。再也不需購買一大堆發(fā)射接收設(shè)備,只要一臺可以裝載信號處理軟件(這里:Gnuradio )通用的設(shè)備。它雖然只定義幾個有限的無線電功能,但是只要理解無線發(fā)射系統(tǒng)的機理(算法),你便可以任意的配置去接受它。Gnuradio 起源于美國的麻省理工學(xué)院的 SpectrumWare 項目小組開發(fā)的 Pspectra 代碼的分支。2004年被完全重寫。所以今天的 Gnuradio 已不包含原 Pspectra 任何代碼。
另外值得一提的是 Pspectra 已被用作創(chuàng)立商業(yè)化的 Vanu Software Radio.Gnuradio 開發(fā)了通用軟件無線電外設(shè) (USRP ),它是一個包含4個64 MS/s 的12位 ADC,4 個 128 MS/s 的 14 位的 DAC,以及其它支持線路包括高速的 USB 2.0 接口。該USRP能夠處理的信號頻率高達16 MHz寬。一些發(fā)射器和接收器的插件子板,可覆蓋0至5.9MHz 頻段。 它是Ettus研發(fā)的。
GNU Radio 是一個免費的開源軟件開發(fā)工具包,它提供信號處理模塊來實現(xiàn)軟件無線電。它可以與現(xiàn)成的低成本外部 RF 硬件一起使用來創(chuàng)建軟件定義的無線電,或者用于純仿真環(huán)境。它廣泛用于業(yè)余愛好者、學(xué)術(shù)和商業(yè)環(huán)境,以支持無線通信研究和現(xiàn)實世界的無線電系統(tǒng)。在Windows上安裝GNU Radio可以采用軟件安裝包直接安裝或采用conda安裝.目前軟件安裝包只支持3.7和3.8版本, 最新的3.9無法采用此安裝方式.使用conda安裝的詳細過程參見conda install guide.
本文使用conda進行安裝.安裝步驟如下:
首先,請確保你的電腦上安裝了anaconda.
為了提升包的下載速度,請切換國內(nèi)的anaconda鏡像源, 方法參見:Anaconda 鏡像使用幫助.
從開始菜單中找到Anaconda Powershell Prompt (anaconda3)并打開.
在powershell中運行如下命令, 添加conda-forge倉庫:
目前類似的sdr軟件非常多,最主要的幾個功能就是瀑布圖,頻率帶寬調(diào)節(jié),和一些解碼方式的選擇。limesdr在windows下,比較方便的類似軟件是HDSDR,直接下載解壓,都不需要安裝,并把limesdr對應(yīng)的ExtIO_LimeSDR_1.05.dll驅(qū)動文件拷貝到安裝目錄下,就可以使用啦。
此外,windows下也提供傻瓜式安裝包,安裝過程確定到底,沒啥可說的,而且就我的使用感覺來說,非常不穩(wěn)定,所以這里直接略去。想玩gnuradio,一個linux系統(tǒng)還是要裝的,無論是處于開發(fā)的方便,穩(wěn)定,還是以后結(jié)合嵌入式來說,都是必須的。
首先說一下幾點注意事項,按照官網(wǎng)的說法,limesdr的工具鏈目前完整支持了16.04,18.04,18.8和一些其他的比較知名的linux發(fā)行版,20.04的ubuntu發(fā)行不久,相關(guān)工具正在開發(fā)中。而16.04在20.04版本開始開發(fā)后停止支持了。
我個人建議使用vmware安裝ubuntu18.04版本,如果就是用的VMware,那么安裝過程中或安裝后,一定注意要把USB口改成usb3.0。無論windows下,還是linux下,limesdr都只支持usb3.0,只支持usb3.0,只支持usb3.0,重要的事說三遍。不是用usb3.0更好,而是只能用usb3.0,包括電腦接口,虛擬機設(shè)置,和使用的USB轉(zhuǎn)接線。否則,電腦是無法正常發(fā)現(xiàn)設(shè)備的。如果確實是用虛擬機的話,分配的資源不要太吝嗇,CPU內(nèi)核和內(nèi)存,尤其是前者不妨多給一點,SDR某些計算的時候還是比較耗費CPU的。
然后就可以開始換進安裝之旅啦。目前網(wǎng)上其他limesdr的各種linux環(huán)境搭建方法,包括代理商提供的,大都過時,或者有問題,也有因為墻的原因,很難安裝成功,即便勉強能跑通,也容易出一些奇奇怪怪的問題,又或者會安裝上一堆沒用的其他軟件,再就是gunradio安裝的是3.7版本的。當然gnuradio似乎也已經(jīng)出到了3.9版本,但是limesdr的插件暫時還沒跟上,后續(xù)出來了,按照我同樣的思路,也應(yīng)該很容易修改。
我的安裝思路很簡單,全部編譯安裝。
0,安裝limesdr提供的linux驅(qū)動和測試軟件——LimeSuite.
1,安裝gnuradio 3.8版本。
2,安裝gnuradio 3.8版的limesdr插件——grlime 3.8版。
這個目前還沒有出到3.9版本,所以這是限制我們暫時還不能用gnuradio3.9版本的唯一原因。
如果你還沒有一個比較清楚地認識,請讀Eric Blossom的Exploring GNU Radio,這是一個對于軟件無線電的一個簡短介紹。Eric是整個gnuradio工程的創(chuàng)建人。請確保你對ADC怎么工作以及為什么需要射頻前端有一定的理解,回顧一下在信號與系統(tǒng)課程中學(xué)習(xí)的抽樣定理,然后閱讀一下這兩篇文章:“The Universal Software Radio Peripheral”和“What Goes in the FPGA”。這篇文章提供了兩個例子:撥號輸出和FM接收機。你應(yīng)該做到至少理解其中的一個。不能理解FM接收機?不用擔心,看第二篇文章,Eric Blossom的 Listen to FM Radio in Software, Step by Step。并非要把每行代碼都讀懂,但你需要清楚信號是怎么從空氣中傳到聲卡的。
尋找任何與gnuradio相關(guān)問題的答案都應(yīng)該從 GNU Radio Wiki開始, Gnuradio協(xié)會在提供援助方面也表現(xiàn)的相當慷慨,它通過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ā)表困擾你的問題之前,最好先仔細在郵件列表里搜索一番,確保你的問題沒有被處理過,閱讀一下發(fā)送郵件的參考以確保提供有用的信息,這對于別人解答你的問題也會有幫助。Gnuradio是軟件定義無線電的支柱,射頻前端是另外的東西。典型的,Ettus Research的USRP正是出于此目的。
§ Ettus Research - USRP的制造商。在這里您可以訂購USRP及配件。
§ USRP - Frequently Asked Questions - 概述USRP和常見問題列表。
你不必擁有USRP(或任何射頻前端)使用GNU Radio,但實際的實驗需要一個前端。
2、為gnuradio編寫程序
要充分利用gnuradio,你應(yīng)該會自己編寫代碼。在“Exploring GNU Radio'”中,你知道里gnuradio的軟件結(jié)構(gòu)包含兩層:所有的信號處理模塊是用C++編寫的,python用來創(chuàng)建網(wǎng)絡(luò)或流圖并且負責把信號處理模塊粘到一起。在這種方案中,python相當于一種較高層的語言。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中實現(xiàn)了哪些模塊,不幸的是,不幸的是,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
我已經(jīng)在我的瀏覽器中添加了書簽。雖然他們不夠清晰,他們可以提供你很多信息。GNUradio Doxygen生成的文檔也可以在線here。如果你還沒有機會使用Python,請學(xué)習(xí)Python在線教程。