<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 設(shè)計(jì)應(yīng)用 > 高斯隨機(jī)噪聲實(shí)時(shí)生成實(shí)現(xiàn)方法研究

          高斯隨機(jī)噪聲實(shí)時(shí)生成實(shí)現(xiàn)方法研究

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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();