MATLAB的RTL-SDR硬體支持包使用詳細教程

2021-12-28 開源SDR實驗室

本文內容、開發板及配件僅限用於學校或科研院所開展科研實驗!

溫馨提示:「開源SDR實驗室」是北京的。

本文原文作者是sund,原文連結是http://www.sund-xys.cn/matlab-rtlsdr/,經原文作者授權後轉載。歡迎大家關注本文作者的博客http://www.sund-xys.cn/。

目錄

一、前言

二、RTL-SDR驅動安裝

三、安裝matlab RTL-SDR硬體支持包

四、在MATALB上使用RTL-SDR

1、FM廣播接收

2、RTL-SDR硬體支持包的函數

3、錄製無線信號測試

4、連續掃頻測試

五、總結

一、前言

matlab在R2013b版本以後支持了調用RTL-SDR的硬體支持包,但是相關資料很少;中文網際網路上的教程關於如何使用的教程幾乎是空白。在這裡我嘗試將我的使用過程總結一下以拋磚引玉,希望能夠幫助到其他的無線愛好者更方便的使用RTL-SDR~
  RTL-SDR是Realtek的一款SDR,後來被人hack以後能夠開啟2.2GHz以內頻段的接收(最大是2.2G,這和你購買的sdr所使用的前端調諧器有關),理論採樣率為3.2MHz,但是在實際使用中我推薦設置為2.4MHz以下可以無失真的接收。下面是常見的RTL-SDR調諧器的型號以及對應的頻率範圍:

本文大概有以下幾個部分:
  1.RTL-SDR驅動安裝
  2.安裝matlab RTL-SDR硬體支持包
  3.支持包的相關使用函數和例程

二、RTL-SDR驅動安裝

在拿到RTL-SDR這個地球上最便宜的sdr設備後(京東上100r,淘寶5 60r左右。我用的是RTL2832U),需要用Zadig軟體安裝一下RTL-SDR的驅動。Zadig請自行下載~一般京東或淘寶的店家會有RTL-SDR的軟體包,包括Zadig和各種版本的SDRSharp軟體(一個很方便觀察無線頻譜的軟體),以及飛機追蹤的套件(很多無線電愛好者喜歡用它嘗試接收1090MHz的民航軌跡信號)。

安裝驅動前,需要將RTL插在電腦的USB口。然後打開Zadig,在Options下點擊List All Devices,並且勾選上Ignore Hubs or Composite parents,注意這裡一定要勾選Ignore這個選項,如果不勾選則安裝的驅動(會出現USB開頭的)雖然可以讓RTL-SDR在SDRSharp等軟體上使用,但是無法在MATLAB平臺上識別到設備。

接下來在下面的選擇框中選擇RTL開頭的驅動,點擊安裝等待即可。

三、安裝matlab RTL-SDR硬體支持包

安裝好RTL的驅動後,在matlab的附加功能-獲取硬體支持包裡找到RTL的支持包Communications Toolbox Support Package for RTL-SDR Radio

安裝這個支持包後,按照指示一步步完成第一次的設備識別。

注意,此時RTL需要一直插在電腦上。

等待識別成功後,在matlab的work space輸入sdrinfo,觀察是否能夠正常識別到RTL設備。

四、在MATALB上使用RTL-SDR

先說一下,RTL-SDR硬體支持包的官方網站 在這個官網上有一本674頁的圖書,裡面有詳細的文檔。

1、FM廣播接收

首先嘗試一下RTL-SDR連接MATLAB正常接收無線信號,對在matlab上調用rtl有一個直觀感受。運行以下代碼觀察頻域是否能接收附近的無線信號,通常我會用FM頻段(在中國FM頻段為87-108MHz)的信號測試SDR的情況,這裡我測試接收91.6MHz處的FM廣播信號:

