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