基于GNU Radio和USRP的認知無線電平臺研究
X400 子板,它的接收范圍是 400M-500MHz,可以在 400M-500M 內(nèi)選定任意范圍進行檢測,對所檢測頻段使用情況,能在可控制的時間內(nèi)記錄到文件中,并可通過圖形顯示出來。
4.2 能量檢測 FFT 方法
FFT是離散傅立葉變換的快速算法,可以將一個信號變換到頻域。有些信號在時域上是很難看出什么特征的,但是如果變換到頻域之后,就很容易看出特征了。這就是很多信號分析采用 FFT 變換的原因。另外,F(xiàn)FT 可以將一個信號的頻譜提取出來,這在頻譜分析方面也是經(jīng)常用的。得到了信號的頻域變換后,就可以對其進行模值運算得出某頻率值下的幅度特性。
一個模擬信號,經(jīng)過 ADC 采樣之后,就變成了數(shù)字信號。采樣得到的數(shù)字信號,就可以做 FFT 變換了。N 個采樣點,經(jīng)過 FFT 之后,就可以得到 N 個點的 FFT 結(jié)果。為了方便進行 FFT 運算,通常 N 取 2 的整數(shù)次方。假設(shè)采樣頻率為 Fs,信號頻率 F,采樣點數(shù)為 N。那么 FFT 之后結(jié)果就是一個為 N 點的復(fù)數(shù)。每一個點就對應(yīng)著一個頻率點。這個點的模值,就是該頻率值下的幅度特性。具體跟原始信號的幅度有什么關(guān)系呢?假設(shè)原始信號的峰值為 A,那么 FFT 的結(jié)果的每個點(除了第一個點直流分量之外)的模值就是 A 的 N/2 倍。而第一個點就是直流分量,它的模值就是直流分量的 N 倍。而每個點的相位,就是在該頻率下的信號的相位。第一個點表示直流分量(即 0Hz),而最后一個點 N 的再下一個點(實際上這個點是不存在的,這里是假設(shè)的第 N+1 個點,也可以看做是將第一個點分做兩半分,另一半移到最后)則表示采樣頻率 Fs,這中間被N-1 個點平均分成 N 等份,每個點的頻率依次增加。例如某點 n 所表示的頻率為:Fn=(n-1)*Fs/N。由上面的公式可以看出,F(xiàn)n 所能分辨到頻率為為 Fs/N,如果采樣頻率Fs 為 1024Hz,采樣點數(shù)為 1024 點,則可以分辨到 1Hz。1024Hz 的采樣率采樣 1024 點,剛好是 1 秒,也就是說,采樣 1 秒時間的信號并做 FFT,則結(jié)果可以分析到 1Hz,如果采樣 2 秒時間的信號并做 FFT,則結(jié)果可以分析到 0.5Hz。如果要提高頻率分辨力,則必須增加采樣點數(shù),也即采樣時間。頻率分辨率和采樣時間是倒數(shù)關(guān)系。
假設(shè) FFT 之后某點 n 用復(fù)數(shù) a+bi 表示,那么這個復(fù)數(shù)的模就是
,相位就是 Pn=atan2(b,a)。根據(jù)以上的結(jié)果,就可以計算出 n 點(n≠1,且 n<=N/2)對應(yīng)的信號的表達式為:An/(N/2)*cos(2*pi*Fn+Pn),即 2*An/N*cos(2*pi*Fn+Pn)。對于 n=1 點的信號,是直流分量,幅度即為 A1/N。
由于 FFT 結(jié)果的對稱性,通常我們只使用前半部分的結(jié)果,即小于采樣頻率一半的結(jié)果,即可以是前向 FFT 也可以是后向 FFT,前向、后向各一半結(jié)果。
由此可知:假設(shè)采樣頻率為 Fs,采樣點數(shù)為 N,做FFT 之后,某一點 n(n 從 1 開始)表示的頻率為:Fn=(n-1)*Fs/N;該點的模值除以 N/2 就是對應(yīng)該頻率下的信號的幅度(對于直流信號是除以 N);該點的相位即是對應(yīng)該頻率下的信號的相位。相位的計算可用函數(shù) atan2(b,a)計算。atan2(b,a)是求坐標(biāo)為(a,b)點的角度值,范圍從-pi 到 pi。要精確到 xHz,則需要采樣長度為 1/x 秒的信號,并做 FFT。要提高頻率分辨率,就需要增加采樣點數(shù),這在一些實際的應(yīng)用中是不現(xiàn)實的,需要在較短的時間內(nèi)完成分析。解決這個問題的方法有頻率細分法,比較簡單的方法是采樣比較短時間的信號,然后在后面補充一定數(shù)量的 0,使其長度達到需要的點數(shù),再做 FFT,這在一定程度上能夠提高頻率分辨力。
4.3 能量檢測實現(xiàn)
4.3.1GNU Radio 的 USRP 初始化設(shè)置
需要搭建基于GNU Radio的FFT頻譜檢測器,我們就需要正確的初始化配置USRP,建立流圖,搭建起 FFT 運算的軟件無線電結(jié)構(gòu)。
初始化配置 USRP,需要使用 GNU Radio 中的 usrp.py 模塊,這個模塊包含輸入輸出初始化設(shè)置、ADC 采樣速率、功率、增益、載頻等。基本上所有關(guān)于配置 USRP 的子函數(shù)都需要重載 usrp.py 來配置。具體見下表:
usrp.py函數(shù)是所有 GNU Radio 控制 USRP 的程序都要用到的初始化函數(shù),它們控制 usb 接口、fpga 程序、ADC、DAC、子板,跟硬件打交道的程序都可以從這個函數(shù)的子函數(shù)找到控制方法。
source_x()和 sink_x()則是 usrp.py 中最基本的子函數(shù),它們是流圖的開始或者結(jié)束,由它們我們可以初始化 USRP 為接受器或者發(fā)射器,而且一個 USRP 通過時分復(fù)用可以復(fù)用為雙工收發(fā)器。
按照表的函數(shù)應(yīng)用舉例,我們設(shè)置 USRP 為接收狀態(tài),nchan=2 這樣我們可以同時獲得兩個子板的信息,同時對 400M 和 2.4G 頻段進行掃頻。其余設(shè)置均為默認狀態(tài),由此可得知:
adc_rate= 64 MS/s
usrp_decim= 64
usrp_rate= adc_rate / usrp_decim = 1 MS/s
4.3.2 FFT 能量檢測流圖
由上一小節(jié) FFT 的原理,我們可以得出 FFT 計算結(jié)果的意義,可對其進一步處理達到我們的需求。GNU Radio 自帶庫有 FFT 模塊,在設(shè)置好 USRP 并正確的建立流圖,然后將得到的結(jié)果通過計算途徑處理,最終得到我們需要的功能——大范圍的能量檢測。
因為 USRP 帶寬的限制,一個時間內(nèi)前端只能檢測到 8MHz 的射頻信號如果要檢測大于 8MHz 帶寬的信號我們需要通過不斷的 RF 前端步進調(diào)頻以達到檢測大范圍頻譜的目的,雖然檢測到的頻譜并不是實時的。USRP(或者程序)每個時刻對一段范圍的頻率進行檢測,然后步進調(diào)頻到下一段頻率,這樣就能掃頻掃過大段的頻率。
要是頻率調(diào)頻已經(jīng)完成步進調(diào)頻,我們需要在每一個步進時刻結(jié)束時——即已獲得這段頻率的數(shù)值時,發(fā)送一個調(diào)頻指令到 USRP。調(diào)頻控制由 gr.bin_statistics_f sink 程序?qū)崿F(xiàn),bin_statistics 在以下的函數(shù)解釋中有詳細解釋。
當(dāng)我們命令 USRP 的 RF 子板改變中心頻率時,我們必須等待 ADC 的采樣到達 FFT處理器并判斷完是否屬于需要的中心頻率。在這個過程中需要經(jīng)過很多重的延時比如從FPGA,USB,計算延時。這樣我們必須在調(diào)節(jié)到下一步進頻率時進行延時,以保證上一步進頻率的采樣能正確的被 FFT 處理器處理。
程序主要驅(qū)動部分由 bin_statistics sink 函數(shù)組成。整個流程如圖 4-3
bin_statistics主要控制 USRP 的調(diào)頻控制,并根據(jù)步進頻率帶寬的大小決定延時時間即 FFT 處理器忽略掉 N 個向量(向量長度由計算決定)這里也可以詳細解釋,當(dāng)進行完 FFT 處理后,bin_statistics 將處理后的信息組合成 message,并將此 message 插入message queue。message 的每個內(nèi)容由 FFT 后的每個最大頻率的向量組成。
每一步進的延時需要計算得出,延時包括調(diào)頻延時和計算延時,其中調(diào)頻延時是最主要的延時。
調(diào)頻延時由 RF 前端的 PLL 到主板的時間再加上管道中排隊的時間,我們所用的RFX 系列延時差不多是 1ms。
調(diào)頻延時轉(zhuǎn)化為 FFT 計算時忽略的向量個數(shù)的計算公式是
tune_delay_passed_to_bin_statistics=
int(round(required_tune_delay_in_sec*usrp_rate/fft_size))
其中:
required_tune_delay_in_sec= 10e-3 ;usrp_rate = 1M (decimation =64);
fft_size= 256
可得出tune_delay_passed_to_bin_stats = 4 (FFT Frames)
這表示,我們延時 1ms 我們將跳過 4 個輸入的 FFT 向量個數(shù),來獲得真實的向量數(shù)據(jù)。延時時間還包括計算延時,我們需要收集處理 N 個 FFT 采樣,如果 DR=8 那將用時 128us,還應(yīng)該加上計算機處理這 N 個采樣的時間,這個需要根據(jù)實際計算機的處理能力通過實驗測得。
本實驗平臺設(shè)置步進頻率為 3MHz,設(shè)置 3M 是為了能盡可能精確的對小范圍的頻率進行能量測算,而我們通信時占用的頻寬也大概是 2M 多,加上半衰保護,差不多即是 3M。而且步進頻率 3M 可節(jié)省每一步進的運算時間,是個均衡的選擇。這樣 USRP及相關(guān)程序的初始化就完成了。
以下是完成 FFT 運算的流圖,其搭建一個完整的軟件無線電結(jié)構(gòu),數(shù)據(jù)最終寫入message。流圖如下圖:
4.3.3 實現(xiàn)結(jié)果
總結(jié)如下,受制于 USB 總線的約束,USRP 不能檢測超過 8MHz 的帶寬(USRP 的USB2.0 最大數(shù)據(jù)傳輸速率為 32M Bytes/S,每個實采樣點占用 2 個 B