薛治天,王正茂,楊宇飛,郝思源
(合肥市合肥工業(yè)大學(xué),安徽合肥,230000)
由于數(shù)據(jù)格式是與精度和資源消耗相關(guān)的,現(xiàn)有方案大多選取自定義的數(shù)據(jù)格式以在降低邏輯資源消耗同時(shí)保證擬合精度,而工程應(yīng)用中常用的是IEEE754標(biāo)準(zhǔn)的32bit單精度浮點(diǎn)格式,使得這種方法設(shè)計(jì)的模塊再與其它模塊進(jìn)行運(yùn)算時(shí),需要進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換,通信代價(jià)較大;若采用單精度浮點(diǎn)格式,采用以上現(xiàn)有方案,則難以達(dá)到逼近精度要求。
根據(jù)切比雪夫定理給出,若 f (x)∈ C[a,b]存在n次的最佳一致逼近多項(xiàng)式(x)的充要條件是區(qū)間[a,b]上至少存在n+ 2 個(gè)交錯(cuò)點(diǎn) { x1,x2, ...,xn+2}使得 f (x) ?(x)在這些點(diǎn)上正負(fù)相間的取得最值,即滿足:
切比雪夫定理從理論上給出了最佳一致逼近多項(xiàng)式的特性,而且給出了尋求最佳一致逼近多項(xiàng)式的方法,但是尋求交錯(cuò)點(diǎn)組十分困難。Remez于1957年,采用逐次逼近的思想,提出了一個(gè)求連續(xù)函數(shù)的最佳一致逼近多項(xiàng)式的近似算法,取得了良好效果。
Remez提出的近似算法由以下三步構(gòu)成:
在[a,b]上選 n + 2 個(gè)由小到大排列的初始點(diǎn)列{x1, x2, ...,xn+2}作為近似交錯(cuò)點(diǎn)組,并設(shè)置精度ε>0;
利用上式求解方程組(2)得近似多項(xiàng)式和近似偏差En′(f,x);則迭代終止;否則,若取得中的點(diǎn),構(gòu)成一新的近似交錯(cuò)組。使在新點(diǎn)組在 f (x) ? p*n(x)上仍然正負(fù)相間,返回步驟(2)。
針對sigmoid函數(shù)的最佳逼近,我們對傳統(tǒng)的remez算法進(jìn)行一定的改進(jìn)以提高算法效率。
針對步驟(1),由于sigmoid函數(shù)的最佳逼近函數(shù)實(shí)際交錯(cuò)點(diǎn)在區(qū)間內(nèi)近似均勻分布,故取均分區(qū)間的點(diǎn)作為初始近似交錯(cuò)點(diǎn)組,減少迭代步數(shù)。
針對步驟(3),傳統(tǒng)的remez算法采用單一交換法,用 x*點(diǎn)取代{xi}中的點(diǎn)。我們采用同時(shí)交換法,對于求區(qū)間的最值,由于誤差函數(shù)連續(xù)可導(dǎo)且容易得到其導(dǎo)函數(shù),故采用牛頓法找到誤差導(dǎo)函數(shù)列 Ki(x) =( x) ?(x) xi≤x ≤ xi+1的零點(diǎn)列,可以證明該點(diǎn)列即為所求的{}點(diǎn)列。
圖1 流程圖
綜合考慮逼近的精確程度以及硬件實(shí)現(xiàn)的特殊性,我們在區(qū)間[0,10]分為10段逼近模塊,10段區(qū)間分別為[0,0.5][0.5,1] [1,1.5] [1.5,2] [2,3] [3,4] [4,5] [5,6] [6,8][8,10]
得到如下的逼近多項(xiàng)式:
表1 Sigmoid函數(shù)各段逼近多項(xiàng)式
根據(jù)Sigmoid函數(shù)的性質(zhì)可知在區(qū)間[10,+∞]和[-∞,-10]距離1和0的誤差小于。如果總體誤差控制在以內(nèi),三次多項(xiàng)式就可以達(dá)到要求。為了便于硬件二進(jìn)制處理,選擇區(qū)域左右端點(diǎn)均為2的冪次。
EEE754標(biāo)準(zhǔn)中規(guī)定float單精度浮點(diǎn)數(shù)在機(jī)器中表示用1位表示數(shù)字的符號,用8位來表示指數(shù),用23位來表示尾數(shù),即小數(shù)部分。
IEEE754標(biāo)準(zhǔn)中,一個(gè)規(guī)格化32位的浮點(diǎn)數(shù)x的真值表示為:
其中尾數(shù)域表示的值是1.M。因?yàn)橐?guī)格化的浮點(diǎn)數(shù)的尾數(shù)域最左位總是1,故這一位不予存儲,而認(rèn)為隱藏在小數(shù)點(diǎn)的左邊。在計(jì)算指數(shù)e時(shí),對階碼E的計(jì)算采用源碼的計(jì)算方式,因此32位浮點(diǎn)數(shù)的8bits的階碼E的取值范圍是0到255。其中當(dāng)E為全0或者全1時(shí),是IEEE754規(guī)定的特殊情況。
圖2 分段最佳一致逼近函數(shù)
32位單精度浮點(diǎn)數(shù)的階碼E由8位表示,取值范圍為0-255,去除0和255這兩種特殊情況,那么指數(shù)e的取值范圍就是1-127=-126到254-127=127。階碼的二進(jìn)制位數(shù)決定浮點(diǎn)數(shù)的表示范圍,尾數(shù)的二進(jìn)制位數(shù)表示浮點(diǎn)數(shù)的精度。32位浮點(diǎn)數(shù)尾數(shù)域有23位。那么浮點(diǎn)數(shù)以二進(jìn)制表示的話精度是23位,23位所能表示的最大數(shù)是223-1=8388607,所以十進(jìn)制的尾數(shù)部分最大數(shù)值是8388607,也就是說尾數(shù)數(shù)值超過這個(gè)值,float將無法精確表示,所以float最多能表示小數(shù)點(diǎn)后7位,但絕對能保證的為6位,也即float的十進(jìn)制的精度為為6~7位。這樣的數(shù)據(jù)表示格式可以滿足我們對于計(jì)算范圍和精度的要求。
流水線結(jié)構(gòu)(pipeline architecture)是指在系統(tǒng)處理數(shù)據(jù)時(shí),每個(gè)時(shí)鐘脈沖都接受下一條處理數(shù)據(jù)的指令。流水線機(jī)構(gòu)提高了系統(tǒng)處理數(shù)據(jù)的速度,同時(shí)對時(shí)序有嚴(yán)格的要求。
在仿真測試階段,通過輸入?yún)^(qū)間范圍內(nèi)的一組穩(wěn)定遞增的數(shù)據(jù),每過3個(gè)周期輸入一個(gè)data值,采用的流水線結(jié)構(gòu)第一組數(shù)據(jù)會在24個(gè)周期后輸出擬合值,我們與手工計(jì)算的實(shí)際值作比較,精度達(dá)到了10-6數(shù)量級,滿足預(yù)期值。
圖3 流水線架構(gòu)實(shí)現(xiàn)
本實(shí)施例中基于Remez算法的Sigmoid函數(shù)硬件高效率實(shí)現(xiàn)方法是:首先采用Remez最佳一致算法對Sigmoid函數(shù)進(jìn)行四次多項(xiàng)式分段逼近,然后用流水線結(jié)構(gòu)優(yōu)化硬件實(shí)現(xiàn)模塊。Remez給出了逐次逼近的思想,提出求連續(xù)函數(shù)的最佳一致逼近多項(xiàng)式的近似算法,取得了良好效果;由Remez提出的近似算法由以下三步構(gòu)成:
第1步:在[a,b]上選 n + 2 個(gè)由小到大排列的初始點(diǎn)列{x1, x2, ...,xn+2}作為近似交錯(cuò)點(diǎn)組,并設(shè)置精度ε>0;
第2步:求解獲得近似多項(xiàng)式 Pn(x ) 和近似偏差′(f,x);
綜合考慮逼近的精確程度以及硬件實(shí)現(xiàn)的特殊性,本實(shí)施例中在區(qū)間[0,8]分為5段逼近模塊,5段區(qū)間分別為[0,0.5],[0.5,1],[1,2],[2,4],[4,8],獲得Sigmoid函數(shù)各段逼近多項(xiàng)式如表1所示。
表2 Sigmoid函數(shù)各段逼近多項(xiàng)式
根據(jù)Sigmoid函數(shù)的性質(zhì)可知在區(qū)間[8,+∞]和[-∞,-8]距離1和0的誤差小于。如果總體誤差控制在以內(nèi),三次多項(xiàng)式就可以達(dá)到要求。為了便于硬件二進(jìn)制處理,選擇區(qū)域左右端點(diǎn)均為2的冪次。
流水線結(jié)構(gòu)(pipeline architecture)是指在系統(tǒng)處理數(shù)據(jù)時(shí),每個(gè)時(shí)鐘脈沖都接受下一條處理數(shù)據(jù)的指令。流水線機(jī)構(gòu)提高了系統(tǒng)處理數(shù)據(jù)的速度,同時(shí)對時(shí)序有嚴(yán)格的要求。
通過在quartusⅡ用Verilog HDL硬件語言編寫程序然后結(jié)合modelsim強(qiáng)大的仿真功能進(jìn)行聯(lián)合仿真,Sigmoid函數(shù)時(shí)序仿真波形符合預(yù)期要求。在仿真測試階段,通過輸入?yún)^(qū)間范圍內(nèi)的一組穩(wěn)定遞增的數(shù)據(jù),每過5個(gè)時(shí)鐘周期輸入一個(gè)data值,采用的流水線結(jié)構(gòu)第一組數(shù)據(jù)會在45個(gè)周期后輸出擬合值,通過與手工計(jì)算的實(shí)際值作比較,精度達(dá)到了10-6數(shù)量級,滿足預(yù)期值。
本文運(yùn)用Remez算法構(gòu)造多項(xiàng)式逼近Sigmoid函數(shù),優(yōu)化多項(xiàng)式逼近后的Sigmoid函數(shù)硬件實(shí)現(xiàn)架構(gòu),對優(yōu)化后的多項(xiàng)式逼近的Sigmoid函數(shù)進(jìn)行verilog硬件語言建模,并進(jìn)行仿真分析通過算例分析證明了本文所采用的使用Remez算法構(gòu)造多項(xiàng)式逼近Sigmoid函數(shù)擬合誤差較低,運(yùn)算速度快,精度較高,滿足預(yù)期值,達(dá)到了高效率的硬件實(shí)現(xiàn)。