GNU Radio是一個開源的軟件無線電開發平臺,可以通過圖形化界面或C++、Python等文本語言快速開發軟件無線電應用,本文介紹了Linux下GNU Radio平臺的搭建及如何在該平臺下使用NI USRP設備。
1. 概念性描述
USRP設備需要固件(firmware image)和FPGA鏡像(FPGA image)且版本一致才能正常工作,此二者與上位機使用何種環境:Windows還是Linux無關,即:同一套固件和鏡像不需要更換可在Windows LabVIEW及Linux GNU Radio下使用。
圖1 兩套環境對比
在Windows系統下操作時,可通過NI-USRP Configuration Utility 軟件進行固件與FPGA鏡像的寫入/更新,如圖2 。這樣,USRP設備就能通過NI-USRP驅動與上位機通信。
圖2 NI-USRP Configuration Utility – N2xx/NI-29xx Image Updater
而在Linux GNU Radio下,UHD驅動代替了NI-USRP驅動的工作 。可以通過運行 uhd_images_downloader 從網上下載鏡像到本地,uhd_image_loader 更新鏡像,之后會詳細描述。
2. 環境搭建
2.1 安裝Ubuntu系統
我們常用的電腦都是Windows系統的,有兩種方法在電腦上運行Linux。第一種方法是安裝雙系統,第二種方法是安裝虛擬機并在虛擬機中安裝Linux,由于方法二不需要額外分區、更改BIOS等操作、在操作不當時也不會導致Windows的崩潰,因此選用方法二。
這里使用了常見的虛擬機軟件 VMware Workstation。在以下鏈接中可以下載Ubuntu 16.04:https://www.ubuntu.com/download/desktop Ubuntu是一個Linux常用的發行版。下載到的文件是Ubuntu系統的鏡像.iso文件,在VMware中選擇File – New Virtual Machine 按照提示一步步點擊下一步即可,在配置虛擬機硬件時,CPU數及CPU核心數與實際CPU一致即可,內存可設的稍大一些,我設置了8G內存(共16G物理內存),硬盤設置40G(裝完Ubuntu系統、安裝完GNU Radio的所有依賴軟件后實際使用了8.1G)。
啟動虛擬機,按照第一次啟動向導簡單配置Ubuntu,進入桌面后點擊左上角的圖標,搜索terminal即命令行工具,如圖3 。
圖3 找到Ubuntu的命令行工具
打開命令行工具,輸入
sudo passwd回車
設置管理員(Supper User)密碼即root密碼,在用戶設置密碼之前,Ubuntu每次開機會產生一個隨機的root密碼。注意,輸密碼時不會顯示“****”,而是什么字符也不顯示,這一點和我們一般的認知很不一樣!
系統提示再次輸入密碼,第二次輸入密碼并確認、兩次一致后密碼設置成功。接下來輸入
sudo apt-get update回車
更新源,會提示輸入管理員密碼,輸入剛才設置的管理員密碼后點回車。之后輸入(或復制粘貼,請勿使用Ctrl C + V的快捷鍵,而是鼠標右鍵在命令行窗口中單擊 – 選擇paste)
sudo apt-get -y install git swig cmake doxygen build-essential libboost-all-dev libtool libusb-1.0-0 libusb-1.0-0-dev libudev-dev libncurses5-dev libfftw3-bin libfftw3-dev libfftw3-doc libcppunit-1.13-0v5 libcppunit-dev libcppunit-doc ncurses-bin cpufrequtils python-numpy python-numpy-doc python-numpy-dbg python-scipy python-docutils qt4-bin-dbg qt4-default qt4-doc libqt4-dev libqt4-dev-bin python-qt4 python-qt4-dbg python-qt4-dev python-qt4-doc python-qt4-doc libqwt6abi1 libfftw3-bin libfftw3-dev libfftw3-doc ncurses-bin libncurses5 libncurses5-dev libncurses5-dbg libfontconfig1-dev libxrender-dev libpulse-dev swig g++ automake autoconf libtool python-dev libfftw3-dev libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77 libsdl1.2-dev python-wxgtk3.0 git-core libqt4-dev python-numpy ccache python-opengl libgsl-dev python-cheetah python-mako python-lxml doxygen qt4-default qt4-dev-tools libusb-1.0-0-dev libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools python-qwt5-qt4 cmake git-core wget libxi-dev gtk2-engines-pixbuf r-base-dev python-tk liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libzmq-dev libzmq1 python-requests python-sphinx libcomedi-dev python-zmq回車
大約會下載1個多G的依賴庫和軟件。等待其下載完成后,下載編譯安裝UHD驅動。
2.2 安裝UHD驅動
UHD驅動是以源碼形式提供的。在命令行中輸入
git clone https://github.com/EttusResearch/uhd回車
會將uhd源碼拷貝到HOME路徑下,轉到該路徑并新建build目錄
cd uhd回車
cd host回車
mkdir build回車
cd build回車
輸入
cmake 。./回車
產生Makefile,輸入
make回車
編譯源碼,大約需要10-30min時間,可以通過開啟多線程編譯可大大縮短編譯時間,用make -j4 代替make即可,就會啟用4個線程同時編譯,但也不是越多越好,一般和計算機CPU線程數或虛擬機CPU線程數一致即可。如編譯中途死機(虛擬機可能會出現、由于內存不足),重新來過時會接著之前的編譯進度繼續。之后安裝編譯成功的庫,輸入
make test回車
sudo make install回車
更新共享庫和環境變量
sudo ldconfig回車
export LD_LIBRARY_PATH=/usr/local/lib回車
此時UHD驅動已經安裝完畢,可通過輸入
uhd_find_devices回車
查看驅動的版本,若在同一子網中已有USRP設備,可看到USRP設備的信息,如圖4
圖4 驗證UHD安裝情況
一個小技巧:在輸入上條命令時輸入uhd_fin之后按Tab鍵看看會發生什么……自動填充!對于輸一些比較長的命令時可以通過自動填充功能降低拼寫錯誤,省時省力。
在找到設備的情況下,可運行以下程序查看CDMA移動電話的上行頻譜
uhd_fft -a addr=10.144.97.123 -f 835M -s 10M回車
圖5 UHD FFT測試程序
注意,若USRP中的鏡像和UHD版本不匹配的話,無法直接運行上述測試程序,可以通過更新firmware image 和 FPGA image使之匹配。更新方法見第3節。
2.3 安裝GNU Radio
安裝GNU Radio與安裝UHD驅動的步驟類似。
首先回到home路徑
cd $HOME回車
之后下載GNU Radio源碼
git clone --recursive https://github.com/gnuradio/gnuradio回車
下載完成后新建build目錄
cd gnuradio回車
mkdir build回車
cd build回車
生成Makefile并編譯安裝
cmake 。./ 回車
make回車
make test回車
sudo make install回車
sudo ldconfig回車
完成后,可以測試安裝是否正確,輸入
gnuradio-companion回車
GNU Radio 開發環境應當可以正確打開。至此,環境搭建完成[3] 。
3. 運行一個GNU Radio程序
3.1 修改USRP IP地址并連接
這里使用的是USRP-2922,USRP設備使用固定IP,默認IP是192.168.10.2 。首先將USRP設備通過網線直連至PC,設置PC的ip為192.168.10.1,子網掩碼255.255.255.0,在Windows下可通過NI-USRP Configuration Utility軟件修改USRP設備的IP。在本次驗證中,使用了超過1臺的USRP,需要通過交換機和上位機通信,在處于同一個子網的PC上查看PC的IP地址:windows徽標鍵+R -》 輸入cmd回車 -》 輸入ipconfig回車,找到自己的本地網卡的IPv4地址,如10.144.97.17,將兩臺USRP的IP設置到同一個子網下,如10.144.97.123和10.144.97.124 。
在Linux下可通過以下方法修改設備IP [4] ,cd 到/usr/local/lib/uhd/utils目錄下,運行
sudo 。/usrp2_recovery.py --ifc=eth0 --new-ip=10.144.97.123回車
以上方法需要防火墻允許UDP廣播。需要注意的是,在虛擬機中運行Linux的話,需要將虛擬機的網卡配置為直連或者與主機共用IP。
圖6 虛擬機網卡配置
設置IP后,可以ping一下USRP,命令行輸入:
ping 10.144.97.123回車
此時應當看到ping通的信息,按Ctrl + Z可以退出ping的狀態。
3.2 更新firmware image和FPGA image
如開篇所述,這兩個鏡像在Windows和Linux下是通用的,只要版本和驅動版本一致即可。NI-USRP 15.5提供的鏡像和UHD 3.11.0提供的鏡像是一致的。如果你的USRP在Windows下更新過鏡像,可以跳過這一步。
在Ubuntu命令行中輸入:
sudo uhd_images_downloader回車
這樣可以自動地將網絡上合適的鏡像下載到本地計算機中。
再輸入
uhd_image_loader --args=“type=usrp2,addr=,reset”回車
將鏡像下載到USRP設備中并重啟設備,這里的鏡像是自動選擇版本的。
3.3在GNU Radio中編程
首先,在命令行中輸入
gnuradio-companion回車
運行GNU Radio開發環境,該環境也是使用圖形化模塊編程的,詳細使用教程可以在網絡上搜索。這里可以編寫一個程序,在兩臺USRP-2922之間傳文件。使用隨機自帶的天線,工作在915M ISM頻段上。也可通過衰減器將兩個USRP的TX/RX接口直連。注意:使用USRP發射無線電信號需遵守當地相關法律法規。
圖7 一個GRC程序
圖8 程序運行界面
圖9 程序運行結果
責任編輯:gt
-
FPGA
+關注
關注
1630文章
21798瀏覽量
606056 -
Linux
+關注
關注
87文章
11345瀏覽量
210411 -
無線電
+關注
關注
60文章
2149瀏覽量
116815
發布評論請先 登錄
相關推薦
評論