吳 帆,李會(huì)方
(西北工業(yè)大學(xué) 陜西 西安 710129)
在硬件實(shí)現(xiàn)的跟蹤系統(tǒng)中,經(jīng)常需要高斯噪聲信號(hào)源來提供噪聲。傳統(tǒng)的高斯噪聲大多在基于DSP的軟件系統(tǒng)上生成,其產(chǎn)生速度比硬件系統(tǒng)工作頻率要慢很多,且不利于SOC(system on chip)的集成。通常,在這樣的系統(tǒng)里有大量的運(yùn)算與邏輯操作(例如,硬件粒子濾波系統(tǒng)),高斯源作為噪聲模塊只是很小的一個(gè)功能塊,因此設(shè)計(jì)時(shí)需要盡量減少噪聲源占用的資源,以便將有限的FPGA的資源盡量留給其他計(jì)算模塊[1]。然而,噪聲的精度卻對(duì)最終的跟蹤結(jié)果精度有著直接影響,因此要想獲得高精度的跟蹤結(jié)果必須改善噪聲的精度。為了獲得占用資源少、精度高的高斯噪聲源電路,設(shè)計(jì)了本文的高斯噪聲產(chǎn)生方案。該方案由Verilog HDL編程,可移植性強(qiáng),可作為功能模塊移植到其他系統(tǒng)中產(chǎn)生高斯噪聲。
為了獲得高斯噪聲,通常采用數(shù)字合成方法[2],首先產(chǎn)生均勻分布的偽隨機(jī)數(shù)噪聲,然后通過一定的轉(zhuǎn)換方法獲得高斯白噪聲。
均勻分布的偽隨機(jī)數(shù)產(chǎn)生已經(jīng)有較長(zhǎng)的研究歷史,主要的方法有:線性同余法、m序列產(chǎn)生法、logist 方程法、進(jìn)位加方法[3]。FPGA具有并行計(jì)算的優(yōu)勢(shì),可以勝任基本邏輯、簡(jiǎn)單加減法、大小比較、多路選擇和時(shí)序邏輯等操作。通常FPGA采用查找表實(shí)現(xiàn)組合邏輯運(yùn)算,當(dāng)組合邏輯過于復(fù)雜時(shí),往往需要使用多級(jí)查找表來完成運(yùn)算,大大降低速度,如乘除法[4]。因此用FPGA實(shí)現(xiàn)偽隨機(jī)數(shù)發(fā)生器,算法應(yīng)該盡量簡(jiǎn)單,并盡量不要使用乘除法。考慮到以上因素,本設(shè)計(jì)采用m序列產(chǎn)生法,該算法具有簡(jiǎn)單、產(chǎn)生速度快、可重復(fù)性強(qiáng)的特點(diǎn),并且得到的偽隨機(jī)序列周期較長(zhǎng)。將均勻分布的隨機(jī)序列轉(zhuǎn)化為高斯分布的隨機(jī)序列的方法主要有函數(shù)變換法、中心極限法、查找表法3種[5]。前兩種方法都使用到了復(fù)雜的運(yùn)算,在FPGA上實(shí)現(xiàn)時(shí)需要占用較多的邏輯資源。查找表法通過圖1所示的均勻噪聲和高斯噪聲之間的映射關(guān)系建立查找表,通過查表方法得到對(duì)應(yīng)高斯噪聲。若對(duì)每個(gè)均勻輸入都建立查找關(guān)系,則對(duì)于n位的均勻噪聲輸入需要建立2n大小的查找表,查找表大小隨著輸入位數(shù)增加成指數(shù)增長(zhǎng)。當(dāng)為了增加精度而提高n時(shí),查找表大小迅速增長(zhǎng)到不能接受。文獻(xiàn)[2]利用折線來逼近映射曲線,查找表里存儲(chǔ)折線的偏移和斜率,從而減少查找表的大小。觀察圖1發(fā)現(xiàn)曲線在高斯噪聲絕對(duì)值小的地方斜率小,在絕對(duì)值大的地方斜率大。如果采用均勻量化的方法,則在高斯噪聲絕對(duì)值越大的地方精度越差。要想得到更高精度,就要增加均勻量化級(jí)數(shù),增大查找表[6]。文中引入非均勻劃分的思想,在斜率較小的地方,用較少的折線逼近映射曲線,在斜率大的地方,用更多的折線逼近映射曲線,這樣可以在不增加查找表大小的情況下改善精度。
文中的安排如下:在第2節(jié)中給出了均勻偽隨機(jī)數(shù)的實(shí)現(xiàn)過程。第3節(jié)詳細(xì)描述了本文的非均勻劃分的方法和尋址方式。在最后1節(jié),給出了設(shè)計(jì)結(jié)果和結(jié)論。
圖 1 (0,1)均勻分布與(0,1)高斯分布的映射關(guān)系Fig.1 Mapping relationship between (0,1) uniform distribution and(0,1) Gaussian distribution
m序列是最長(zhǎng)線性反饋移位寄存器的簡(jiǎn)稱[7],它是由帶線性反饋的移位寄存器 (Linear Feedback Shift Register,LFSR)產(chǎn)生的周期最長(zhǎng)的序列。m序列的每個(gè)狀態(tài)可以看成對(duì)應(yīng)一個(gè)隨機(jī)噪聲,當(dāng)m序列使用n級(jí)寄存器時(shí),對(duì)應(yīng)的均勻噪聲的重復(fù)周期最大為2n-1。為了生成m序列,需要選擇合適的反饋節(jié)點(diǎn)使得輸出序列最長(zhǎng)。反饋節(jié)點(diǎn)的選擇決定了輸出序列的周期。例如:對(duì)于一個(gè)3位寬的LFSR,如果選擇節(jié)點(diǎn) [1,2],輸出將在2個(gè)值間循環(huán)。相比,如果選擇節(jié)點(diǎn)[0,2],輸出值的周期可以達(dá)到23-1個(gè)。表1給出了不同位寬時(shí)的LFSR達(dá)到最大周期時(shí)節(jié)點(diǎn)的選擇。
表1 最長(zhǎng)周期的LFSR的節(jié)點(diǎn)選擇Tab.1 Taps for maximal length LFSRs
對(duì)于采用異或門作為反饋的LFSR,當(dāng)進(jìn)入所有位狀態(tài)為邏輯0時(shí),輸出將阻滯在全0狀態(tài)。為了避免在電路進(jìn)入這種全0狀態(tài),我們對(duì)常規(guī)的LFSR電路稍微做了一點(diǎn)改進(jìn),使得當(dāng)電路進(jìn)入全0時(shí),將自動(dòng)跳轉(zhuǎn)到合法狀態(tài)繼續(xù)運(yùn)行。圖2以n等于8為例給出了本人LFSR的電路。
圖2 8位的LFSR實(shí)現(xiàn)電路Fig.2 Implementation circuit for 8 bits LFSR
從m序列的實(shí)現(xiàn)過程來看,相鄰的兩個(gè)輸出值間相關(guān)性很強(qiáng),這必然影響到均勻噪聲信號(hào)的獨(dú)立性,為了減少這種相關(guān)性,可以采取L個(gè)LFSR并行工作,分別給予每個(gè)LFSR不同的初始種子,再?gòu)腖個(gè)輸出中抽取一個(gè)作為均勻噪聲序列的輸出。參考文獻(xiàn)[5],選擇LFSR的位寬n=32,并行運(yùn)行L=6個(gè)LFSR來產(chǎn)生均勻分布噪聲序列。
圖1的映射關(guān)系可以用函數(shù)表示為:
式中x為均勻隨機(jī)變量,y為高斯隨機(jī)變量。隨著高斯噪聲y的絕對(duì)值增大,用來逼近曲線的直線的斜率也增大,若使用均勻分段的折線來逼近映射曲線,則高斯噪聲絕對(duì)值越大的地方,用來逼近映射曲線的斜率越大,由于逼近所帶來的誤差越大。因此,使用非均勻劃分的方法,在高斯噪聲絕對(duì)值小的地方采用更少的直線來逼近,相反,在高斯噪聲絕對(duì)值大的地方,采用更多的直線來逼近,這樣在逼近直線總數(shù)不變的情況下,改善噪聲的精度。同時(shí),均勻噪聲與高斯噪聲之間的映射關(guān)系曲線關(guān)于點(diǎn) (0.5,0)對(duì)稱,因此只考慮橫坐標(biāo)位于(0.5,1)的情形,從而節(jié)約一半的存儲(chǔ)空間。對(duì)于橫坐標(biāo)位于(0,0.5)的情況,可以通過適當(dāng)轉(zhuǎn)換獲得。以8位的輸入為例來解釋本文的非均勻劃分方法和尋址方式。首先,選擇1-2-n(1≤n≤8)作為邊界點(diǎn)來劃分曲線,總共劃分為7段,每一段對(duì)應(yīng)一個(gè)存儲(chǔ)空間,如圖3所示。
為了對(duì)這7段空間進(jìn)行尋址,設(shè)計(jì)圖4的尋址電路,該尋址電路具有收縮的特性[8],隨著地址增長(zhǎng),2個(gè)相鄰地址對(duì)應(yīng)的輸入x間的距離越來越小。當(dāng)x7=1時(shí),對(duì)應(yīng)x坐標(biāo)大于0.5,尋址電路中間部分可以視為通路,電路直接尋址取得直線斜率和偏移后通過計(jì)算模塊獲得高斯噪聲輸出。當(dāng)x7=0時(shí),通過多路選擇器對(duì)尋址做相應(yīng)變換,同時(shí)x7作為控制信號(hào),控制計(jì)算模塊結(jié)果取反。
圖3 映射曲線非均勻分區(qū)示意圖Fig.3 Diagram of nonuniform partition to mapping curve
圖4 尋址電路Fig.4 Addressing circuit
文中采用XILINX公司的Virtex5系列的XC5VLX50T芯片上實(shí)現(xiàn)了上述設(shè)計(jì),設(shè)計(jì)主要占用了2%的可配置的SLICE和一塊片上 BRAM,實(shí)現(xiàn)了±4σ的高斯噪聲源,將5 000點(diǎn)的輸出結(jié)果導(dǎo)入到Matlab里并繪制直方圖,得到如圖5所示。
由圖可以看出,生成的噪聲序列密度函數(shù)基本符合高斯分布,達(dá)到了設(shè)計(jì)要求。
高斯源噪聲作為最常用的噪聲源之一,經(jīng)常被應(yīng)用于各種需要加噪處理的系統(tǒng)和算法。相對(duì)于傳統(tǒng)的高斯噪聲源來說,基于FPGA的非均勻折線逼近的高斯噪聲源具有高速、占用資源少、精度高、可移植性強(qiáng)的優(yōu)點(diǎn)。容易作為IP核,移植到高速的數(shù)字系統(tǒng)中。
圖5 輸出噪聲序列直方圖Fig.5 Histogram of the output noise sequence
[1]Vasilescu G.Electrocnic noise and interfering signals:principles and applications[M].Berlin:Springer-Verlag,2005.
[2]艾余雄,寇艷紅.一種基于FPGA的高斯白噪聲發(fā)生器的設(shè)計(jì)與實(shí)現(xiàn)[J].遙測(cè)遙控,2009,30(6):36-40.
AI Yu-xiong,KOU Yan-hong.Design and implementation of a FPGA-based Gauss noise generator[J].Journal of Telemetry,Tracking and Command,2009,30(6):36-40.
[3]劉正高.標(biāo)準(zhǔn)均勻隨機(jī)數(shù)的產(chǎn)生方法分析 [J].航天標(biāo)準(zhǔn)化,1996,13(5):11-13.
LIU Zheng-gao.Standard uniform random number generation method analysis[J].Standardization of Aerospace,1996,13(5):11-13.
[4]Wolf W.FPGA-based system design[M].Princeton:Prentice Hall PTR,2004.
[5]王林,芮國(guó)勝,田文飚.基于FPGA的高斯白噪聲生成[J].現(xiàn)代電子技術(shù),2011,34(3):104-106.
WANG Lin,RUI Guo-sheng,TIAN Wen-biao.Gaussian white noise generating based on FPGA[J].Modern Electronics Technique,2011,34(3):104-106.
[6]汪春霆,李修國(guó),王愛華.基于FPGA的高精度高斯白噪聲產(chǎn)生方法[J].北京理工大學(xué)學(xué)報(bào),2010,30(4):474-477.
WANG Chun-ting,LI Xiu-guo,WANG Ai-hua.Method to generatehigh-preciseGaussiannoisebasedonFPGA[J].Transactions of Beijing Institute of Technology,2010,30(4):474-477.
[7]Lee D U,Wayne L,Villasenor J D,et al.A hardware Gaussian noise generator using the Box-Muller method and its error analysis[J].IEEE Trans.on Computers,2006,55(6):659-671.
[8]Lee D U,Wayne L,Villasenor J D,et al.A hardware Gaussian noise generator using the Wallace method[J].IEEE Trans.on Very Large Scale Integration (VLSI) systems,2005,13(8):911-920.