精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

軟件無線電安全之GNU Radio基礎知識

蛇矛實驗室 ? 來源:蛇矛實驗室 ? 2024-02-25 10:20 ? 次閱讀

本期作者/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 來命名流程圖:

df6737a4-d233-11ee-a297-92fbcf53809c.png

點擊file->save,輸入grc文件的名稱后保存GRC流程圖。

df932e72-d233-11ee-a297-92fbcf53809c.png

我們可以進入保存grc的目錄下進行查看,發現保存了一個grc文件和生成了一個python文件。其中grc文件包含了在 GRC 中顯示流程圖的信息,python文件則包含實際的 Python 流程圖代碼。

df9f78da-d233-11ee-a297-92fbcf53809c.pngdfba1960-d233-11ee-a297-92fbcf53809c.png

返回gnuradio打開的grc文件中,鍵盤使用ctrl+f或者點擊菜單欄中的放大鏡按鈕可以進行模塊搜索。這里我們分別搜索 Signal Source 、Throttle、QT GUI Frequency Sink 和 QT GUI Time Sink模板,并按照下圖順序將每個塊拖放到工作區中。隨后依次點擊上一個塊out口和下一個塊的in口,連接效果如下。

dfd1a6d4-d233-11ee-a297-92fbcf53809c.png

點擊Execute按鈕(菜單欄中綠色的三角按鈕)啟動程序,我們可以看到如下的波形:

dff3e56e-d233-11ee-a297-92fbcf53809c.png

定義變量

我們搜索var,然后將Variable變量模塊拖入工作區中。并將其id命令為frequency。

e0073eac-d233-11ee-a297-92fbcf53809c.png

雙擊Signal Source,修改Sample Rate的值為samp_rate變量,即可將定義的samp_rate=32k值賦值給Signal Source的。修改Frequency的值為frequency變量。

e0156be4-d233-11ee-a297-92fbcf53809c.png

運行時更新變量

GNU Radio 模塊庫自帶 QT GUI 模塊,這些模塊允許在運行時對流程圖進行交互和修改。QT GUI Range 模塊會創建一個滑塊,可用于運行時更新變量。我們搜索range并將QT GUI Range塊拖入工作區中:

e033c67a-d233-11ee-a297-92fbcf53809c.pnge04364fe-d233-11ee-a297-92fbcf53809c.png

QT GUI Range是一個可變滑塊,使用該模塊需要設置 QT GUI Range默認值。我們將ID修改為frequency,然后將Default Value設置為 0。這里的start和stop是滑塊的開始值和停止值。我們設置起始值為 -samp_rate/2 ,停止值設置為 samp_rate/2 。step是滑塊的步長。我們這里將步長設置為 100 Hz ,并點擊apply。

e0fd6d2c-d233-11ee-a297-92fbcf53809c.png

點擊運行流程圖后,效果如下。我們可以滑動按鈕來修改frequency的值。

e10f62ac-d233-11ee-a297-92fbcf53809c.pnge125045e-d233-11ee-a297-92fbcf53809c.pnge146ec7c-d233-11ee-a297-92fbcf53809c.png

QT GUI Chooser為變量創建選項下拉菜單。我們可以搜索Chooser,并將 QT GUI Chooser拖放到工作區中。

e159f308-d233-11ee-a297-92fbcf53809c.png

修改QT GUI Chooser的ID值后,點擊apply,發現報錯。

e16a9eba-d233-11ee-a297-92fbcf53809c.png

這里是因為我們前面的QT GUI Range塊已經引用了frequecy變量,導致沖突。

e185fa2a-d233-11ee-a297-92fbcf53809c.png

我們右擊QT GUI Range塊,點擊disable將其禁用,禁用該塊后顯示為灰色。

e1a0744a-d233-11ee-a297-92fbcf53809c.png

此時已經顯示正常,我們此時點擊運行流程圖。

e1b6d366-d233-11ee-a297-92fbcf53809c.png


QT GUI Chooser效果如下。

e1d808ec-d233-11ee-a297-92fbcf53809c.pnge1f2d8f2-d233-11ee-a297-92fbcf53809c.png