fc   = 91.4e6; % Center frequency (Hz)FrontEndSampleRate = 1e6;     % Samples per secondFrameLength        = 256*20;  % Frame length % Create receiver and spectrum analyzer System objects  hSDRrRx = comm.SDRRTLReceiver(...    'CenterFrequency', fc, ...    'EnableTunerAGC',  true, ...    'SampleRate',      FrontEndSampleRate, ...    'SamplesPerFrame', FrameLength, ...    'OutputDataType',  'double'); hSpectrum = dsp.SpectrumAnalyzer(...    'Name',             'Passband Spectrum',...    'Title',            'Passband Spectrum', ...    'Method',           'Welch', ...    'SpectrumType',     'Power density', ...    'FrequencySpan',    'Full', ...    'SampleRate',       FrontEndSampleRate, ...    'SpectralAverages', 50, ...    'FrequencyOffset',  fc, ...    'YLimits',          [-80,10], ...    'YLabel',           'Magnitude-squared, dB', ...    'Position',         figposition([50 30 30 40])); %% Stream processing% View spectrum.  While the spectrum analyzer is running, you can measure% peaks, occupied bandwidth, and other properties of the signal.if ~isempty(sdrinfo(hSDRrRx.RadioAddress))    for count = 1 : 5000        [data, ~] = step(hSDRrRx);  % no 'len' output needed for blocking operation        data = data - mean(data);  % remove DC component        step(hSpectrum, data);    endelse    warning(message('sdrbase:sysobjdemos:MainLoop'))end % Release all System objectsrelease(hSDRrRx);release(hSpectrum);

版權聲明:這段代碼修改自Mathworks的官方例程
如果可以觀察到正確的FM信號,則證明可以使用了:

2、RTL-SDR硬體支持包的函數

調用rtl需要先用 comm.SDRRTLReceiver 創建RX對象。具體語法包括:

RXobj = comm.SDRRTLReceiverRXobj = comm.SDRRTLReceiver(Name,Value)RXobj = comm.SDRRTLReceiver(RadioAddress,Name,Value)

但是在實際使用中,如上一節所寫的一樣,我們需要指定RX對象的各種參數,包括中心頻率、採樣率、自動增益控制等等。這個函數所支持的參數有:
RadioAddress — 指定使用哪個USB口的RTL-SDR設備。默認是0。這個值可以用 sdrinfo 來查看。
CenterFrequency — 指定RTL接收無線信號的中心頻率,單位為Hz。默認為102.5MHz。
EnableTunerAGC — 指定是否打開自動增益控制。默認為true。
TunerGain — 指定調諧器的增益。單位為dB。默認為0。注意,如果要手動指定增益,需要將EnableTunnerAGC設置為false。
SampleRate — 指定RTL的採樣率。在matlab上這個支持包上支持的範圍是225~300kHz和900~3200kHz,官方建議設置小於等於2560kHz可以避免失真。
OutputDataType — 指定輸出的數據類型。可選類型有 int16 | double | single 。當選擇輸出int16數據類型時,輸出的是原始的16位IQ數據。默認為int16。
SamplesPerFrame — 指定每幀的採樣數。默認為1024。這裡值得多說一下的是,RTL的RX對象對於每次採樣是採集到到指定的每幀採樣數後完成本次採樣。所以,在實際的連續採樣時,我們需要連續多次調用RX對象進行採樣。那麼,每一次採樣的真實時間為:

FrameTime = SamplesPerFrame / SampleRate

所以在實際的連續採樣中我們可以設置一個runTime作為計時器並不斷更新來控制接收時間。
FrequencyCorrection — 指定頻偏矯正。默認為0,單位為ppm。支持的矯正範圍為-1e4 ~ 1e4。值得注意的是,據我所知,市面上售賣的RTL-SDR的晶振有一些是不帶溫度補償(TCXO)的。
EnableBurstMode — 指定是否開啟突發模式。默認為true。(這個我不太了解具體是什麼,嘗試打開和關閉好像沒發現有什麼區別…)
NumFramesInBurst — 指定連續突發的幀數。默認為10(同樣不太了解應該在什麼情況下使用…)

聲明RX對象例子:

rx = comm.SDRRTLReceiver(...    'CenterFrequency', 120e6, ...    'EnableTunerAGC',  true, ...    'SampleRate',      2.4e6, ...    'SamplesPerFrame', 2048, ...    'OutputDataType',  'int16');

其他參數沒有特殊聲明都是默認值。

調用RX對象的語法包含:

rxdata = RXobj()[rxdata,len] = RXobj()[rxdata,len,lost] = RXobj()[rxdata,len,lost,late] = RXobj()

