薛治天,王正茂,楊宇飛,郝思源
(合肥市合肥工業大學,安徽合肥,230000)
由于數據格式是與精度和資源消耗相關的,現有方案大多選取自定義的數據格式以在降低邏輯資源消耗同時保證擬合精度,而工程應用中常用的是IEEE754標準的32bit單精度浮點格式,使得這種方法設計的模塊再與其它模塊進行運算時,需要進行數據格式轉換,通信代價較大;若采用單精度浮點格式,采用以上現有方案,則難以達到逼近精度要求。
根據切比雪夫定理給出,若 f (x)∈ C[a,b]存在n次的最佳一致逼近多項式(x)的充要條件是區間[a,b]上至少存在n+ 2 個交錯點 { x1,x2, ...,xn+2}使得 f (x) ?(x)在這些點上正負相間的取得最值,即滿足:

切比雪夫定理從理論上給出了最佳一致逼近多項式的特性,而且給出了尋求最佳一致逼近多項式的方法,但是尋求交錯點組十分困難。Remez于1957年,采用逐次逼近的思想,提出了一個求連續函數的最佳一致逼近多項式的近似算法,取得了良好效果。
Remez提出的近似算法由以下三步構成:
在[a,b]上選 n + 2 個由小到大排列的初始點列{x1, x2, ...,xn+2}作為近似交錯點組,并設置精度ε>0;
利用上式求解方程組(2)得近似多項式和近似偏差En′(f,x);則迭代終止;否則,若取得中的點,構成一新的近似交錯組。使在新點組在 f (x) ? p*n(x)上仍然正負相間,返回步驟(2)。
針對sigmoid函數的最佳逼近,我們對傳統的remez算法進行一定的改進以提高算法效率。
針對步驟(1),由于sigmoid函數的最佳逼近函數實際交錯點在區間內近似均勻分布,故取均分區間的點作為初始近似交錯點組,減少迭代步數。
針對步驟(3),傳統的remez算法采用單一交換法,用 x*點取代{xi}中的點。我們采用同時交換法,對于求區間的最值,由于誤差函數連續可導且容易得到其導函數,故采用牛頓法找到誤差導函數列 Ki(x) =( x) ?(x) xi≤x ≤ xi+1的零點列,可以證明該點列即為所求的{}點列。

圖1 流程圖
綜合考慮逼近的精確程度以及硬件實現的特殊性,我們在區間[0,10]分為10段逼近模塊,10段區間分別為[0,0.5][0.5,1] [1,1.5] [1.5,2] [2,3] [3,4] [4,5] [5,6] [6,8][8,10]
得到如下的逼近多項式:

表1 Sigmoid函數各段逼近多項式
根據Sigmoid函數的性質可知在區間[10,+∞]和[-∞,-10]距離1和0的誤差小于。如果總體誤差控制在以內,三次多項式就可以達到要求。為了便于硬件二進制處理,選擇區域左右端點均為2的冪次。
EEE754標準中規定float單精度浮點數在機器中表示用1位表示數字的符號,用8位來表示指數,用23位來表示尾數,即小數部分。

IEEE754標準中,一個規格化32位的浮點數x的真值表示為:

其中尾數域表示的值是1.M。因為規格化的浮點數的尾數域最左位總是1,故這一位不予存儲,而認為隱藏在小數點的左邊。在計算指數e時,對階碼E的計算采用源碼的計算方式,因此32位浮點數的8bits的階碼E的取值范圍是0到255。其中當E為全0或者全1時,是IEEE754規定的特殊情況。

圖2 分段最佳一致逼近函數
32位單精度浮點數的階碼E由8位表示,取值范圍為0-255,去除0和255這兩種特殊情況,那么指數e的取值范圍就是1-127=-126到254-127=127。階碼的二進制位數決定浮點數的表示范圍,尾數的二進制位數表示浮點數的精度。32位浮點數尾數域有23位。那么浮點數以二進制表示的話精度是23位,23位所能表示的最大數是223-1=8388607,所以十進制的尾數部分最大數值是8388607,也就是說尾數數值超過這個值,float將無法精確表示,所以float最多能表示小數點后7位,但絕對能保證的為6位,也即float的十進制的精度為為6~7位。這樣的數據表示格式可以滿足我們對于計算范圍和精度的要求。
流水線結構(pipeline architecture)是指在系統處理數據時,每個時鐘脈沖都接受下一條處理數據的指令。流水線機構提高了系統處理數據的速度,同時對時序有嚴格的要求。
在仿真測試階段,通過輸入區間范圍內的一組穩定遞增的數據,每過3個周期輸入一個data值,采用的流水線結構第一組數據會在24個周期后輸出擬合值,我們與手工計算的實際值作比較,精度達到了10-6數量級,滿足預期值。

圖3 流水線架構實現
本實施例中基于Remez算法的Sigmoid函數硬件高效率實現方法是:首先采用Remez最佳一致算法對Sigmoid函數進行四次多項式分段逼近,然后用流水線結構優化硬件實現模塊。Remez給出了逐次逼近的思想,提出求連續函數的最佳一致逼近多項式的近似算法,取得了良好效果;由Remez提出的近似算法由以下三步構成:
第1步:在[a,b]上選 n + 2 個由小到大排列的初始點列{x1, x2, ...,xn+2}作為近似交錯點組,并設置精度ε>0;
第2步:求解獲得近似多項式 Pn(x ) 和近似偏差′(f,x);
綜合考慮逼近的精確程度以及硬件實現的特殊性,本實施例中在區間[0,8]分為5段逼近模塊,5段區間分別為[0,0.5],[0.5,1],[1,2],[2,4],[4,8],獲得Sigmoid函數各段逼近多項式如表1所示。

表2 Sigmoid函數各段逼近多項式
根據Sigmoid函數的性質可知在區間[8,+∞]和[-∞,-8]距離1和0的誤差小于。如果總體誤差控制在以內,三次多項式就可以達到要求。為了便于硬件二進制處理,選擇區域左右端點均為2的冪次。
流水線結構(pipeline architecture)是指在系統處理數據時,每個時鐘脈沖都接受下一條處理數據的指令。流水線機構提高了系統處理數據的速度,同時對時序有嚴格的要求。
通過在quartusⅡ用Verilog HDL硬件語言編寫程序然后結合modelsim強大的仿真功能進行聯合仿真,Sigmoid函數時序仿真波形符合預期要求。在仿真測試階段,通過輸入區間范圍內的一組穩定遞增的數據,每過5個時鐘周期輸入一個data值,采用的流水線結構第一組數據會在45個周期后輸出擬合值,通過與手工計算的實際值作比較,精度達到了10-6數量級,滿足預期值。
本文運用Remez算法構造多項式逼近Sigmoid函數,優化多項式逼近后的Sigmoid函數硬件實現架構,對優化后的多項式逼近的Sigmoid函數進行verilog硬件語言建模,并進行仿真分析通過算例分析證明了本文所采用的使用Remez算法構造多項式逼近Sigmoid函數擬合誤差較低,運算速度快,精度較高,滿足預期值,達到了高效率的硬件實現。