高速公路宏觀動態(tài)交通流模型的FPGA仿真實現(xiàn)
高速公路宏觀動態(tài)交通流模型以交通流的集總行為為研究對象,描述了交通流的空間分布及隨時間變化的規(guī)律,能較精確地描述高速公路交通流的真實行為,不僅是交通自動控制系統(tǒng)設(shè)計、分析、仿真決策的基礎(chǔ),也是交通預(yù)報和評價某些交通設(shè)施設(shè)計所需要的。其中,希臘學(xué)者Markos Papageorgiou所提出的Papageorgiou模型,能夠以較小的計算量和滿意的精度描述車道數(shù)目單一、出入匝道無特大流量沖擊的高速公路交通狀況而廣泛應(yīng)用。
本文引用地址:http://2s4d.com/article/201610/308310.htm對交通流模型進行在線仿真,或驗證某算法對實際道路的控制效果時,有時由于交通數(shù)據(jù)龐大或控制算法過于復(fù)雜,往往消耗大量機時。尤其在外場環(huán)境下操作,工控機不僅體積、功耗龐大,還易出現(xiàn)工作失常的現(xiàn)象,在交通控制的實際應(yīng)用中表現(xiàn)欠佳。FPGA技術(shù)高速、低成本、小型化的優(yōu)勢使其理論研究與實際應(yīng)用成為炙手可熱的研究課題,目前已經(jīng)完全具備數(shù)據(jù)運算、信息處理、濾波計算等功能,常常使一些原來比較難解決的技術(shù)瓶頸得以輕松實現(xiàn),從而使產(chǎn)品的可移植性增強,開發(fā)周期大為縮短,性價比大幅提高,同時FPGA可以實現(xiàn)純硬件浮點運算功能,克服定點數(shù)據(jù)對高精度、數(shù)據(jù)范圍較大的運算無能為力的缺陷,更適合科學(xué)與工程計算。因此本文采用浮點數(shù)在FPGA上實現(xiàn)Papa georgiou模型的仿真。
1 高速公路交通流宏觀動態(tài)模型
宏觀動態(tài)交通流模型又稱為交通流連續(xù)介質(zhì)模型,它通過對單向運動的交通流在某時刻t在某一位置x的有關(guān)變量來把握交通的本質(zhì)。各研究組織所提出多種形式交通流模型,其間主要差別在于交通流量、車輛平均速度和車流密度的關(guān)系的表征,以及上下游交通相互作用的描述形式。為了簡化模型使其便于應(yīng)用在實際中,通常根據(jù)高速公路幾何形狀和交通狀態(tài)將其劃分成若干路段,路段可不等距劃分,但應(yīng)保證每段路段車道數(shù)目相同,至多有一個入口、一個出口,每個路段的幾何形狀大致相似,每個路段內(nèi)的交通狀態(tài)近似均一,Papageorgiou模型也采用如圖1所示的分段方式:
基于上述高速公路的分段方式,其數(shù)學(xué)表達式如式(1)~(4)所示:
式(1)~(4)分別是動態(tài)流量模型、動態(tài)交通流密度模型、動態(tài)速度模型和速一密關(guān)系模型,各符號含義見文獻。上述模型涉及到了加減乘除及冪運算,目前Quartus II中有公開的浮點數(shù)運算IP核可實現(xiàn)加減乘除運算,但式(4)中出現(xiàn)有底數(shù)、指數(shù)可能均為浮點數(shù)的冪運算。本文根據(jù)所選參數(shù)進行多項式擬合,將所有運算均限定在加減乘除的浮點數(shù)運算范圍內(nèi)。
2 16位自定義浮點數(shù)數(shù)據(jù)格式
Quartus II軟件自帶的IP核的輸入輸出數(shù)據(jù)采用IEEE754單精度32位浮點數(shù)格式,其數(shù)據(jù)結(jié)構(gòu)表示如下:
其中S為1位符號位,E為8位階碼位,M為尾數(shù)的24位小數(shù)位。調(diào)用QuartusII浮點數(shù)運算IP核實現(xiàn)加減乘除的操作,其資源消耗依次為加減運算消耗LE單元個數(shù)均為1 497,消耗嵌入式乘法器個數(shù)均為0:乘除運算消耗LE單元個數(shù)分別為809、3345,消耗嵌入式乘法器個數(shù)分別為0、7。對一個路段進行仿真時,至少需要6次加法、7次減法、12次乘法、4次除法,僅實現(xiàn)加減乘除運算所消耗FPGA邏輯資源已蔚為壯觀,若要仿真多個路段,將付出巨大的硬件成本,甚至無法實現(xiàn),因此本文在IEEE754浮點數(shù)格式的基礎(chǔ)上采用自定義16位浮點數(shù)格式,編寫浮點運算模塊,盡量減少FPGA資源的消耗,其數(shù)據(jù)結(jié)構(gòu)為:
其中S為1位符號位,E為6位階碼位,M為尾數(shù)的9位小數(shù)位,隱藏整數(shù)位1,其表示的數(shù)據(jù)值下式所示:
上式中,當S為0時,A為正數(shù),當S為1時,A為負數(shù);E-31為浮點數(shù)的指數(shù),指數(shù)可在2-31到231之間變化;尾數(shù)采用原碼表示,整數(shù)部分1為缺省值,不在上述格式中表示;0在上述格式中,階碼和尾數(shù)均為0,符號位可以是任意值。為方便說明自定義浮點數(shù)的運算過程,設(shè)有兩個浮點數(shù)是a和b,其數(shù)據(jù)格式如式(6)所示。
2.1 自定義16位浮點數(shù)加法和減法運算
浮點數(shù)加、減法的操作過程相似,流程圖如圖2所示。
1)對階操作:在兩數(shù)尾數(shù)的小數(shù)部分的高位補1,比較兩數(shù)的階碼是否相同。若相同,直接進入第2)步;若不同,比較兩個數(shù)的階碼大小,令階碼小的尾數(shù)連同高位補的1向右移位,右移的尾數(shù)等于階差的絕對值;
2)符號位操作:加法運算,若兩數(shù)符號相同,則符號位同兩加數(shù);若兩加數(shù)符號相異,符號位由絕對值較大的加數(shù)決定。減法運算,被減數(shù)和減數(shù)的符號相異,則兩數(shù)的絕對值相加;兩數(shù)符號相同,則兩數(shù)相減再取絕對值。結(jié)果的符號位取被減數(shù)的符號位(當被減數(shù)的絕對值較大時)或者是減數(shù)的符號位取反(當減數(shù)的絕對值較大時);
3)歸一化操作:若步驟1)和2)所得結(jié)果為非規(guī)格化數(shù),找出運算結(jié)果的最高位1,由高至低依次將其后部分存入最終結(jié)果,階碼做相應(yīng)的調(diào)整。
2.2 自定義16位浮點數(shù)乘法和除法運算
浮點數(shù)的乘法運算按照以下步驟進行,其算法流程圖如圖3所示。
1)判0操作:乘法運算,檢查兩乘數(shù)是否有0,若有,結(jié)果為0。除法運算,檢查被除數(shù)是否為0,若為0,結(jié)果為0。
2)符號位操作:對兩數(shù)的符號位進行異或操作,確定結(jié)果的符號位。
3)階碼操作:乘法運算,乘積的階碼是(Ea+Eb-31+修正項);除法運算,商的階碼是(Ea-Eb+31+修正項)。修正項的值由4)中非規(guī)格化數(shù)調(diào)整為規(guī)格化數(shù)進行的移位個數(shù)決定。
4)尾數(shù)操作:乘法運算,兩乘數(shù)尾數(shù)的小數(shù)部分的高位補1后相乘,得到乘積的20位初始尾數(shù)d;除法運算,被除數(shù)和除數(shù)尾數(shù)的小數(shù)部分的高位均補1,對1.Ma和1.Mb進行相除操作,令d=1.Ma÷1.Mb,采用移位相減,先比較1.Ma和1.Mb大小,若1.Ma≥1.Mb,則d為1,且令1.Ma=1.Ma-l.Mb;若1.Ma1.Mb,則d為0,且令1.Ma左移一位再次進行比較得到d,依次重復(fù)上述比較過程最終得到商的初始尾數(shù)d。
5)歸一化操作:乘法運算,d[19]、d[18]不同時為0,若d[19]為0,即乘積的整數(shù)為01,則乘積尾數(shù)的小數(shù)部分為d[17:9],修正項為0;若d[19]為1,即乘積的整數(shù)為10或11,則將初始尾數(shù)右移一位,同時乘積指數(shù)加1,修正項為1,乘積尾數(shù)小數(shù)部分為d[18:10]。除法運算,d[9]和d[8]不會同時為0,若d[9]不為0,商的商的初始尾數(shù)的整數(shù)為1,尾數(shù)小數(shù)部分為d[8:0];若d[19]為0,商的初始尾數(shù)的整數(shù)為0,則將初始尾數(shù)左移一位,同時商的階碼減1,修正項為-1,商的尾數(shù)小數(shù)部分為d[7:0]并在低位補0。
將上述操作結(jié)束后得到的符號位、階碼位、尾數(shù)的小數(shù)部分按照自定義浮點數(shù)格式進行排列,得到最終的結(jié)果。
3 自定義浮點數(shù)運算的仿真機綜合分析
為了驗證本文中自定義浮點數(shù)運算模塊的正確性及其誤差大小,且考慮到仿真模型中的變量都為正的浮點數(shù),這里以實數(shù)7.8和5.6為例,分別將其變換為本文中自定義的浮點數(shù)格式,在自行開發(fā)的以EP3C80E484C型號為核心的FPGA上運行,并通過QuartusⅡ軟件中自帶的debug工具軟件查看其運算結(jié)果,其中加減乘除運算的部分結(jié)果如圖4所示。
為了驗證FPGA實際運算結(jié)果的正確性,將上述浮點數(shù)格式的結(jié)果轉(zhuǎn)換成十進制格式,并進行系統(tǒng)誤差對比,如表2所示。
由表2的對比結(jié)果可知,在FPGA運行的16位自定義數(shù)據(jù)格式的加、減、乘、除運算模塊的計算誤差不超過0.1%,能夠滿足宏觀交通流模型的仿真中對計算精度的要求。此外,在保證模型仿真精度的同時,自定義16位數(shù)據(jù)格式的加、減、乘、除運算模塊與Quartus II軟件公開的32位浮點數(shù)運算IP核相比,能夠顯著降低對FPGA資源的消耗,其資源對比如表3所示。
4 模型仿真及綜合分析
基于自定義浮點數(shù)運算模塊,前文以Papageorgiou模型為仿真對象,在FPGA上設(shè)計了交通流仿真模塊。以一段長度為5 km的單向單車道的高速公路為例,將其等分為10段,采用時間設(shè)為T=15 s,模型中其他參數(shù)設(shè)置為:α=0.95,ζ=1,l=1.86,m=4.05,τ=0.005 56 h,ζ=35 km2/h,λ=40 veh/km/lane,Vf=95.1 km/h,kj=110veh/km/ lane。
在初始時刻,假設(shè)各路段密度、速度相同,分別為60 veh/km/lane、30 km/h,并假定駛?cè)敫咚俟返能嚵髁繛楹阒礠0=1 500 veh/h,每個入口匝道車流量也為恒值r=750 veh/h。
在FPGA上對高速公路宏觀模型進行仿真需要注意兩個問題:1)邊界賦值問題,這里采用邊緣賦值條件,令v0(n)=v1(n),k0(n)=Q0/v1(n),k11(n)=k10(n);2)通過多項式擬合方法簡化式(4)中指數(shù)和底數(shù)均為浮點數(shù)的冪運算,并由(7)式進行替換。
Ve[ki(n)]=0.008[ki(n)]3-0.064[ki(n)]2+0.371 4[ki(n)]+92.310 3 (7)
FPGA實現(xiàn)的模型仿真結(jié)果如圖5所示。
其中flag表示結(jié)果輸出標志,count是仿真時間間隔的個數(shù),k5out-k6out和v5out-v6out別是第5、6路段的交通流密度和車輛平均速度。為查驗FPGA的仿真精度,選取count= 1,100時兩組數(shù)據(jù),轉(zhuǎn)換成十進制浮點數(shù)形式,與MATLABA仿真結(jié)果對比,如表4所示。
從表4知,基于FPGA的模型仿真與MATLAB的仿真結(jié)果對比,在仿真初期誤差幾乎為0,隨著仿真時間持續(xù)增長,誤差隨之增大,但總體差距不大,能夠滿足仿真精度的要求。
5 結(jié)束語
1)本文設(shè)計了基于自定義浮點數(shù)的高速公路交通流宏觀動態(tài)模型仿真,并在自行開發(fā)的FPGA電路板上進行了驗證,其中自定義浮點數(shù)運算實現(xiàn)簡單,節(jié)省了FPGA邏輯資源,能夠在保證計算精度的前提下以較快的速度實現(xiàn)模型的仿真,在后續(xù)的交通控制研究中可以進一步在FPGA上實現(xiàn)控制算法的效果驗證;
2)本文的不足之處在于沒有直接實現(xiàn)底數(shù)和指數(shù)全為浮點數(shù)的冪運算,而是根據(jù)所設(shè)定的參數(shù)進行多項式擬合,導(dǎo)致模型仿真精度在一定程度上受到擬合精度的限制。
評論