高斯隨機噪聲實(shí)時(shí)生成實(shí)現方法研究 作者: 時(shí)間:2007-03-09 來(lái)源:網(wǎng)絡(luò ) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對面交流海量資料庫查詢(xún) 收藏 摘要:提出了一種面向硬件的均值、方差的高斯隨機噪聲生成方法。改進(jìn)了傳統的采用蒙特卡洛方法實(shí)現均勻分布噪聲到同分布噪聲的快速轉化,利用映射函數方法實(shí)現個(gè)轉為,最大隨度地降低運算量。實(shí)驗證明本方法具有快速、高精度等優(yōu)點(diǎn)。關(guān)鍵詞:高斯隨機噪聲 實(shí)時(shí) 圖像 高斯隨機噪聲在信號分析和處理中具有重要的價(jià)值。本文具體討論了一種面向硬件的高斯噪聲快速生成算法。算法原理為通過(guò)映射表法將均勻噪聲轉化生成高斯隨機噪聲。本方法占有內存小、運算速度快、精度高。實(shí)驗證明該方法能夠為視頻圖像實(shí)時(shí)添加高斯噪聲。圖1原理框圖如圖1所示。圖1左半部分為均勻噪聲生成部分,采用模數取余法,依靠已有的K個(gè)隨機數種子,不斷生成新的隨機數,并將之向外輸出。圖1右半部分采用左半部分的輸出值生成映射表地址,將查表后得到的結果輸出,即為所要求的高斯噪聲值結果。 1 生成均勻分布噪聲 設x(1),…,x(k)是給定的k個(gè)隨機數,在(-X,X)內均勻分布,相互獨立。第k+1個(gè)隨機數由x(1)和x(k)按照模X相加得到: 即x(k+1)仍然是(-X,X)之間的隨機數。在下一次運算時(shí),將x(k+1)移到x(k)的位置,xk)移到x(k-1),……,x(2)移到x{1},然后再做模X運算,相加得到x(k+2),如此循環(huán),產(chǎn)生序列{xn}。 首先討論上面的模X運算。對于采用補碼運算的處理器而言,只要取X為處理器字長(cháng),則在不考慮進(jìn)位的情況下,通常的加法就是模加運算。 然后采用數據結構實(shí)現上面的循環(huán)機制。設兩個(gè)指針:頭指針head和尾指針tail。每計算完一次噪聲值后,兩個(gè)指針都要向下移動(dòng)一個(gè)位置。已到序列尾部,則重新指到序列的頭部,即按照加1模K運算:為了計算方便,選K為256。若用head和lnil指針做相對偏移地址,則可以采用1個(gè)字節存儲。加1運算之后若不考慮溢出,就等價(jià)于加1模256操作。 2 映射高斯噪聲 為了由均勻噪聲快速產(chǎn)生高斯噪聲,采用了映射函數法。其算法原理如圖2所示。將正態(tài)分布函數的自變量y進(jìn)行合理的離散化,得到一系列函數值,構成一個(gè)數列。再將此數列中的任一個(gè)數yi映射到數軸x上的某個(gè)小區間段[xi0,xi1],其中‖xi1-xi0‖=yi。取遍數列中所有的數值,得到一系列的小區間。將所有的小區間依次連接起來(lái),中點(diǎn)置于數軸的零點(diǎn),則構成變量x的取值區間[-x,x]。將數軸x上的各個(gè)小區間與y序列建立映射關(guān)系,則可以證明,如果采樣間隔足夠小,那么x域中的隨機分布將對應于y域中的高斯分布。 這個(gè)映射關(guān)系可以函數表示為y=f(x)。 其中x服從(-X,X)區間內均勻分布,而y服從均值為u、方差為σ的高斯分布。f函數曲線(xiàn)如圖3所示。在算法實(shí)現時(shí),對y對應的高斯分布值進(jìn)行量化處理,并為x分配一塊連續的內存區域[0,2X],每個(gè)內存單元的(偏移地址-X)值代表了x值大小,單元內容存放了該單元對應的丁值。這片內存區域就是所需要的映射查找表。這個(gè)表具有通用性,可以預先計算好,在需要時(shí)可%26;#168;直接使用,不必再計算。 對于(0,1)正態(tài)分布,圖4中的zi都小于1,沒(méi)有實(shí)際意義,所以將其放大了200倍;則原始映射表描述為:原始映射表比較大,實(shí)際使用時(shí)對其做了粗采樣。對y對應的高斯分布值進(jìn)行的量化也沒(méi)有采用圖4中均標準階梯形式,而是采用了如下粗采樣形式: 結果映射表[k]=原始映射表[k%26;#183;d+d/2] (2) 其中:采樣間隔d=∑yi/M.,量化處理曲線(xiàn)如圖5所示。從圖5可以發(fā)現,兩邊較小處并沒(méi)有像階梯圖那樣截止為0,而是允許以小的概率出現非零值。試驗證明這種方式更好一些。 考慮高斯分布的實(shí)際情況,并經(jīng)過(guò)試驗驗證y僅在[-4,4]之間取值,就能夠達到令人滿(mǎn)意的精度。圖6給出了X大小對噪聲精度的影響曲線(xiàn),縱軸為平均誤差。 可以看出,當2X大于5500時(shí),誤差達到了極小穩定狀態(tài)。為了方便計算,選擇2X=213=8192,即X=212=4096。圖7給出了實(shí)驗結果(均值為120,方差為40):虛線(xiàn)部分為標準高斯分布的曲線(xiàn),實(shí)線(xiàn)部分為噪聲直方圖,驗證了本方法的有效性。 3 精度討論 該方法主要利用兩個(gè)表:一個(gè)是循環(huán)產(chǎn)生均勻噪聲的表;另一個(gè)是映射表。這兩個(gè)表的數值都可以由前面介紹的方法計算,下面只討論它們的精度取舍。 循環(huán)表中256個(gè)種子的精度要求與映射表的大小有直接關(guān)系,對映射表采用了8192(8K)個(gè)單元。因此循環(huán)表的任務(wù)就是要在區間[-4096,4096]內產(chǎn)生均勻分布的隨機數。所以循環(huán)表中的種子序列x(1),…,x(256)在[-4096,4096]內均勻分布。為了方便計算,將種子序列的分布調整到[-(2115-1),(215-1)]之間,即X=215=32767。所以可以采用包含1位符號位共計16位來(lái)存儲種子數的補碼,這樣可以通過(guò)丟掉進(jìn)位的補碼加法來(lái)實(shí)現模X加運算。補碼運算結果的高13位或右移3位,可以直接作映射表的偏名地址進(jìn)行后續查表操作,并且滿(mǎn)足在[-4096,4096]內均勻分布。考慮實(shí)際情況下,待求的高斯噪聲分布的方差一般介于(0,100)之間,均值一般介于[-255,255]之間。而實(shí)際圖像灰度值是以整數[0,255]形式存在,所以噪聲的精度只要控制在整數范圍內即可,映射表的精度只要達到0.0l就足夠了。而映射表中數據的分布介于[-4.00,4.00]之間,若以整數形式存儲,將原始數據乘以128后就完全可以存放在16位長(cháng)度單元中。 也可以在此基礎上對表進(jìn)行修改,使得經(jīng)過(guò)映射后高斯分布的均值和方差直接等于用戶(hù)給定的均值u和方差σ。修改比較簡(jiǎn)單,將映射表中的每一個(gè)單元值y做如下替換: y=(y*σ)>>7+u 此表中數據可以是原碼形式也可以是補碼形式具體需要而定。
評論