信號數據類型

塊上的每個輸入和輸出端口都將具有與之關聯的數據類型。數據類型由輸入和輸出端口的顏色標識,我們單擊 Help->Types可以進行查看:

e218bcd4-d233-11ee-a297-92fbcf53809c.png

窗口顯示數據類型及其關聯的顏色,這些顏色對應于 GRC 中模塊的輸入和輸出端口。

e23c38b2-d233-11ee-a297-92fbcf53809c.png

下面示例流程圖中使用 Complex Float 32 數據類型,該數據類型使用一對 32 位浮點數來表示復雜樣本的實部和虛部。

e24a25da-d233-11ee-a297-92fbcf53809c.pnge27214aa-d233-11ee-a297-92fbcf53809c.png

運行流程圖顯示繪制在時域中的復數信號,其中信號 1 是實數分量,信號 2 是復數信號的虛數分量:

e28d2844-d233-11ee-a297-92fbcf53809c.png

將所有數據類型轉換為 Float 后,我們重新運行該流程圖:

e294ce28-d233-11ee-a297-92fbcf53809c.png

Signal Source 模塊創建一個實際輸出,該輸出顯示為時域中的唯一信號:

e2a956ea-d233-11ee-a297-92fbcf53809c.png

數據類型轉換

搜索 Random Source 塊并將其拖動到工作區中:

e2ccc88c-d233-11ee-a297-92fbcf53809c.png

該塊默認為 Integer 32 數據類型。雙擊該塊以打開屬性并將數據類型修改為 byte:

e2d43d42-d233-11ee-a297-92fbcf53809c.png

Random Source 和 Throttle 模塊之間的紅色箭頭表示需要修復的數據類型錯誤。雙擊 Throttle 模塊,我們將數據類型更改為 byte:

e2f4dda4-d233-11ee-a297-92fbcf53809c.png

QT GUI Time Sink 沒有 char 數據類型,我們選擇float類型。GNU Radio 模塊庫附帶了類型轉換器下列出的各種數據類型轉換器。搜索 Char To Float 模塊,將其拖動到工作區中,然后將其連接到流程圖中。

e306ab74-d233-11ee-a297-92fbcf53809c.png

現在所有紅色錯誤都消失了,按播放按鈕啟動流程圖。QT GUI Time Sink 現在將顯示來自隨機源塊的數據,該塊隨機化為 0 和 1:

e3211aa4-d233-11ee-a297-92fbcf53809c.png

其他

以上為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

相減(Subtract)

信道模型