這裡的RXobj為前面聲明的RX對象名稱,調用時將RXobj替換成你所聲明的對象名稱即可。
對於輸出參數:
rxdata — 採樣的數據值。數據類型、數據長度等與RX對象裡的參數設置一致。
len — 返回有效採樣數據的長度。如果沒有採集到數據,則返回0。
lost — 返回丟失的採樣數據長度。如果是正常運行,則lost返回值為0。
late — 返回幀延遲數量。
對於進行無線實驗,錄製一段信號,我們關注的是rxdata原始數據,所以讓其返回int16類型即可(IQ原始數據)。len、lost、late一般會用於觀察RTL的實時性能,如果出現了數據丟失或者延遲,說明RTL實時運行可能存在問題,這有可能和所使用電腦的CPU、內存、硬碟性能有關。

RX對象函數包含:

step 運行採集數據算法

release 釋放資源,用於修改已有的RX對象的參數

reset 重置RX對象內部狀態

3、錄製無線信號測試

在實際採集數據時,我們可以這樣寫:

recordData = [];for FrameNum = 1 : 100 %想要採集多少幀按照自己的需求    recordData = [recordData RXobj()]; % 或者可以寫成step(RXobj),或是RXobj.step()end

然而,在前面也提到了我們通常錄製一段無線信號更偏向以時間為單位,例如錄製多少秒,以上面這種按幀的方式不便於理解和計時,因此,我們可以這樣寫:

RunTime = 0; % 計時器DurTime = 10; % 這裡我假設需要錄製10秒recordData = [];FrameTime = RXobj.SamplesPerFrame / RXobj.SampleRate;if ~isempty(sdrinfo(hSDRrRx.RadioAddress))    while Runtime < DurTime        recordData = [recordData RXobj()]; % 這裡我將原始數據完全的保存到變量裡了,這樣做其實很費性能...        RunTime = Runtime + FrameTime;    end else    warning(message('sdrbase:sysobjdemos:MainLoop'))end

將原始數據保存到變量裡再做計算是一個非常費性能的操作,以我的Envy 13筆記本為例,CPU為i7-8550U,內存為8G,想要繪製帶寬為2MHz幾秒鐘的無線信號的瀑布圖要等待數十秒……下面是繪製一段91.6MHz的FM信號,時間長為3.5秒的頻譜圖的結果。繪製這張圖讓我的matlab卡了大概20多秒,想要再修改一下坐標軸直接卡死…所以只截圖了不帶坐標軸的地方…(我都玩rtlsdr了 還指望我能用上什麼好電腦-.-)

4、連續掃頻測試

雖然RTL的帶寬很小,但是這個支持包的開發者提供的樣例程序裡給出了一個從25MHz到1750MHz的掃頻代碼…我嘗試運行了一下,確實能掃頻…只能說一句牛逼了

我在房屋內進行了兩次25MHz~1750MHz的掃頻測試,下面分別是兩次的掃頻結果:

在這兩次測試中,RTL的採樣率設置為2.8MHz,FrameLength為4096,Tuner的增益為40dB。由於帶寬實在是太低了,兩次測試的實際運行時間分別為287.4292s和411.5904s。第二次可能是因為我調用了matlab的代碼追蹤,讓整體的運行時間更加長了-.-

關於掃頻的代碼,由於我幾乎沒有修改原作者的代碼,就不便放上來了,感興趣的同學可以在開發團隊的官網下載,具體位置在../Software_Defined_Radio_using_MATLAB_Simulink_and_the_RTL-SDR___book_and_support_files/spectrum/sweep下的rtlsdr_rx_specsweep.m文件。

五、總結

RTL-SDR這個地球上最便宜沒有之一的軟體無線電設備,是很多人接觸、入門無線領域的第一個設備,我個人認為從RTL開始接觸學習無線通信&無線安全等方面是一個非常好的選擇,在一些情況下用RTL會比用usrp更容易攜帶和隨時測試(當然,RTL是不可能碰瓷usrp的高性能的)。從安全角度,很多無線竊聽的攻擊需要無線設備的隱蔽性和可攜帶性,例如TEMPEST竊聽和GSM竊聽等,RTL是一個很好的選擇(!我不是推薦實施惡意攻擊0.0 只是看到很多這麼做實驗的…)

