徐項項,吳 陽,蘇 杭,劉金龍,楊慧珍,2,龔成龍
(1.江蘇海洋大學 電子工程學院,江蘇 連云港 222005;2.江蘇省海洋資源開發(fā)研究院,江蘇 連云港 222005)
隨機并行梯度下降算法(stochastic parallel gradient descent algorithm,SPGD)是目前被廣泛應用的無波前探測自適應光學系統(tǒng)控制[1-6],由美國陸軍研究實驗室Voronstov在同時擾動隨機近似控制算法和隨機逼近理論基礎上開發(fā)的一種無波前探測自適應光學系統(tǒng)控制算法[7]。該算法無需波前傳感和相位重構(gòu),系統(tǒng)復雜性大大降低,但算法迭代執(zhí)行方式使得自適應光學系統(tǒng)收斂速度慢。目前SPGD算法的實現(xiàn)方式大致可以分為3種,一是通過軟件編程在PC(personal computer)機上實現(xiàn)[8-9],二是使用混合超大規(guī)模集成電路(mixedmode VLSI)[10],三是使用FPGA(field programmable gate array)[11-12]集成電路實現(xiàn)[13-15]。方法1靈活,但系統(tǒng)收斂速度慢,工作帶寬較低。方法2迭代速度快,實時性強,但硬件模擬電路復雜,成本高且不能重復編程,一旦成品無法進行修改。方法3可重復編程,算法實現(xiàn)靈活,且可將FPGA配置成滿足需求的任何電路。但目前FPGA實現(xiàn)SPGD算法技術(shù)不能滿足不同單元變形鏡,僅適用于固定單元變形鏡,降低了FPGA實現(xiàn)SPGD控制算法的通用性。另外,F(xiàn)PGA內(nèi)部對串行傳入的圖像數(shù)據(jù)不執(zhí)行矩陣恢復,最終將導致通過FPGA實現(xiàn)變形鏡控制電壓計算的不精確,影響自適應光學系統(tǒng)的校正能力。
本文提出把采集光斑圖像灰度值以串行方式存入FPGA內(nèi)部ROM核中,獲取圖像數(shù)據(jù)的地址位設定判斷條件,通過矩陣恢復方法恢復圖像數(shù)據(jù),確保算法性能指標計算的準確性。通過改變隨機序列的維數(shù),便可滿足不同單元數(shù)的變形鏡需求,提高了實現(xiàn)方案的通用性。首先使用TimeGen軟件對SPGD算法的主要功能模塊進行時序分析,再利用Vivado軟件完成SPGD算法的隨機擾動電壓生成、性能指標計算和變形鏡控制電壓的計算與輸出,并對FPGA進行代碼編寫。最后將各個模塊計算得到的數(shù)據(jù)與使用Matlab軟件計算得到的數(shù)據(jù)進行對比分析,以驗證本文所提方法的各個模塊計算的合理性和準確性,為實際應用提供參考。
如圖1所示,無波前探測自適應光學系統(tǒng)主要由波前校正器、圖像傳感器、波前控制模塊等組成。帶有畸變的光波經(jīng)過波前校正器反射,再經(jīng)透鏡聚焦到圖像傳感器上??刂扑惴ɑ趫D像傳感器信息計算出波前校正器控制信號。數(shù)模轉(zhuǎn)換器DAC和高壓放大器HVA將結(jié)果傳給波前校正器形成閉環(huán)控制系統(tǒng)。本文以97單元變形鏡作為波前校正器,97單元變形鏡每個驅(qū)動器的位置排布如圖2所示,各驅(qū)動器間呈正方形排布,小圓圈為驅(qū)動器符號,大圓圈為變形鏡通光孔徑。
圖1 無波前探測自適應光學系統(tǒng)Fig.1 Adaptive optical system without wavefront detection
圖2 97單元變形鏡驅(qū)動位置排布Fig.2 Position arrangement of 97-DM
SPGD算法對控制參量施加正負隨機擾動,采集圖像數(shù)據(jù)計算性能指標變化量 ?J。通過梯度計算控制參數(shù),當目標函數(shù)向極大方向優(yōu)化,增益系數(shù)γ取負;反之,γ取正。以迭代的方式尋找性能指標極值完成像差校正。第k次迭代時,控制參數(shù)向量u={u1,u2,···,un}的計算公式為
式中: ?u(k)={?u1,?u2,···,?un}(k)為第k次迭代時施加的擾動參數(shù)向量; γ?J(k)?u(k)為梯度估計;n為波前校正器單元數(shù)。在第k次迭代時,首先生成擾動參數(shù) ?u(k), 把向量u(k)+?u(k)加到波前校正器上,采集圖像信息計算性能指標類似地把參數(shù)u(k)??u(k)施加到波前校正器上,采集圖像信息計算性能指標然后計算再根據(jù)(1)式計算控制參數(shù)u(k+1),重復上述過程。
為保證設計誤差降到最低,首先對SPGD算法各個模塊進行時序分析。利用TimeGen軟件作出SPGD算法隨機擾動電壓的生成、性能指標的計算以及變形鏡控制電壓計算與輸出的時序圖。
隨機擾動電壓需借助多路偽隨機序列生成,97路偽隨機序列可由軟件(如Matlab軟件)產(chǎn)生,且需滿足如下要求:N單元的變形鏡需要N路偽隨機序列、偽隨機序列數(shù)必須是兩兩相互獨立、滿足伯努利分布。一次計數(shù)。q代表偽隨機序列的數(shù)值1和0,d代表隨機擾動的數(shù)值?1和1,對q設置判斷條件,使q與d數(shù)值一一對應。隨機擾動d與擾動幅度 α乘積產(chǎn)生正負隨機擾動電壓dv1和dv2,計數(shù)器Address和偽隨機序列值q以及生成的隨機擾動電壓dv1和dv2的值一一對應,通過時序分析擾動幅度 α設為0.2。
將偽隨機序列轉(zhuǎn)化成coe文件,利用Vivado軟件將coe文件存入ROM核中。FPGA 從ROM核中讀取1組偽隨機序列,產(chǎn)生正負擾動電壓,時序圖如圖3所示。圖3中Clk為時鐘信號,設置計數(shù)器Address作為地址位,讀取ROM核中coe文件。由于FPGA讀取數(shù)據(jù)有一定的延遲,數(shù)據(jù)會在延遲2個周期后開始輸出,計數(shù)器讀取97次完成
圖3 隨機擾動電壓時序圖Fig.3 Timing diagram of random disturbance voltage
FPGA不能使用小數(shù)計算,需人為計算將小數(shù)進行定點設置。擾動幅度為0.2,進行定點設置后,隨機擾動電壓擴大了1 024倍,轉(zhuǎn)化為二進制時,二進制的低十位為小數(shù)位,精度為小數(shù)點后4位,具體值可以通過(2)式計算得到:
式中:α為實際擾動電壓幅度;FPGA_α為FPGA中設 置值擾動幅度的整數(shù)。
根據(jù)參考文獻[8],無波前探測自適應光學系統(tǒng)中一般選取遠場光斑的平均半徑MR(mean radius)作為性能指標,計算方法如(3)式:
式中: (x,y) 表示光斑坐標; (x′,y′)表示質(zhì)心坐標;I(x,y) 表示坐標 (x,y) 處的光強。質(zhì)心 (x′,y′)計算公式為
使用FPGA計算MR需要離散型數(shù)據(jù),將質(zhì)心的公式轉(zhuǎn)化成:
將橫坐標x與其對應光強I(x,:)乘積并累加,對所有的光強I(x,y) 求 和,得到質(zhì)心橫坐標x′,同理求出質(zhì)心縱坐標y′,再根據(jù)(3)式求出MR。FPGA實現(xiàn)SPGD算法性能指標MR的計算是重要環(huán)節(jié),具體流程圖4所示。圖中寄存器X_temp、Y_temp分別表示橫坐標x和縱坐標y與對應光強的乘積,將矩陣元素進行相加得到遠場光強SUM_q。FPGA程序無法進行除法運算,設置3個除法IP核Mr_divide1、Mr_divide2、Mr_divide3來實現(xiàn)質(zhì)心與MR計算,Sqrt IP核用于計算。
圖4 FPGA實現(xiàn)性能指標MR流程圖Fig.4 Flow chart of performance index MR implementation by FPGA
對全局時鐘信號Clk進行分頻得到分頻信號SClk,分別作用于橫坐標x和縱坐標y。在FPGA中計數(shù)器從0開始計數(shù),設置2個計數(shù)器x_cnt、y_cnt,每到時鐘Clk上升沿時,計數(shù)器y_cnt加1,當加到255時,SClk產(chǎn)生上升沿,計數(shù)器x_cnt加1,當x_cnt計數(shù)到255時2個計數(shù)器停止計數(shù)。由于從ROM核中讀取數(shù)據(jù)存在延遲,計算得到的結(jié)果會在開始計數(shù)2個周期后輸出。時序圖如圖5所示,F(xiàn)PGA讀取光斑圖像數(shù)據(jù)會在Address信號延遲2個周期后輸出。
圖5 性能指標MR計算時序圖Fig.5 Timing diagram of performance index MR calculation
FPGA實現(xiàn)變形鏡控制電壓的計算分為預處理部分和計算部分,根據(jù)(1)式u(k+1)=u(k)+γ?J(k)?u(k)可以計算出控制電壓的值,具體流程如圖6所示。預處理部分為增益系數(shù)與擾動幅度的乘積,計算部分為性能指標變化量的計算。設置使能信號KZDY_done作為計算控制電壓的起始信號,kzdy_d(作為隨機擾動電壓模塊輸出的d)為隨機擾動電壓。通過計算第k+1次正負擾動電壓并將結(jié)果再傳輸給變形鏡實現(xiàn)校正。根據(jù)以上分析得到變形鏡控制電壓的時序如圖7所示。
圖6 變形鏡控制電壓流程圖Fig.6 Flow chart of deformable mirror control voltage
第2節(jié)中對SPGD算法主要模塊進行了時序分析,本節(jié)將各個模塊的計算結(jié)果與Matlab結(jié)果進行對比,以驗證本文FPGA實現(xiàn)SPGD算法的準確性和可行性。
將97路偽隨機序列存入FPGA開發(fā)板套件的ROM核中,F(xiàn)PGA 從ROM中讀取一組偽隨機序列,生成隨機擾動電壓的結(jié)果如圖8所示。圖中q表示生成的97個偽隨機數(shù),dv1和dv2分別代表正負隨機擾動電壓,擾動幅度的數(shù)值FPGA_α為200,代入(2)式得到 α為0.1954。由2.1節(jié)隨機擾動電壓生成的時序分析,擾動幅度預設值為0.2。
圖8 隨機擾動電壓Fig.8 Random disturbance voltage
使用Matlab軟件對基于97單元變形鏡的SPGD算法進行分析,給系統(tǒng)添加湍流強度D/r0=5情況下的像差,D表示變形鏡的通光孔徑,r0表示大氣相干長度。擾動幅度的值設為0.2,由Matlab計算的性能指標MR的值為23.0318,對應的波前相位和校正前后光斑如圖9所示。
圖9 D /r0=5時1幀隨機波前畸變及對應的成像光斑Fig.9 One frame of random wavefront distortion and corresponding imaging spot whenD/r0=5
FPGA實現(xiàn)時,將湍流強度D/r0=5的像差做成coe文件存入FPGA中,借助(3)式和(5)式,以及2.2節(jié)FPGA實現(xiàn)MR的計算過程得到性能指標MR的值。計算結(jié)果如圖10所示,將計算結(jié)果與Matlab計算結(jié)果進行對比,如表1所示。
圖10 性能指標計算結(jié)果Fig.10 Calculation results of performance indexes
表1 質(zhì)心結(jié)果對比Table 1 Comparison of centroid results
由計算結(jié)果可以看出FPGA計算的質(zhì)心坐標為(139 465,138 053),轉(zhuǎn)化成小數(shù)后的實際值為(136.1963,134.8174)。性能指標MR為23 584,轉(zhuǎn)化為小數(shù)后的實際值為23.0312。由表1中Matlab計算的質(zhì)心坐標和性能指標數(shù)據(jù)對比,可以看出兩者之間差值為0.0006,以上結(jié)果說明了由FPGA實現(xiàn)性能指標MR時的準確性。
基于3.1節(jié)隨機擾動電壓的生成和3.2節(jié)性能指標MR的計算,設計FPGA實現(xiàn)變形鏡控制電壓的代碼,結(jié)果如圖11所示。FPGA結(jié)果與Matlab結(jié)果數(shù)據(jù)對比如表2所示。
表2 控制電壓計算結(jié)果對比Table 2 Comparison of control voltage calculation results
圖11 控制電壓計算結(jié)果Fig.11 Calculation results of control voltage
由計算結(jié)果可以看出增益系數(shù)r_a的值為819,縮小1 024倍后為0.7998,與選取增益系數(shù)值0.8之間的差值為0.0002。各驅(qū)動器電壓數(shù)值與Matlab計算結(jié)果相比,兩者之間電壓偏差值均在千分之一以內(nèi)。
為保證FPGA計算控制電壓的準確性,以97單元變形鏡為例,在湍流強度D/r0=5的情況下,隨機選取100幀像差,由Matlab和FPGA分別計算每幀像差對應的97個驅(qū)動器控制電壓,并計算Matlab結(jié)果與FPGA結(jié)果的每個驅(qū)動器下100幀像差的均方根誤差,如圖12所示。從圖中縱坐標可以看出Matlab與FPGA分別計算97單元驅(qū)動器的100幀像差的控制電壓均方誤差均保持在千分之一量級。
圖12 97個驅(qū)動器對應的100幀像差的電壓RMS值Fig.12 Voltage RMS value of 100-frame aberration corresponding to 97 drivers
根據(jù)1.1節(jié)97單元驅(qū)動器分布圖,選取驅(qū)動器中心位置第49個驅(qū)動器和第69個驅(qū)動器作為測試對象,分別計算Matlab與FPGA之間的電壓偏差值。圖13表示第49個驅(qū)動器Matlab與FPGA計算的電壓偏差值,圖14表示第69個驅(qū)動器Matlab與FPGA計算的電壓偏差值。從圖中數(shù)據(jù)能看出第49個驅(qū)動器和第69個驅(qū)動器計算的電壓偏差均保持在千分之一以內(nèi),以上數(shù)據(jù)驗證了由FPGA計算控制電壓的準確性。
圖13 第49個驅(qū)動器的100幀電壓偏差值Fig.13 100-frame voltage deviation value of the 49th driver
圖14 第69個驅(qū)動器的100幀電壓偏差值Fig.14 100-frame voltage deviation value of the 69th driver
本文以97單元變形鏡為模型,使用TimeGen軟件對SPGD算法關鍵模塊進行時序分析,再利用Vivado軟件對SPGD算法關鍵模塊進行計算,結(jié)果表明FPGA計算隨機擾動幅度的值、性能指標MR以及控制電壓的值與Matlab計算結(jié)果之差在千分之一以內(nèi)。對100幀像差的97個驅(qū)動器控制電壓進行計算,由Matlab與FPGA計算的控制電壓值均方誤差均保持在千分之一量級,結(jié)果驗證了由FPGA實現(xiàn)SPGD算法的準確性和可行性,為后期基于FPGA的SPGD算法硬件實現(xiàn)和應用提供了基礎。
在實際應用中將vivado編寫的代碼下載到FPGA開發(fā)板,完成FPGA版的開發(fā)和配置,從而達到FPGA直接實現(xiàn)SPGD控制算法的目的。FPGA的運算速度一般為ns級,解決了現(xiàn)有SPGD算法本身由于迭代執(zhí)行而導致的自適應光學系統(tǒng)收斂速度慢的問題。利用FPGA實現(xiàn)SPGD控制算法后,自適應光學系統(tǒng)的收斂速度取決于成像系統(tǒng)采集速度和波前校正器的響應速度?;诟邘l的成像器件和響應頻率在Khz以上的波前校正器,即可實現(xiàn)實時校正,滿足應用需求。