衰落信道模型(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。

e34080a6-d233-11ee-a297-92fbcf53809c.png

點擊運行后,即可收聽97.9MHz頻率的波段。這里雖然可以收聽到FM電臺,但是聲音一樣有斷續,左下角控制終端一直輸出aUaU...。經過查閱相關資料后發現是虛擬機音頻欠載的原因,目前該問題未解決,切換至windows實體機則不會出現該問題。該流程圖后續優化將frequency設置為滑塊并設置初始和結束值,便可以很方便的修改收聽頻率。

e3631328-d233-11ee-a297-92fbcf53809c.png

總結

這一小節,我們簡單使用了GNU Radio軟件,我們通過GNU Radio Companion(GRC)創建了簡單的流程圖,展示了信號生成、處理和輸出的流程。最后通過制作一個FM receiver來加深對GNU Radio的了解。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 無線通信
    +關注

    關注

    58

    文章

    4409

    瀏覽量

    143115
  • 軟件無線電
    +關注

    關注

    10

    文章

    194

    瀏覽量

    28597
  • 開源
    +關注

    關注

    3

    文章

    3123

    瀏覽量

    42064
  • GNU
    GNU
    +關注

    關注

    0

    文章

    142

    瀏覽量

    17404

原文標題:軟件無線電安全之GNU Radio基礎 -上

文章出處:【微信號:蛇矛實驗室,微信公眾號:蛇矛實驗室】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Software Defined Radio Handbook,軟件無線電手冊

    Software Defined Radio Handbook,軟件無線電手冊,入門級,感覺寫的很好,推薦參考!
    發表于 09-09 22:10

    深入學習GNU Radio你需要知道些什么

    學習開源軟件無線電(GNU Radio)需要有一定電腦基礎和深入的通信與信號處理知識,本文列舉了一些有用的資源,包括教程、網頁鏈接和一些在線
    發表于 05-28 07:41

    什么是GNU Radio開源軟件無線電平臺?

    GNU Radio開源軟件無線電平臺究竟是什么?
    發表于 08-02 08:18

    什么是GNU Radio

    什么是GNU Radio? 開放的軟件無線電平臺有什么優勢?
    發表于 08-02 08:13

    無線電基礎知識

    無線電基礎知識一、無線電通信名詞解釋【音頻】又稱聲頻,是人耳所能聽見的頻率。通常
    發表于 04-16 19:03 ?6794次閱讀

    開源軟件無線電(GNU Radio)基礎教程

    學習開源軟件無線電(GNURadio)需要有一定電腦基礎和深入的通信與信號處理知識,本文列舉了一些有用的資源,包括教程、網頁鏈接和一些在線教程。本教程的目的是幫助GNURadio愛好者們為這個
    發表于 11-21 18:39 ?2.1w次閱讀

    了解GNU Radio

    GNU Radio(開源軟件無線電)是一個對學習,構建和部署軟件定義無線電系統的免費
    發表于 11-21 20:34 ?4443次閱讀

    軟件無線電SWR基礎知識及實際應用

    隨著無線通信數字化和計算機應用進入無線電領域,一種新的無線通信體系結構軟件無線電,正受到國內外廣泛重視,這是繼模擬通信到數字通信、固定通信到
    發表于 11-22 01:00 ?5868次閱讀

    軟件無線電基礎知識概述

    綜述軟件無線電的起源、概念及特點,詳細介紹它的基本結構及部分實現技術。軟件無線電(Software Radio)最初起源于軍事通信。軍用電臺
    發表于 12-13 10:46 ?4405次閱讀

    如何在Linux下搭建GNU Radio平臺及它的應用分析

    GNU Radio是一個開源的軟件無線電開發平臺,可以通過圖形化界面或C++、Python等文本語言快速開發軟件
    的頭像 發表于 01-02 07:56 ?4055次閱讀
    如何在Linux下搭建<b class='flag-5'>GNU</b> <b class='flag-5'>Radio</b>平臺及它的應用分析

    學習GNU Radio需要應該如何準備

    學習開源軟件無線電GNU Radio)需要有一定電腦基礎和深入的通信與信號處理知識,本文列舉了一些有用的資源,包括教程、網頁鏈接和一些在線
    發表于 11-18 10:31 ?2次下載
    學習<b class='flag-5'>GNU</b> <b class='flag-5'>Radio</b>需要應該如何準備

    GNU Radio開源軟件無線電平臺的簡介

    GNU Radio(開源軟件無線電)是一個對學習,構建和部署軟件定義無線電系統的免費
    發表于 10-26 10:41 ?1次下載
    <b class='flag-5'>GNU</b> <b class='flag-5'>Radio</b>開源<b class='flag-5'>軟件</b><b class='flag-5'>無線電</b>平臺的簡介

    GNU Radio:開放的軟件無線電平臺

    GNU Radio:開放的軟件無線電平臺介紹。
    發表于 05-27 11:07 ?10次下載

    DIY無線電遙控器基礎知識

    電子發燒友網站提供《DIY無線電遙控器基礎知識.zip》資料免費下載
    發表于 11-17 10:13 ?3次下載
    DIY<b class='flag-5'>無線電</b>遙控器<b class='flag-5'>基礎知識</b>

    軟件定義無線電(SDR)基礎知識

    電子發燒友網站提供《軟件定義無線電(SDR)基礎知識.pdf》資料免費下載
    發表于 11-23 11:11 ?1次下載
    <b class='flag-5'>軟件</b>定義<b class='flag-5'>無線電</b>(SDR)<b class='flag-5'>基礎知識</b>