寫這篇教程的想法是因為在折騰RTL的時候,一直用的是HDSDR,SDR#,GNU Radio這些軟體。但是我個人的一些實驗需求需要在matlab進行一些計算,從其他軟體上錄製後再導入到matlab進行計算實在麻煩(雖然似乎可以單獨開一個埠傳輸採集的數據),就考慮直接在matlab上控制RTL來採集信號和計算了。然而在網上能看到的教程少之又少,matlab官網關於這個支持包也只給出了基本的函數描述,中文網際網路上沒有更多的資料了,就把我踩過的坑寫寫以拋磚引玉~ 有一說一這個硬體支持包的坑還是有點的,比如每次採集數據是按照每幀大小採集的,matlab的官網上的描述又沒有給出如何採集確定秒數的數據等。

在折騰這個RTL-SDR硬體支持包中,很多資料來源於原開發團隊的官方圖書《Software Defined Radio using MATLAB® & Simulink® and the RTL-SDR》,這本圖書在官網有電子版下載,以及他們給出的很多例程代碼,都是可以免費下載的。

關於RTL-SDR在matlab上的使用我還參考了一些其他但不限於以下的資料:

* matlab官方文檔
* RTL-SDR在matlab上解碼無線信號白皮書
* desktopSDR-paper這是原作者團隊於2015年發表在IEEE Communications Magazine上的一篇關於這個支持包的文章
* desktopSDR官網

About The Author of this blog:Sund

wireless side-channel / air-gapped attack / covert communication / wireless sensing

歡迎大家關注本文作者的博客http://www.sund-xys.cn/。

