本期作者/0xc4se
GNU Radio介紹
GNU Radio是一款開(kāi)源的軟件工具集,專注于軟件定義無(wú)線電(SDR)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)。該工具集支持多種SDR硬件平臺(tái),包括USRP、HackRF One和RTL-SDR等。用戶可以通過(guò)GNU Radio Companion構(gòu)建流程圖,使用不同的模塊實(shí)現(xiàn)信號(hào)處理、濾波、解調(diào)等功能。GNU Radio提供了豐富的信號(hào)處理庫(kù),支持實(shí)時(shí)和離線操作,廣泛應(yīng)用于無(wú)線通信、雷達(dá)、無(wú)線電天文學(xué)等領(lǐng)域。其強(qiáng)大的社區(qū)支持和詳細(xì)的文檔使開(kāi)發(fā)者能夠更好地使用這一工具,靈活、可定制地構(gòu)建和測(cè)試各種無(wú)線通信系統(tǒng)。
調(diào)制與信號(hào)處理流程
人類的可聽(tīng)范圍為20 - 20000kHz。相對(duì)而言,這些頻率遠(yuǎn)低于FM無(wú)線電廣播頻率。因此,音頻波只能傳播很短的距離。廣播電臺(tái)想要遠(yuǎn)程傳輸聲音和音樂(lè)的音頻信號(hào)。那么電臺(tái)就需要將音頻信號(hào)中的信息傳輸?shù)礁哳l率的載波上。這些波可以比人們可聽(tīng)見(jiàn)的波傳播得更遠(yuǎn)、更快。這個(gè)過(guò)程稱之為調(diào)制。調(diào)制有幾種不同的類型,我們經(jīng)常收聽(tīng)的FM 廣播電臺(tái),使用的是頻率調(diào)制。
在軟件無(wú)線電(SDR)行業(yè)中,數(shù)字信號(hào)是以離散形式表示的信號(hào),即信號(hào)的幅度、頻率和相位在時(shí)間上是離散的。這與模擬信號(hào)不同,模擬信號(hào)是連續(xù)的。數(shù)字信號(hào)的處理涉及將模擬信號(hào)轉(zhuǎn)換為數(shù)字形式,通過(guò)一系列離散的處理步驟對(duì)其進(jìn)行操作,最后將結(jié)果重新轉(zhuǎn)換回模擬信號(hào)。
以下是數(shù)字信號(hào)在軟件無(wú)線電行業(yè)中的處理步驟:
模數(shù)轉(zhuǎn)換(Analog-to-Digital Conversion,ADC)過(guò)程:模擬信號(hào)首先通過(guò)模數(shù)轉(zhuǎn)換器(ADC)轉(zhuǎn)換為數(shù)字信號(hào)。目的:將連續(xù)的模擬信號(hào)在時(shí)間和幅度上進(jìn)行離散化,以便計(jì)算機(jī)能夠處理。
數(shù)字信號(hào)處理(Digital Signal Processing,DSP)過(guò)程:數(shù)字信號(hào)經(jīng)過(guò)一系列數(shù)字信號(hào)處理算法,如濾波、混頻、解調(diào)等。目的:在數(shù)字域中對(duì)信號(hào)進(jìn)行操作和處理,以提取、增強(qiáng)或變換信號(hào)的特定特征。
數(shù)模轉(zhuǎn)換(Digital-to-Analog Conversion,DAC)過(guò)程:處理后的數(shù)字信號(hào)通過(guò)數(shù)模轉(zhuǎn)換器(DAC)轉(zhuǎn)換為模擬信號(hào)。目的:將數(shù)字信號(hào)還原為連續(xù)的模擬信號(hào),以便在后續(xù)的模擬電路或設(shè)備中使用。
輸出階段過(guò)程:模擬信號(hào)經(jīng)過(guò)可能的放大器、濾波器等設(shè)備后,最終輸出到用戶的設(shè)備,如揚(yáng)聲器或顯示器。目的:將數(shù)字信號(hào)處理的結(jié)果轉(zhuǎn)換為可感知或可用的模擬信號(hào)。
在軟件無(wú)線電中,這些步驟通常在計(jì)算機(jī)上通過(guò)專用軟件(例如本小節(jié)中的GNU Radio)執(zhí)行。這種數(shù)字信號(hào)的處理方法使得系統(tǒng)更加靈活,能夠適應(yīng)不同的通信標(biāo)準(zhǔn)和應(yīng)用需求。
GNU Radio安裝
sudo apt-getinstall libboost-all-dev libusb-1.0-0-dev python-mako doxygen python-docutils cmake build-essential git clone git://github.com/EttusResearch/uhd.git cd~/code/udh/host sudo mkdirbuild sudo cmake ../ sudo make sudo ldconfig export LD_LIBRARY_PATH=/usr/local/lib sudo apt install cmake git g++ libboost-all-dev python-dev python-mako python-numpy python-wxgtk3.0python-sphinx python-cheetah swig libzmq3-dev libfftw3-dev libgsl-dev libcppunit-dev doxygen libcomedi-dev libqt4-opengl-dev python-qt4 libqwt-dev libsdl1.2-dev libusb-1.0-0-dev python-gtk2 python-lxml pkg-config python-sip-dev sudo apt-getinstall python3-pip git clone --recursive https://github.com/gnuradio/gnuradio.git cdgnuradio sudo mkdirbuild cdbuild sudo cmake -DCMAKE_INSTALL_PREFIX=/opt/gnuradio ../ sudo make sudo makeinstall sudo vim~/.barshrc export PATH=$PATH:/opt/gnuradio/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/gnuradio/lib export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/gnuradio/lib/pkgconfig export PYTHONPATH=$PYTHONPATH:/opt/gnuradio/lib/python2.7/dist-packages
GNU Radio使用
第一個(gè)流程圖
打開(kāi)終端運(yùn)行g(shù)nuradio_companion命令,會(huì)顯示如下界面,界面中有Options和Variable倆個(gè)塊。我們雙擊 Options 塊,我們可以通過(guò)編輯 Id 和 Title 來(lái)命名流程圖:
點(diǎn)擊file->save,輸入grc文件的名稱后保存GRC流程圖。
我們可以進(jìn)入保存grc的目錄下進(jìn)行查看,發(fā)現(xiàn)保存了一個(gè)grc文件和生成了一個(gè)python文件。其中g(shù)rc文件包含了在 GRC 中顯示流程圖的信息,python文件則包含實(shí)際的 Python 流程圖代碼。
返回gnuradio打開(kāi)的grc文件中,鍵盤使用ctrl+f或者點(diǎn)擊菜單欄中的放大鏡按鈕可以進(jìn)行模塊搜索。這里我們分別搜索 Signal Source 、Throttle、QT GUI Frequency Sink 和 QT GUI Time Sink模板,并按照下圖順序?qū)⒚總€(gè)塊拖放到工作區(qū)中。隨后依次點(diǎn)擊上一個(gè)塊out口和下一個(gè)塊的in口,連接效果如下。
點(diǎn)擊Execute按鈕(菜單欄中綠色的三角按鈕)啟動(dòng)程序,我們可以看到如下的波形:
定義變量
我們搜索var,然后將Variable變量模塊拖入工作區(qū)中。并將其id命令為frequency。
雙擊Signal Source,修改Sample Rate的值為samp_rate變量,即可將定義的samp_rate=32k值賦值給Signal Source的。修改Frequency的值為frequency變量。
運(yùn)行時(shí)更新變量
GNU Radio 模塊庫(kù)自帶 QT GUI 模塊,這些模塊允許在運(yùn)行時(shí)對(duì)流程圖進(jìn)行交互和修改。QT GUI Range 模塊會(huì)創(chuàng)建一個(gè)滑塊,可用于運(yùn)行時(shí)更新變量。我們搜索range并將QT GUI Range塊拖入工作區(qū)中:
QT GUI Range是一個(gè)可變滑塊,使用該模塊需要設(shè)置 QT GUI Range默認(rèn)值。我們將ID修改為frequency,然后將Default Value設(shè)置為 0。這里的start和stop是滑塊的開(kāi)始值和停止值。我們?cè)O(shè)置起始值為 -samp_rate/2 ,停止值設(shè)置為 samp_rate/2 。step是滑塊的步長(zhǎng)。我們這里將步長(zhǎng)設(shè)置為 100 Hz ,并點(diǎn)擊apply。
點(diǎn)擊運(yùn)行流程圖后,效果如下。我們可以滑動(dòng)按鈕來(lái)修改frequency的值。
QT GUI Chooser為變量創(chuàng)建選項(xiàng)下拉菜單。我們可以搜索Chooser,并將 QT GUI Chooser拖放到工作區(qū)中。
修改QT GUI Chooser的ID值后,點(diǎn)擊apply,發(fā)現(xiàn)報(bào)錯(cuò)。
這里是因?yàn)槲覀兦懊娴腝T GUI Range塊已經(jīng)引用了frequecy變量,導(dǎo)致沖突。
我們右擊QT GUI Range塊,點(diǎn)擊disable將其禁用,禁用該塊后顯示為灰色。
此時(shí)已經(jīng)顯示正常,我們此時(shí)點(diǎn)擊運(yùn)行流程圖。
QT GUI Chooser效果如下。
信號(hào)數(shù)據(jù)類型
塊上的每個(gè)輸入和輸出端口都將具有與之關(guān)聯(lián)的數(shù)據(jù)類型。數(shù)據(jù)類型由輸入和輸出端口的顏色標(biāo)識(shí),我們單擊 Help->Types可以進(jìn)行查看:
窗口顯示數(shù)據(jù)類型及其關(guān)聯(lián)的顏色,這些顏色對(duì)應(yīng)于 GRC 中模塊的輸入和輸出端口。
下面示例流程圖中使用 Complex Float 32 數(shù)據(jù)類型,該數(shù)據(jù)類型使用一對(duì) 32 位浮點(diǎn)數(shù)來(lái)表示復(fù)雜樣本的實(shí)部和虛部。
運(yùn)行流程圖顯示繪制在時(shí)域中的復(fù)數(shù)信號(hào),其中信號(hào) 1 是實(shí)數(shù)分量,信號(hào) 2 是復(fù)數(shù)信號(hào)的虛數(shù)分量:
將所有數(shù)據(jù)類型轉(zhuǎn)換為 Float 后,我們重新運(yùn)行該流程圖:
Signal Source 模塊創(chuàng)建一個(gè)實(shí)際輸出,該輸出顯示為時(shí)域中的唯一信號(hào):
數(shù)據(jù)類型轉(zhuǎn)換
搜索 Random Source 塊并將其拖動(dòng)到工作區(qū)中:
該塊默認(rèn)為 Integer 32 數(shù)據(jù)類型。雙擊該塊以打開(kāi)屬性并將數(shù)據(jù)類型修改為 byte:
Random Source 和 Throttle 模塊之間的紅色箭頭表示需要修復(fù)的數(shù)據(jù)類型錯(cuò)誤。雙擊 Throttle 模塊,我們將數(shù)據(jù)類型更改為 byte:
QT GUI Time Sink 沒(méi)有 char 數(shù)據(jù)類型,我們選擇float類型。GNU Radio 模塊庫(kù)附帶了類型轉(zhuǎn)換器下列出的各種數(shù)據(jù)類型轉(zhuǎn)換器。搜索 Char To Float 模塊,將其拖動(dòng)到工作區(qū)中,然后將其連接到流程圖中。
現(xiàn)在所有紅色錯(cuò)誤都消失了,按播放按鈕啟動(dòng)流程圖。QT GUI Time Sink 現(xiàn)在將顯示來(lái)自隨機(jī)源塊的數(shù)據(jù),該塊隨機(jī)化為 0 和 1:
其他
以上為gnuradio幾個(gè)基礎(chǔ)模塊的使用方法,除了上面用到模塊的使用,常見(jiàn)的其他模塊使用效果如下:
信號(hào)波形生成器(Waveform Generators)
常數(shù)信源(Constant Source) - 生成固定幅度的常數(shù)信號(hào)。
噪聲信源(Noise Source) - 生成各種類型的噪聲信號(hào),如高斯噪聲。
信號(hào)源(Signal Source) - 生成各種信號(hào)類型,如正弦波、方波等。
調(diào)制器(Modulators)
AM解調(diào)(AM Demod) - 解調(diào)幅度調(diào)制(AM)信號(hào)。
連續(xù)相位調(diào)制(Continuous Phase Modulation) - 進(jìn)行連續(xù)相位調(diào)制。
相位偏移調(diào)制與解調(diào)(PSK Mod/Demod) - 進(jìn)行相位偏移調(diào)制和解調(diào)。
高斯頻移鍵控調(diào)制與解調(diào)(GFSK Mod/Demod) - 高斯頻移鍵控調(diào)制和解調(diào)。
高斯最小頻移鍵控調(diào)制與解調(diào)(GMSK Mod/Demod) - 高斯最小頻移鍵控調(diào)制和解調(diào)。
正交振幅調(diào)制調(diào)制與解調(diào)(QAM Mod/Demod) - 進(jìn)行正交振幅調(diào)制和解調(diào)。
寬帶調(diào)頻接收(WBFM Receive) - 寬帶調(diào)頻調(diào)制的接收端。
窄帶調(diào)頻接收(NBFM Receive) - 窄帶調(diào)頻調(diào)制的接收端。
界面(GUI)
星座圖(Constellation Sink) - 可視化星座圖。
頻域圖(Frequency Sink) - 顯示信號(hào)頻譜的頻域圖。
時(shí)域圖(Time Sink) - 顯示信號(hào)的時(shí)域波形圖。
直方圖(Histogram Sink) - 顯示信號(hào)的直方圖。
瀑布圖(Waterfall Sink) - 顯示頻譜隨時(shí)間變化的瀑布圖。
數(shù)學(xué)運(yùn)算(Math Operators)
絕對(duì)值(Abs)
相加(Add)
復(fù)數(shù)共軛(Complex Conjugate)
相除(Divide)
積分(Integrate)
取對(duì)數(shù)(Log10)
相乘(Multiply)
均方根(RMS)
信道模型
衰落信道模型(Fading Model) - 模擬信號(hào)在信道中的衰落效應(yīng)。
動(dòng)態(tài)信道模型(Dynamic Channel Model) - 模擬動(dòng)態(tài)變化的信道特性。
頻率選擇性衰落模型(Frequency Selective Fading Model) - 模擬頻率選擇性衰落的信道。
濾波器(Filters)
帶通/帶阻濾波器(Band Pass / Reject Filter)
低通/高通濾波器(Low / High Pass Filter)
無(wú)限沖激響應(yīng)濾波器(IIR Filter)
均方根余弦濾波器(Root Raised Cosine Filter)
抽取有限沖激響應(yīng)濾波器(Decimating FIR Filter)
傅里葉分析
快速傅里葉變換(FFT) - 執(zhí)行快速傅里葉變換以分析信號(hào)的頻譜。
克斯塔斯環(huán)(Costas Loop) - 一種相位同步技術(shù),通常用于解調(diào)PSK調(diào)制的信號(hào)。
實(shí)驗(yàn):制作一個(gè)FM receiver流程圖
該實(shí)驗(yàn)我們使用osmocom_source 模塊來(lái)接收FM信號(hào),設(shè)置中心頻率center_freq=97.9MHz,設(shè)置了一個(gè)滑塊channel_freq,默認(rèn)頻率為97.9MHz。這里需要注意,channel_freq是收聽(tīng)廣播的頻率,center_freq是接收信號(hào)的中心頻率。其中采樣率設(shè)置為變量samp_rate=10MHz(采樣率決定了接收信號(hào)的范圍,以中心頻率為中心左右各5MHz。),Ch0:Frequency (Hz)設(shè)置為變量center_freq=97.9MHz。用一個(gè)Signal Source產(chǎn)生一個(gè)頻率為center_freq-channel_freq的余弦波來(lái)與osmocom Source模塊的輸出相乘,進(jìn)行頻譜搬移。流程圖中低通濾波器(低通濾波器就是只允許頻率低于截止頻率的波通過(guò)的濾波器,高于截止頻率的波會(huì)被直接消除)的截止頻率設(shè)置為75kHz,過(guò)渡帶寬為25kHz,Decimation抽取值為int(samp_rate/channel_width)=50,經(jīng)過(guò)此模塊后的采樣率由10MHz變?yōu)榱?00kHz。使用Rational Resampler模塊來(lái)繼續(xù)調(diào)整采樣率,以此來(lái)滿足后續(xù)Audio Sink模塊需要的48kHz做準(zhǔn)備。經(jīng)過(guò)Rational Resampler模塊作用,采樣率變化過(guò)程為200k*12/5=480kHz。使用WBFM接收模塊來(lái)進(jìn)行WBFM解調(diào),其中Audio Decimation為10,表示將采樣率480kHz要變?yōu)?80k/10=48kHz,以此來(lái)適應(yīng)Audio Sink所要求的48kHz。Quadrature Rate表示的是WBFM Receive模塊所期望的輸入采樣率為480kHz。
點(diǎn)擊運(yùn)行后,即可收聽(tīng)97.9MHz頻率的波段。這里雖然可以收聽(tīng)到FM電臺(tái),但是聲音一樣有斷續(xù),左下角控制終端一直輸出aUaU...。經(jīng)過(guò)查閱相關(guān)資料后發(fā)現(xiàn)是虛擬機(jī)音頻欠載的原因,目前該問(wèn)題未解決,切換至windows實(shí)體機(jī)則不會(huì)出現(xiàn)該問(wèn)題。該流程圖后續(xù)優(yōu)化將frequency設(shè)置為滑塊并設(shè)置初始和結(jié)束值,便可以很方便的修改收聽(tīng)頻率。
總結(jié)
這一小節(jié),我們簡(jiǎn)單使用了GNU Radio軟件,我們通過(guò)GNU Radio Companion(GRC)創(chuàng)建了簡(jiǎn)單的流程圖,展示了信號(hào)生成、處理和輸出的流程。最后通過(guò)制作一個(gè)FM receiver來(lái)加深對(duì)GNU Radio的了解。
審核編輯:湯梓紅
-
無(wú)線通信
+關(guān)注
關(guān)注
58文章
4564瀏覽量
143496 -
軟件無(wú)線電
+關(guān)注
關(guān)注
10文章
195瀏覽量
28672 -
開(kāi)源
+關(guān)注
關(guān)注
3文章
3309瀏覽量
42471 -
GNU
+關(guān)注
關(guān)注
0文章
143瀏覽量
17492
原文標(biāo)題:軟件無(wú)線電安全之GNU Radio基礎(chǔ) -上
文章出處:【微信號(hào):蛇矛實(shí)驗(yàn)室,微信公眾號(hào):蛇矛實(shí)驗(yàn)室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論