本期作者/0xc4se
GNU Radio介紹
GNU Radio是一款開源的軟件工具集,專注于軟件定義無線電(SDR)系統的設計和實現。該工具集支持多種SDR硬件平臺,包括USRP、HackRF One和RTL-SDR等。用戶可以通過GNU Radio Companion構建流程圖,使用不同的模塊實現信號處理、濾波、解調等功能。GNU Radio提供了豐富的信號處理庫,支持實時和離線操作,廣泛應用于無線通信、雷達、無線電天文學等領域。其強大的社區支持和詳細的文檔使開發者能夠更好地使用這一工具,靈活、可定制地構建和測試各種無線通信系統。
調制與信號處理流程
人類的可聽范圍為20 - 20000kHz。相對而言,這些頻率遠低于FM無線電廣播頻率。因此,音頻波只能傳播很短的距離。廣播電臺想要遠程傳輸聲音和音樂的音頻信號。那么電臺就需要將音頻信號中的信息傳輸到更高頻率的載波上。這些波可以比人們可聽見的波傳播得更遠、更快。這個過程稱之為調制。調制有幾種不同的類型,我們經常收聽的FM 廣播電臺,使用的是頻率調制。
在軟件無線電(SDR)行業中,數字信號是以離散形式表示的信號,即信號的幅度、頻率和相位在時間上是離散的。這與模擬信號不同,模擬信號是連續的。數字信號的處理涉及將模擬信號轉換為數字形式,通過一系列離散的處理步驟對其進行操作,最后將結果重新轉換回模擬信號。
以下是數字信號在軟件無線電行業中的處理步驟:
模數轉換(Analog-to-Digital Conversion,ADC)過程:模擬信號首先通過模數轉換器(ADC)轉換為數字信號。目的:將連續的模擬信號在時間和幅度上進行離散化,以便計算機能夠處理。
數字信號處理(Digital Signal Processing,DSP)過程:數字信號經過一系列數字信號處理算法,如濾波、混頻、解調等。目的:在數字域中對信號進行操作和處理,以提取、增強或變換信號的特定特征。
數模轉換(Digital-to-Analog Conversion,DAC)過程:處理后的數字信號通過數模轉換器(DAC)轉換為模擬信號。目的:將數字信號還原為連續的模擬信號,以便在后續的模擬電路或設備中使用。
輸出階段過程:模擬信號經過可能的放大器、濾波器等設備后,最終輸出到用戶的設備,如揚聲器或顯示器。目的:將數字信號處理的結果轉換為可感知或可用的模擬信號。
在軟件無線電中,這些步驟通常在計算機上通過專用軟件(例如本小節中的GNU Radio)執行。這種數字信號的處理方法使得系統更加靈活,能夠適應不同的通信標準和應用需求。
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使用
第一個流程圖
打開終端運行gnuradio_companion命令,會顯示如下界面,界面中有Options和Variable倆個塊。我們雙擊 Options 塊,我們可以通過編輯 Id 和 Title 來命名流程圖:
點擊file->save,輸入grc文件的名稱后保存GRC流程圖。
我們可以進入保存grc的目錄下進行查看,發現保存了一個grc文件和生成了一個python文件。其中grc文件包含了在 GRC 中顯示流程圖的信息,python文件則包含實際的 Python 流程圖代碼。
返回gnuradio打開的grc文件中,鍵盤使用ctrl+f或者點擊菜單欄中的放大鏡按鈕可以進行模塊搜索。這里我們分別搜索 Signal Source 、Throttle、QT GUI Frequency Sink 和 QT GUI Time Sink模板,并按照下圖順序將每個塊拖放到工作區中。隨后依次點擊上一個塊out口和下一個塊的in口,連接效果如下。
點擊Execute按鈕(菜單欄中綠色的三角按鈕)啟動程序,我們可以看到如下的波形:
定義變量
我們搜索var,然后將Variable變量模塊拖入工作區中。并將其id命令為frequency。
雙擊Signal Source,修改Sample Rate的值為samp_rate變量,即可將定義的samp_rate=32k值賦值給Signal Source的。修改Frequency的值為frequency變量。
運行時更新變量
GNU Radio 模塊庫自帶 QT GUI 模塊,這些模塊允許在運行時對流程圖進行交互和修改。QT GUI Range 模塊會創建一個滑塊,可用于運行時更新變量。我們搜索range并將QT GUI Range塊拖入工作區中:
QT GUI Range是一個可變滑塊,使用該模塊需要設置 QT GUI Range默認值。我們將ID修改為frequency,然后將Default Value設置為 0。這里的start和stop是滑塊的開始值和停止值。我們設置起始值為 -samp_rate/2 ,停止值設置為 samp_rate/2 。step是滑塊的步長。我們這里將步長設置為 100 Hz ,并點擊apply。
點擊運行流程圖后,效果如下。我們可以滑動按鈕來修改frequency的值。
QT GUI Chooser為變量創建選項下拉菜單。我們可以搜索Chooser,并將 QT GUI Chooser拖放到工作區中。
修改QT GUI Chooser的ID值后,點擊apply,發現報錯。
這里是因為我們前面的QT GUI Range塊已經引用了frequecy變量,導致沖突。
我們右擊QT GUI Range塊,點擊disable將其禁用,禁用該塊后顯示為灰色。
此時已經顯示正常,我們此時點擊運行流程圖。
QT GUI Chooser效果如下。
信號數據類型
塊上的每個輸入和輸出端口都將具有與之關聯的數據類型。數據類型由輸入和輸出端口的顏色標識,我們單擊 Help->Types可以進行查看:
窗口顯示數據類型及其關聯的顏色,這些顏色對應于 GRC 中模塊的輸入和輸出端口。
下面示例流程圖中使用 Complex Float 32 數據類型,該數據類型使用一對 32 位浮點數來表示復雜樣本的實部和虛部。
運行流程圖顯示繪制在時域中的復數信號,其中信號 1 是實數分量,信號 2 是復數信號的虛數分量:
將所有數據類型轉換為 Float 后,我們重新運行該流程圖:
Signal Source 模塊創建一個實際輸出,該輸出顯示為時域中的唯一信號:
數據類型轉換
搜索 Random Source 塊并將其拖動到工作區中:
該塊默認為 Integer 32 數據類型。雙擊該塊以打開屬性并將數據類型修改為 byte:
Random Source 和 Throttle 模塊之間的紅色箭頭表示需要修復的數據類型錯誤。雙擊 Throttle 模塊,我們將數據類型更改為 byte:
QT GUI Time Sink 沒有 char 數據類型,我們選擇float類型。GNU Radio 模塊庫附帶了類型轉換器下列出的各種數據類型轉換器。搜索 Char To Float 模塊,將其拖動到工作區中,然后將其連接到流程圖中。
現在所有紅色錯誤都消失了,按播放按鈕啟動流程圖。QT GUI Time Sink 現在將顯示來自隨機源塊的數據,該塊隨機化為 0 和 1:
其他
以上為gnuradio幾個基礎模塊的使用方法,除了上面用到模塊的使用,常見的其他模塊使用效果如下:
信號波形生成器(Waveform Generators)
常數信源(Constant Source) - 生成固定幅度的常數信號。
噪聲信源(Noise Source) - 生成各種類型的噪聲信號,如高斯噪聲。
信號源(Signal Source) - 生成各種信號類型,如正弦波、方波等。
調制器(Modulators)
AM解調(AM Demod) - 解調幅度調制(AM)信號。
連續相位調制(Continuous Phase Modulation) - 進行連續相位調制。
相位偏移調制與解調(PSK Mod/Demod) - 進行相位偏移調制和解調。
高斯頻移鍵控調制與解調(GFSK Mod/Demod) - 高斯頻移鍵控調制和解調。
高斯最小頻移鍵控調制與解調(GMSK Mod/Demod) - 高斯最小頻移鍵控調制和解調。
正交振幅調制調制與解調(QAM Mod/Demod) - 進行正交振幅調制和解調。
寬帶調頻接收(WBFM Receive) - 寬帶調頻調制的接收端。
窄帶調頻接收(NBFM Receive) - 窄帶調頻調制的接收端。
界面(GUI)
星座圖(Constellation Sink) - 可視化星座圖。
頻域圖(Frequency Sink) - 顯示信號頻譜的頻域圖。
時域圖(Time Sink) - 顯示信號的時域波形圖。
直方圖(Histogram Sink) - 顯示信號的直方圖。
瀑布圖(Waterfall Sink) - 顯示頻譜隨時間變化的瀑布圖。
數學運算(Math Operators)
絕對值(Abs)
相加(Add)
復數共軛(Complex Conjugate)
相除(Divide)
積分(Integrate)
取對數(Log10)
相乘(Multiply)
均方根(RMS)
信道模型
衰落信道模型(Fading Model) - 模擬信號在信道中的衰落效應。
動態信道模型(Dynamic Channel Model) - 模擬動態變化的信道特性。
頻率選擇性衰落模型(Frequency Selective Fading Model) - 模擬頻率選擇性衰落的信道。
濾波器(Filters)
帶通/帶阻濾波器(Band Pass / Reject Filter)
低通/高通濾波器(Low / High Pass Filter)
無限沖激響應濾波器(IIR Filter)
均方根余弦濾波器(Root Raised Cosine Filter)
抽取有限沖激響應濾波器(Decimating FIR Filter)
傅里葉分析
快速傅里葉變換(FFT) - 執行快速傅里葉變換以分析信號的頻譜。
克斯塔斯環(Costas Loop) - 一種相位同步技術,通常用于解調PSK調制的信號。
實驗:制作一個FM receiver流程圖
該實驗我們使用osmocom_source 模塊來接收FM信號,設置中心頻率center_freq=97.9MHz,設置了一個滑塊channel_freq,默認頻率為97.9MHz。這里需要注意,channel_freq是收聽廣播的頻率,center_freq是接收信號的中心頻率。其中采樣率設置為變量samp_rate=10MHz(采樣率決定了接收信號的范圍,以中心頻率為中心左右各5MHz。),Ch0:Frequency (Hz)設置為變量center_freq=97.9MHz。用一個Signal Source產生一個頻率為center_freq-channel_freq的余弦波來與osmocom Source模塊的輸出相乘,進行頻譜搬移。流程圖中低通濾波器(低通濾波器就是只允許頻率低于截止頻率的波通過的濾波器,高于截止頻率的波會被直接消除)的截止頻率設置為75kHz,過渡帶寬為25kHz,Decimation抽取值為int(samp_rate/channel_width)=50,經過此模塊后的采樣率由10MHz變為了200kHz。使用Rational Resampler模塊來繼續調整采樣率,以此來滿足后續Audio Sink模塊需要的48kHz做準備。經過Rational Resampler模塊作用,采樣率變化過程為200k*12/5=480kHz。使用WBFM接收模塊來進行WBFM解調,其中Audio Decimation為10,表示將采樣率480kHz要變為480k/10=48kHz,以此來適應Audio Sink所要求的48kHz。Quadrature Rate表示的是WBFM Receive模塊所期望的輸入采樣率為480kHz。
點擊運行后,即可收聽97.9MHz頻率的波段。這里雖然可以收聽到FM電臺,但是聲音一樣有斷續,左下角控制終端一直輸出aUaU...。經過查閱相關資料后發現是虛擬機音頻欠載的原因,目前該問題未解決,切換至windows實體機則不會出現該問題。該流程圖后續優化將frequency設置為滑塊并設置初始和結束值,便可以很方便的修改收聽頻率。
總結
這一小節,我們簡單使用了GNU Radio軟件,我們通過GNU Radio Companion(GRC)創建了簡單的流程圖,展示了信號生成、處理和輸出的流程。最后通過制作一個FM receiver來加深對GNU Radio的了解。
審核編輯:湯梓紅
-
無線通信
+關注
關注
58文章
4409瀏覽量
143115 -
軟件無線電
+關注
關注
10文章
194瀏覽量
28597 -
開源
+關注
關注
3文章
3123瀏覽量
42064 -
GNU
+關注
關注
0文章
142瀏覽量
17404
原文標題:軟件無線電安全之GNU Radio基礎 -上
文章出處:【微信號:蛇矛實驗室,微信公眾號:蛇矛實驗室】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論