相關焦點

  • GSM HACK的另一種方法:RTL-SDR
    於是他拉起褲子,開始了進一步的研究…以上文字有所演繹,真實歷史請參見:http://rtlsdr.org/#history_and_discovery_of_rtlsdr該電視棒PBC板裸照再後來這些老外就開發了很多基於這塊晶片、專門用於玩SDR的usb外設,統稱為:RTL-SDR DONGLES。
  • SDR技術原理深入解析
    通俗來講,SDR就是基於通用的硬體平臺上用軟體來實現各種通信模塊。概念中有兩個關鍵詞,「通用硬體平臺」和「軟體」。「通用硬體平臺」就是說我們能基於這個硬體平臺實現各種各樣的通信功能,而不是說一個硬體平臺只能實現一種通信功能。
  • MATLAB R2020b for Mac安裝包下載Matlab安裝教程Mac版支持M1晶片
    安裝包在文章底部matlab 2020b作為商業數學計算行業領域的專業化軟體,一直深受喜愛,matlab R2020b可以幫助工程師和科學家們快速分析和設計各類系統和產品
  • S^2: SDR技術原理深入解析
    通俗來講,SDR就是基於通用的硬體平臺上用軟體來實現各種通信模塊。概念中有兩個關鍵詞,「通用硬體平臺」和「軟體」。「通用硬體平臺」就是說我們能基於這個硬體平臺實現各種各樣的通信功能,而不是說一個硬體平臺只能實現一種通信功能。
  • Matlab 2017a 安裝教程
    下面就帶來Matlab 2017a 安裝圖文教程。1.右擊解壓如圖所示下載的安裝包2.右擊setup.exe以管理員身份運行3.選中第二個使用文件安裝密匙,然後點擊下一步進行安裝13.選擇在不使用Internet的情況下手動激活
  • Matlab 2018a中文版軟體下載和安裝教程
    >Matlab R2018a(64位)下載連結:https://pan.baidu.com/s/1nBeHrPZFwyDrtiQGXPR0dA提取密碼:ywge 軟體簡介:MATLAB是由美國MathWorks公司出品的商業數學軟體,這是一款可專業分析數據的軟體,軟體的功能性十分強大,新版matlab
  • matlab vs R
    最大的不同在於賦值問題:matlabRx = 5:10x  <- 5:10matlab 採用等號完成賦值操作,雖然 R 語言支持使用等號完成賦值,但遵循 R 的傳統以及大多數用戶的習慣,我們仍然以 <- 作為變量賦值使用,而等號用於參數的賦值以及創建數據框過程中。
  • 建議收藏 ▏新手簡明入門級matlab使用教程
    使用方法是在home標籤下點擊simulink。有個Help標誌,點開後可以獲得各工具箱/產品的完整幫助文檔。新版本中默認使用在線,改用本地幫助的辦法是在home標籤裡,Preferences下的matlab/Help裡選擇installed locally
  • 支持向量機(svm)原理及其matlab實現
    支持向量機理論推導                                                  (此圖片來源於網絡)為了便於理解與說明,以二維平面為例。支持向量機的matlab代碼實現。
  • b站上matlab教程推薦
    1、在澳洲讀書的小哥自己錄製的課程--《MATLAB入門教程》https://space.bilibili.com/24014925#/channel/detail?cid=12575已更新9期,小哥講解耐心,聲音好聽,示例清晰,還會穿插著講一點簡單的原理算法。
  • MATLAB簡單粗暴教程(十二)——MATLAB常見錯誤提示
    這一篇文章暫時先簡單介紹一下matlab中常見的錯誤神馬的,算是一個小tips,希望能夠對大家平時的學習神馬的起到幫助。        有很多人問我寫這些教程是為了什麼,我說只是我想寫而已。人貴有自知之明,我知道我寫的不好,也知道沒多少人感興趣,沒多少人願意看,沒多少人感覺這個真的有用,但是我還是會寫下去,哪怕只有一個人感覺到有幫助,有作用,有提高,我也認為我的付出是值得的。
  • 講座回顧:Matlab使用教程
    12月13日晚19:30,Matlab使用教程講座在學院樓323如期舉行。本次講座的主講人是來自大二的王海誠同學,他主要從基礎知識、矩陣運算、流程控制和作圖四個方面展開,介紹了Matlab的使用方法。Matlab是以矩陣運算為基礎的程式語言,它只有一種輸入和輸出形式:矩陣。
  • SAS和SPSS軟體安裝包及軟體教程下載
    今天i塔尖給大家帶來了兩款統計軟體的介紹,分別是:SAS軟體和SPSS軟體點擊左下角閱讀原文可以下載這兩款軟體的安裝包和教程:
  • Python是這樣調用matlab程序的!
    常見的一種應用情形是,使用Python快速生成程序的原型(有時甚至是程序的最終界面),然後對其中 有特別要求的部分,用更合適的語言改寫,比如3D遊戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫,而後封裝為Python可以調用的擴展類庫。需要注意的是在您使用擴展類庫時可能需要考慮平臺問題,某些可能不提供跨平臺的實現。
  • RPCS3模擬器-PS3模擬器詳細使用教程-模擬器使用教程001
    接下來詳細介紹RPCS3在Windows(推薦Win10 64位)和Linux(這裡介紹比較流行的Ubuntu發行平臺)桌面環境的使用教程最新版RPCS3簡體中文模擬器可以回復獲取1、RPCS3配置要求上訴表格只是列舉了大概配置,根據不同遊戲
  • Matlab R2019a下載安裝!
    Matlab R2019a新增功能:1.與MATLAB R2018b 相比,主要改進在實時編輯器2.可以導出為word3.sortrows對於大型矩陣速度更快4.min和max函數添加了『linear』選項;支持python 3.75.C++ API支持第三方庫
  • MATLAB 2017a中文版軟體下載和安裝教程|兼容WIN10
    MATLAB 2017a新版不僅對圖形、數據導入和導出及語言和編程進行了增強,同時還更新了實時編輯器的交互式圖形,增強了硬體支持以讓各類數學或者科研人員可以輕鬆地進行計算和分析等操作。(僅供學習交流使用) 安裝前須知:1.安裝全程須斷開網絡,否則破解不成功;2.解壓和安裝前先關閉360、騰訊管家等殺毒軟體,防止誤殺破解補丁,導致破解失敗;3.Matlab 2017b適用於WIN7/8/10(64位)系統,親測可用!
  • MATLAB 2018b for Mac 下載及安裝教程
    本文提供了適用於Mac OS系統的免費版本MATLAB R2018b Mac,如需正版軟體,可以使用教育郵箱前往官網進行申請。安裝激活精心整理了MATLAB R2020a Mac軟體的安裝、激活教程,安裝教程PDF文檔,放在了安裝包內。
  • 全站儀使用教程培訓講義,圖文講解詳細,限時領取
    全站儀使用教程培訓講義,圖文講解詳細,限時領取全站儀即全站型電子速測儀。全站儀的硬體功能全站儀的用途及工作原理全站儀常見機載應用程式種類全站儀必備的硬體功能全站儀的兩種測距方式內容摘要1、全站儀的兩種測距方式2、全站儀的應用
  • Matlab教程:nc文件的打開和使用m_map繪製海溫圖
    在大氣科學中,matlab可以用於小規模的科學計算,也可以繪製各類氣象圖,做各種統計運算,功能強大。