用 FPGA 產(chǎn)生高斯白噪聲序列的一種快速方法
0 引言
短波信道存在多徑時(shí)延、多普勒頻移和擴(kuò)散、高斯白噪聲干擾等復(fù)雜現(xiàn)象。為了測(cè)試短波通信設(shè)備的性能,通常需要進(jìn)行大量的外場(chǎng)實(shí)驗(yàn)。相比之下,信道模擬器能夠在實(shí)驗(yàn)室環(huán)境下進(jìn)行類似的性能測(cè)試,而且測(cè)試費(fèi)用少、可重復(fù)性強(qiáng),可以縮短設(shè)備的研制周期。所以自行研制信道模擬器十分必要。
信道模擬器可選用比較有代表性的 Watterson 信道模型 ( 即高斯散射增益抽頭延遲線模型 ) ,其中一個(gè)重要環(huán)節(jié)就是快速產(chǎn)生高斯白噪聲序列,便于在添加多普勒擴(kuò)展和高斯白噪聲影響時(shí)使用。傳統(tǒng)的高斯白噪聲發(fā)生器是在微處理器和 DSP 軟件系統(tǒng)上實(shí)現(xiàn)的,其仿真速度比硬件仿真器慢的多。因此,選取 FPGA 硬件平臺(tái)設(shè)計(jì)高斯白噪聲發(fā)生器可以實(shí)現(xiàn)全數(shù)字化處理,同時(shí)測(cè)試費(fèi)用少、可重復(fù)性強(qiáng)、實(shí)時(shí)性好、速度快,能較好地滿足實(shí)驗(yàn)需求。
本文提出了一種基于 FPGA 的高斯白噪聲序列的快速產(chǎn)生方案。該方案根據(jù)均勻分布和高斯分布之間的映射關(guān)系,采用適合在 FPGA 中實(shí)現(xiàn)的折線逼近法。該方法實(shí)現(xiàn)簡(jiǎn)單,快速且占用的硬件資源少,而且采用 VHDL 語言編寫,可移植性強(qiáng),并可靈活地嵌入調(diào)制解調(diào)器中使用。
1 均勻分布隨機(jī)數(shù)發(fā)生
1.1 m 序列發(fā)生器
偽隨機(jī)噪聲具有類似隨機(jī)噪聲的一些統(tǒng)計(jì)特性,且便于重復(fù)產(chǎn)生和處理,因此獲得了廣泛的應(yīng)用。 m 序列就是一種常用的偽隨機(jī)序列,該序列又被稱作最長(zhǎng)線性反饋移存序列。 m 序列是由線性反饋移位寄存器產(chǎn)生的周期最長(zhǎng)的一種序列。如果選用 n 級(jí)線性反饋移位寄存器,則 m 序列的周期為 (2n-1) 。對(duì)于 m 序列來說,將 n 級(jí)線性反饋移位寄存器狀態(tài)看成無符號(hào)整數(shù),則狀態(tài)的取值范圍為 1 ~ (2n-1) ,并且在 m 序列的一個(gè)周期內(nèi),移位寄存器的每種狀態(tài)都會(huì)出現(xiàn)且只出現(xiàn)一次,但要注意線性反饋移位寄存器的初始狀態(tài)設(shè)定為非零值,并且在給定任意非零初始狀態(tài)時(shí), m 序列的周期都不變。顯然,移位寄存器的狀態(tài)值是服從均勻分布隨機(jī)數(shù)。制作 m 序列發(fā)生器時(shí),線性反饋移位寄存器的反饋線連接情況可通過查找本原多項(xiàng)式來得到 ( 系數(shù)為 1 表示對(duì)應(yīng)位有反饋線連接,為 0 表示對(duì)應(yīng)位無反饋線連接 ) 。所以,線性反饋移位寄存器反饋線的數(shù)目以及模 2 加法器的數(shù)目直接決定于本原多項(xiàng)式的項(xiàng)數(shù)。為降低硬件資源的消耗,設(shè)計(jì)時(shí)可選取項(xiàng)數(shù)少的本原多項(xiàng)式。為了使偽隨機(jī)序列的周期足夠長(zhǎng)以滿足設(shè)計(jì)要求,采用的本原多項(xiàng)式為: x18+x7+1 ,即用一個(gè) 18 級(jí)線性反饋移位寄存器就可產(chǎn)生周期為 (218-1) 的 m 序列。其連線如圖 1 所示。
1.2 降低相關(guān)性模塊
高斯白噪聲信號(hào)是一個(gè)隨機(jī)過程,每個(gè)樣值點(diǎn)都是一個(gè)高斯變量,其雙邊功率譜密度為常數(shù) N0 / 2 ,即:
由 (2) 式可見,高斯白噪聲在任意兩個(gè)不同時(shí)刻的采樣信號(hào)是統(tǒng)計(jì)獨(dú)立的。但是,從 m 序列的產(chǎn)生過程可見,每個(gè)時(shí)鐘周期中,線性反饋移位寄存器只移出一個(gè)最高位,并反饋一個(gè)值給最低位,所以,相鄰的幾個(gè)狀態(tài)之間不是完全獨(dú)立的。這必然影響高斯白噪聲任意兩個(gè)不同時(shí)刻采樣信號(hào)之間的獨(dú)立性。所以要進(jìn)行非相關(guān)性操作。為了減小相關(guān)性,通常的方法是產(chǎn)生高斯序列后再接一個(gè)交織器,把高斯序列出現(xiàn)的前后順序打亂。但建交織器要占用 FPGA 的硬件資源,所以,本設(shè)計(jì)不采用交織器。
考慮到 m 序列的周期為 (2n-1) ,第 2n 個(gè)值往后都是不斷重復(fù)第 1 個(gè)到第 (2n-1) 個(gè)狀態(tài)。所以只要線性反饋移位寄存器每隔 r 個(gè)同步時(shí)鐘 ( 其中 r=2i , i 為整數(shù) ) 輸出一個(gè)狀態(tài)值 ( 即線性反饋移位寄存器每變換 r 個(gè)狀態(tài)輸出一次狀態(tài)值 ) ,就能在不改變 m 序列原有周期的情況下減小相關(guān)性,且不增加硬件資源的消耗。但要注意: r 一定要是 2 的冪,這樣才能保證 m 序列的周期不變。
2 均勻分布向高斯分布的轉(zhuǎn)換
2.1 均勻分布和高斯分布之間的映射關(guān)系
設(shè) X 服從 [1 , 218-1] 區(qū)間內(nèi)的均勻分布; Y 服從均值為 0 、方差為 1 的標(biāo)準(zhǔn)正態(tài)分布,那么,考慮到高斯分布的實(shí)際情況, Y 僅在 [-4 , 4] 之間取值即可。 Y 的概率密度函數(shù)為:
2.2 折線逼近法
如果直接應(yīng)用上述映射關(guān)系進(jìn)行均勻分布向高斯分布的轉(zhuǎn)換,則需開辟 (218-1) 個(gè)物理空間來建立查找表,這幾乎不可能實(shí)現(xiàn)。但由圖 2 可見,其關(guān)系曲線在很大區(qū)間上表現(xiàn)出線性關(guān)系,所以,可以以斜率不同的直線段分段逼近關(guān)系曲線。在一定精度要求下,該方法簡(jiǎn)單易行,占用硬件資源少,適合在 FPGA 中實(shí)現(xiàn),從而實(shí)現(xiàn)由服從均勻分布向服從高斯分布的快速轉(zhuǎn)換。圖 3 是關(guān)系曲線 ( 實(shí)線 ) 和 15 段折線逼近法 ( 虛線 ) 的擬合圖,由圖可見,其實(shí)線和虛線擬合得很好,從而證明了折線逼近法能較好的反映映射關(guān)系。
利用 m 序列的周期特性可降低高斯白噪聲任意兩個(gè)不同時(shí)刻的采樣信號(hào)的相關(guān)性。在線性反饋移位寄存器中每隔 r 個(gè)同步時(shí)鐘 ( 其中 r=2i , i 為整數(shù) ) 輸出一個(gè)狀態(tài)值作為均勻分布的隨機(jī)數(shù)輸入可實(shí)現(xiàn)均勻分布向高斯分布的轉(zhuǎn)化。為了選擇合適的 r 值,圖 4 分別給出了 r 為 0 、 2 、 8 時(shí)所生成的 10000 點(diǎn)高斯序列的功率譜。由圖 4 可見, r=8 時(shí)的功率譜基本水平,即系統(tǒng)產(chǎn)生的高斯白噪聲任意兩個(gè)不同時(shí)刻的采樣信號(hào)可看成統(tǒng)計(jì)獨(dú)立的,這與理論上對(duì)高斯白噪聲的定義相一致。同時(shí)也證明了降低相關(guān)性模塊是可行和有效的。
3 硬件實(shí)現(xiàn)
在 ISE8.1i 開發(fā)環(huán)境中使用 VHDL 語言可實(shí)現(xiàn)上述高斯白噪聲發(fā)生器的功能。本設(shè)計(jì)選用 Xil-inx 的 xc3s1200e-4fg320 作為目標(biāo)器件。其硬件實(shí)現(xiàn)框圖如圖 5 所示。
產(chǎn)生高斯白噪聲先后通過兩個(gè)模塊來實(shí)現(xiàn)。一是均勻隨機(jī)數(shù)發(fā)生模塊;二是均勻分布向高斯分布轉(zhuǎn)化模塊。其中均勻隨機(jī)數(shù)發(fā)生模塊包括 m 序列發(fā)生器和非相關(guān)化處理 ( 降低相關(guān)性操作 ) ;均勻分布向高斯分布轉(zhuǎn)化模塊包括比較選擇器、相應(yīng)的延時(shí)操作以及算術(shù)計(jì)算模塊。
在 ISE8.1i 開發(fā)環(huán)境中得到的系統(tǒng)功能仿真圖如圖 6 所示。實(shí)驗(yàn)中,系統(tǒng)的輸入時(shí)鐘為 60MHz 。圖 6 中的 regl_value 表示線性反饋的移位寄存器在時(shí)鐘 clk1 上升沿觸發(fā)的狀態(tài)值。 reg2_value 表示在同步時(shí)鐘 clk2 上升沿采樣 reg_value1 的值, clk2 是 clk1 的 8 倍分頻。仿真證明,本系統(tǒng)可以實(shí)現(xiàn)線性反饋移位寄存器每轉(zhuǎn) 8 次取出一個(gè)狀態(tài)值,并可減小不同時(shí)刻隨機(jī)變量之間的相關(guān)性 ( 非相關(guān)化處理 ) 。根據(jù) reg2_value 并通過比較選擇器輸出對(duì)應(yīng)直線段的 slope( 斜率 ) 、 point( 起點(diǎn)的橫坐標(biāo) ) 、 point_value( 起點(diǎn)的縱坐標(biāo) ) 可見, reg2_value_delay 比 reg2_value 可延時(shí)半個(gè) clk2 ,因而可保證輸入算術(shù)計(jì)算模塊的數(shù)據(jù)的同步。這樣,再經(jīng)算式: gauss_output=(reg2_value_delay-point)*slope+point_value ,就可得到高斯白噪聲序列。為了確保采得穩(wěn)定的信號(hào)值,操作時(shí)應(yīng)在信號(hào)持續(xù)時(shí)間的中間位置進(jìn)行采樣。由于高斯白噪聲序列 gauss_output 是 reg2_value_delay ,、 point 、 slope 、 point_value 之間的加、減、乘運(yùn)算所得到的,所以, gauss_output 有相應(yīng)延時(shí)。
本設(shè)計(jì)用 Xilinx 的 xc3s1200e-4fg320 為目標(biāo)器件來對(duì)代碼進(jìn)行綜合,所用的 FPGA 資源如下:
可見,該方案占用硬件資源較少。
為了驗(yàn)證硬件實(shí)現(xiàn)的正確性,還可將其下載到開發(fā)板,并采用 ChipScope Pro 8.1i 將硬件產(chǎn)生的高斯白噪聲序列通過并口回傳,同時(shí)將數(shù)據(jù)導(dǎo)入到 Matlab 。由于 ChipScope 要利用 FPGA 的片內(nèi)存儲(chǔ)空間暫存采樣值,所以,一次采集的信號(hào)數(shù)目有限且與 FPGA 型號(hào)有關(guān)。筆者將一次采集到的 16384 個(gè)樣值導(dǎo)入 Maflab 后,再將數(shù)據(jù)小數(shù)化 ( 因?yàn)?FPGA 中處理的是定點(diǎn)數(shù) ) ,然后調(diào)用 Matlab 中的 psd 函數(shù)估計(jì)出了其功率譜圖。實(shí)際結(jié)果證明,本系統(tǒng)產(chǎn)生的高斯白噪聲與理論值非常接近,也就是說,該方案可行。
由于本系統(tǒng)采用 VHDL 語言編寫,故其可移植性較強(qiáng)。當(dāng)在通信工程中需要帶限高斯白噪聲時(shí),就可在高斯白噪聲后接一個(gè)帶通濾波器 ( 在 FPGA 中應(yīng)用自帶 IP 核可輕松實(shí)現(xiàn) ) 。由于濾波后的噪聲能量會(huì)有損失,所以要做相應(yīng)的能量補(bǔ)償。之后,再將產(chǎn)生的帶限高斯白噪聲序列 ( 約 50000 點(diǎn) ) 導(dǎo)入 Matlab 中,然后調(diào)用 hist 函數(shù)就可得到圖 7 所示的序列直方圖,而調(diào)用 psd 函數(shù)即可得到圖 8 所示的序列功率譜圖。從直方圖可見帶限高斯白噪聲的概率密度函數(shù)是高斯型的,而從功率譜可見,在通帶內(nèi),功率譜密度近似為常數(shù),這些都與理論一致。
4 結(jié)束語
本文提出了一種在 FPGA 中快速產(chǎn)生高斯白噪聲序列的實(shí)現(xiàn)方案。同時(shí)基于均勻分布和高斯分布之間的映射關(guān)系曲線,提出并應(yīng)用了適合在 FPGA 中實(shí)現(xiàn)的折線逼近法。本文采用了 15 條首尾連接的直線段去逼近映射關(guān)系曲線 ( 按不同的工程精度要求,可選擇個(gè)數(shù)不同的直線段去逼近 ) 。顯然,所用的折線拐角越多 ( 直線段個(gè)數(shù)越多 ) ,精度越高,但所消耗的 FPGA 資源也越多。該方案具有簡(jiǎn)單易行,運(yùn)算量小等優(yōu)點(diǎn)。而且實(shí)現(xiàn)速度快,可源源不斷的產(chǎn)生高斯白噪聲序列,同時(shí)占用的硬件資源較少。由于軟件采用 VHDL 語言編寫,可移植性強(qiáng),故可靈活用于 Watterson 信道模擬器或嵌入調(diào)制解調(diào)器等其它系統(tǒng)。