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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于FPGA的迭代層析重建中的小數(shù)處理方法

          基于FPGA的迭代層析重建中的小數(shù)處理方法

          作者: 時(shí)間:2008-06-25 來(lái)源:網(wǎng)絡(luò) 收藏

          1 引 言

          發(fā)射光譜層析(EST)技術(shù)是一種不干擾原待測(cè)場(chǎng)分布的測(cè)量診斷技術(shù),他在熱物理量測(cè)試、等離子體診斷等方面顯示出了極大的優(yōu)越性,尤其是在場(chǎng)分布測(cè)量方面,幾乎是其他不可替代的,是測(cè)量三維流場(chǎng)內(nèi)部物理量分布的一種常用。

          傳統(tǒng)的層析技術(shù),通常是利用軟件編程在計(jì)算機(jī)上直接完成,這要花費(fèi)很長(zhǎng)的時(shí)間,無(wú)法滿足實(shí)時(shí)時(shí)對(duì)速度的要求,現(xiàn)在已有研究者開始著手研究在硬件(例如和DSP)上來(lái)實(shí)現(xiàn)層析技術(shù),例如:在上實(shí)現(xiàn)ART算法。但是,由于ART算法在重建圖像時(shí)對(duì)噪聲的抑制能力較差,迭代格式復(fù)雜,且有除法運(yùn)算,用實(shí)現(xiàn)起來(lái)較為復(fù)雜。同時(shí)迭代重建算法--SIRT能夠有效抑制測(cè)量誤差的影響,迭代格式簡(jiǎn)單,得到廣泛應(yīng)用,但該法用FPGA(現(xiàn)場(chǎng)可編程邏輯門陣列)來(lái)實(shí)現(xiàn)時(shí),牽涉到運(yùn)算問(wèn)題。因?yàn)樵贔PGA中數(shù)據(jù)都是以二進(jìn)制形式參與存儲(chǔ)、運(yùn)算的,計(jì)算問(wèn)題是FPGA應(yīng)用中的一大難點(diǎn),目前業(yè)界用FPGA來(lái)大都采用定點(diǎn),這種行之有效,但應(yīng)用范圍很有限,對(duì)于在層析重建中的小數(shù),采用定點(diǎn)運(yùn)算是無(wú)法的。

          本文提出一種處理小數(shù)的方法,即把將要參與運(yùn)算的數(shù)據(jù)轉(zhuǎn)化為IEEE標(biāo)準(zhǔn)754的二進(jìn)制單精度浮點(diǎn)數(shù),然后調(diào)用Altera開放的浮點(diǎn)數(shù)運(yùn)算IP核對(duì)數(shù)據(jù)進(jìn)行運(yùn)算,Altera提供的IP核是Altera公司經(jīng)過(guò)嚴(yán)格測(cè)試和優(yōu)化過(guò)的電路功能模塊,在設(shè)計(jì)項(xiàng)目時(shí)調(diào)用IP核既減少了設(shè)計(jì)中的工作量,又在一定程度上節(jié)省了芯片資源,為迭代層析實(shí)時(shí)重建提供了可能。SIRT算法較ART算法迭代格式簡(jiǎn)單,且更易減小重建誤差,提高重建速度,更適用于實(shí)時(shí)重建。FPGA在設(shè)計(jì)時(shí)采用Verilog編程和調(diào)用Altera的開放IP核相結(jié)合的方法來(lái)實(shí)現(xiàn),軟件設(shè)計(jì)和綜合模擬仿真在QuartusⅡ5.1開發(fā)平臺(tái)中完成,最后給出了一些模塊仿真的波形。

          2 SIRT算法

          SIRT算法的迭代格式為:

          其中P是測(cè)量數(shù)據(jù),WT是投影矩陣W的轉(zhuǎn)置,λ為松弛因子,F(xiàn)是重建量。

          物理意義為:取測(cè)量向量的反投影作為初始圖像,在求k+1次估計(jì)F(k+1)時(shí),利用k次估計(jì)F(k)加上校正圖像。校正圖像正比于第k次估計(jì)的誤差矢量的反投影WT*(P-W*F(k))。因而每個(gè)像素的校正值實(shí)際是通過(guò)該像素的所有射線和的誤差值之累加,而不是只與一條射線有關(guān),這也是SIRT能有效地抑制測(cè)量數(shù)據(jù)中噪聲的根本原因。由于每一像素的校正值是所有過(guò)該像素射線的共同貢獻(xiàn),一些隨機(jī)誤差被平均掉了,因此SIRT的校正過(guò)程被稱為逐點(diǎn)校正。其中松弛因子的選取,會(huì)對(duì)誤差收斂曲線產(chǎn)生影響,如果環(huán)境不變,松弛因子可以固定。 3 IEEE754對(duì)浮點(diǎn)數(shù)的規(guī)定

          標(biāo)準(zhǔn)浮點(diǎn)數(shù)字長(zhǎng)由一個(gè)符號(hào)位S、指數(shù)E和無(wú)符號(hào)(小數(shù))的規(guī)格化尾數(shù)M構(gòu)成。其格式如下:


          考慮一個(gè)由一位符號(hào)位,E=8位指數(shù)寬度和M=23位的尾數(shù)(不包括隱藏的1)組成的浮點(diǎn)數(shù)表達(dá)式?,F(xiàn)在來(lái)研究545.2510在單精度浮點(diǎn)數(shù)格式下的表達(dá)形式。由bias=2E-1-1計(jì)算偏移量如下:

          定義二進(jìn)制浮點(diǎn)數(shù)算法的IEEE754-1985標(biāo)準(zhǔn)還定義了一些其他有用的特殊數(shù)的處理,例如溢出和下溢。指數(shù)E=Emax=1…12與0尾數(shù)m=0組合是為∞保留的,0是用0指數(shù)E=Emin=0…02和與0尾數(shù)m=0編碼的,注意由于有符號(hào)尾數(shù)表達(dá)式、正零和負(fù)零編碼是不同的,在IEEE754標(biāo)準(zhǔn)中還定義了兩個(gè)特殊數(shù),但在FPGA浮點(diǎn)數(shù)算法中通常都不支持這些其他的表達(dá)式。這些其他數(shù)字是非正規(guī)數(shù)和(denormal)NaNs(not a number,非數(shù)字)。

          4小數(shù)的預(yù)處理

          IP核來(lái)計(jì)算數(shù)據(jù)時(shí),輸入數(shù)據(jù)和輸出數(shù)據(jù)都應(yīng)為IEEE標(biāo)準(zhǔn)754的二進(jìn)制單精度浮點(diǎn)數(shù),這樣就要求在進(jìn)行浮點(diǎn)數(shù)運(yùn)算之前,先要對(duì)數(shù)據(jù)進(jìn)行處理使測(cè)量值P和投影矩陣W的值轉(zhuǎn)化為IEEE標(biāo)準(zhǔn)的二進(jìn)制浮點(diǎn)數(shù)。

          預(yù)處理步驟如下:

          (1)對(duì)于測(cè)量數(shù)據(jù)P,他是由CCD采集并經(jīng)10位A/D轉(zhuǎn)換,使測(cè)量數(shù)據(jù)轉(zhuǎn)換為10位二進(jìn)制整數(shù),然后經(jīng)過(guò)數(shù)據(jù)預(yù)處理模塊,把數(shù)據(jù)處理轉(zhuǎn)化為IEEE標(biāo)準(zhǔn)754的二進(jìn)制單精度浮點(diǎn)數(shù),輸入到外部寄存器P等待調(diào)用。

          (2)對(duì)于投影矩陣W,如果圖像大小一定,則投影矩陣W也是固定的,可先由Matlab仿真生成并處理轉(zhuǎn)化為IEEE標(biāo)準(zhǔn)754的二進(jìn)制單精度浮點(diǎn)數(shù),然后存到W寄存器,等待調(diào)用。

          在此只討論由FPGA處理的部分,即只討論對(duì)測(cè)量數(shù)據(jù)P的預(yù)處理,而對(duì)于W矩陣的值則可由Matlab編程處理完成,在此不再贅述。

          流程圖如圖2所示。

          5模擬與仿真

          對(duì)于測(cè)量值P,他是由面陣CCD采集,并經(jīng)有自制的10位A/D轉(zhuǎn)換得來(lái)的二進(jìn)制整數(shù),根據(jù)其數(shù)據(jù)特點(diǎn),可以采用移位,然后按規(guī)律重組就能將其變?yōu)镮EEE標(biāo)準(zhǔn)754的二進(jìn)制單精度浮點(diǎn)數(shù)。

          5.1預(yù)處理P的模塊

          測(cè)量數(shù)據(jù)P為二進(jìn)制整數(shù),將其轉(zhuǎn)化為IEEE標(biāo)準(zhǔn)754形式,只需要先對(duì)數(shù)據(jù)進(jìn)行檢測(cè),若數(shù)據(jù)為正則符號(hào)位S=0,否則S=1;然后找出為"1"的最高位,設(shè)為"1"的最高位為第L位,則保留P[L-1:0]作為IEEE標(biāo)準(zhǔn)754的尾數(shù)M的高位,然后在其后補(bǔ)"0"至23位,即得尾數(shù)M;而L的值即為指數(shù)e,則E=e+127。假設(shè)P[9:0]=0001011011,則為"1"的最高位為P[6],保留P[5:0]作為尾數(shù)M[22:0]的高位,然后在后面補(bǔ)"0",即得尾數(shù)M,在此M=01101100000000000000000,而指數(shù)e為6,則E[7:0]的大小為E=e+127,在此即為133,即為二進(jìn)制的10000101,此處為S=0,則P轉(zhuǎn)化后的值為Pout[31:0]=01000010101101100000000000000000,仿真結(jié)果如圖3所示。

          顯然仿真結(jié)果是正確的。

          按照IEEE標(biāo)準(zhǔn)754形式,把測(cè)量所得數(shù)據(jù)P和投影矩陣W的值預(yù)處理轉(zhuǎn)化為IEEE標(biāo)準(zhǔn)754形式以后,即可進(jìn)行運(yùn)算。

          5.2 浮點(diǎn)加法器的實(shí)現(xiàn)

          兩浮點(diǎn)數(shù)相加,設(shè)兩個(gè)IEEE標(biāo)準(zhǔn)754單精度浮點(diǎn)數(shù)分別為01000000011000000000000000000000和01000000010000000000000000000000,即為十進(jìn)制的3.5和3,調(diào)用浮點(diǎn)加法IP核,仿真波形圖如圖4所示。
          由仿真波形圖可見相加結(jié)果為01000000110100000000000000000000,即為十進(jìn)制的6.5,顯然結(jié)果是正確的。

          5.3 浮點(diǎn)乘法器的實(shí)現(xiàn)

          兩浮點(diǎn)數(shù)相乘,設(shè)兩數(shù)均為01000000011000000000000000000000,即為十進(jìn)制的3.5,調(diào)用浮點(diǎn)數(shù)乘法IP核,進(jìn)行仿真。仿真結(jié)果如圖5所示。

          由仿真波形圖可見兩數(shù)相乘結(jié)果為01000001010001000000000000000000,為十進(jìn)制數(shù)的12.25,即結(jié)果是正確的。

          6 結(jié) 語(yǔ)

          通過(guò)以上討論分析,本文提出的FPGA的處理小數(shù)的方法是可行的,不僅解決了在FPGA上實(shí)現(xiàn)發(fā)射光譜層析SIRT算法時(shí)的小數(shù)問(wèn)題,同時(shí)也拓寬了FPGA的應(yīng)用范圍,使得FPGA不只能處理整數(shù)還可以處理小數(shù),突破了以往FPGA處理小數(shù)時(shí)只能用定點(diǎn)處理的限制,同時(shí)本文巧妙地利用了經(jīng)過(guò)嚴(yán)格測(cè)試和優(yōu)化的Altera開放的IP核并結(jié)合自編Verilog程序,這樣既減少了設(shè)計(jì)中的工作量,又可以在一定程度上節(jié)省硬件資源,提高系統(tǒng)運(yùn)行速度,向發(fā)射光譜實(shí)時(shí)層析重建邁了有意義的一步。


          評(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); })();