文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2011)09-0070-04
當(dāng)前,非接觸式測量已經(jīng)逐漸取代接觸式測量,,成為測量發(fā)展的方向,。而在各種各樣的非接觸式測量方法中,光纖干涉投射技術(shù)測量物體表面形貌的方法,,由于其光路具有柔軟,、形狀可變、傳輸距離遠(yuǎn),、抗干擾能力強(qiáng)等優(yōu)點,,得到了越來越廣泛的應(yīng)用,尤其在各種有強(qiáng)電磁干擾,、易燃易爆等惡劣環(huán)境中,,光纖干涉投射測量技術(shù)更是有著很高的應(yīng)用價值。
在光纖干涉投射技術(shù)中,,裸露在空氣中的光纖容易受到溫度,、振動的影響,使臂長差發(fā)生變化,,進(jìn)而產(chǎn)生光相位的變化,,導(dǎo)致干涉條紋漂移,從而影響到測量的精度[1],。交流相位跟蹤零差補(bǔ)償技術(shù)(PTAC)是實現(xiàn)光纖相位變化檢測和誤差補(bǔ)償?shù)囊环N關(guān)鍵技術(shù)[2],,其中涉及信號解調(diào)和相位求解,求解反正弦是相位求解的一種主要方法[2]。在FPGA中,,傳統(tǒng)的求解反正弦函數(shù)的主要方法是查找表法[3],,查找表數(shù)據(jù)量的大小和精度緊密相關(guān),在高精度下,,查找表法需要大量存儲單元,,另外也需要校正算法來計算未計入表中的點,這樣就對處理器資源提出很高的要求,。
針對傳統(tǒng)反正弦函數(shù)求解方法的缺點,,本文采用CORDIC算法求解反正弦值,得到光相位變化并在FPGA中設(shè)計了CORDIC算法實現(xiàn)的流水線結(jié)構(gòu),,從而達(dá)到了對光相位變化的實時檢測,。同時,提出采用查找表配合拋物線插值校正算法解決CORDIC算法在運算中存在的“死區(qū)”問題,。通過實驗驗證該了方法的可行性,。
1 系統(tǒng)結(jié)構(gòu)
光纖干涉投射系統(tǒng)由激光器、聚焦透鏡和3 dB耦合器等組成,。激光器發(fā)出的激光經(jīng)過聚焦透鏡耦合到光纖,,經(jīng)3 dB耦合器分光后由兩光纖臂輸出。兩光纖輸出端可被看作是楊氏雙孔干涉中的兩個小孔,,其輸出光由同一點光源發(fā)出,,頻率相同,具有恒定的相位差,,滿足楊氏雙孔干涉條件,,從而在輸出端產(chǎn)生干涉條紋。在實際測量中,,溫度,、振動的影響使光纖發(fā)生臂長差變化,從而使光相位發(fā)生變化,,導(dǎo)致干涉條紋漂移,。為解決這一問題,通過PTAC對光相位進(jìn)行調(diào)制解調(diào)得到光相位變化信息并對相位誤差進(jìn)行補(bǔ)償,。
如圖1所示,,光纖干涉投射交流相位跟蹤零差補(bǔ)償系統(tǒng)由激光器、聚焦透鏡,、3 dB耦合器,、PZT和信號調(diào)理等部分組成。兩輸出臂分別纏繞在兩個PZT上,,一路作為信號臂對光相位進(jìn)行調(diào)制,,另一路用作控制和補(bǔ)償,。兩條輸出臂投射端面存在反射,反射的光返回到3 dB耦合器中發(fā)生干涉,,構(gòu)成馬赫-澤德干涉儀[4],,干涉的光由光電探測器PD接收。信號臂反射回耦合器的光包含光相位調(diào)制信息,,同時也存在著由環(huán)境影響產(chǎn)生的光相位變化信息,。兩束反射光在耦合器中發(fā)生干涉,則光相位調(diào)制信息轉(zhuǎn)化為光強(qiáng)變化,,再由光電探測器將光強(qiáng)變化轉(zhuǎn)化為電信號,。
經(jīng)過AD轉(zhuǎn)換后,輸入FPGA進(jìn)行計算,,通過求解反正弦求出?琢,。改變驅(qū)動器的直流偏置,即改變待測鏡和參考鏡的相位差?琢,。再經(jīng)過數(shù)模轉(zhuǎn)換,、高壓放大,通過控制PZT2調(diào)整另一輸出臂的長度,,使兩光纖臂相位差保持為一正弦函數(shù),,消除溫度振動等環(huán)境因素帶來的影響。
2 反正弦算法實現(xiàn)
2.1 反正弦算法原理
基于CORDIC算法計算反正弦,。數(shù)字信號處理中常常會遇到求解超越函數(shù)的問題,,如求解矢量旋轉(zhuǎn)、反三角函數(shù)運算,、雙曲函數(shù)等,CORDIC是為了這些問題而提出的[5],。CORDIC基本思想是用一組確定的角度不斷擺偏去逼近所求的角度,,而這一組角度與運算基數(shù)(2i)有關(guān)。在硬件電路中,,CORDIC運算可以只通過加減操作和移位操作實現(xiàn),,大大節(jié)約了資源。CORDIC算法可由式(3),、(4),、(5)、(6)給出[6],。其中,,(xi,yi)是矢量的坐標(biāo),,zi為剩余未旋轉(zhuǎn)的角度,。
2.2 反正弦程序設(shè)計
2.2.1 字長設(shè)計
輸入值范圍為[-1,,1],輸入FPGA的初值c為12位,。選第一位為符號位,,第二位為整數(shù)位,后10位為小數(shù)位,。在FPGA中,,使用浮點形式計算小數(shù)比較復(fù)雜,因此,,將小數(shù)部分左移10位,,化成定點形式運算。CORDIC的計算次數(shù)取決于xi,、yi的小數(shù)位數(shù),。如式(8),用yi與輸入初值c比較,,如果yi的小數(shù)位為10位,,則最多進(jìn)行10次CORDIC計算,精度很難保證,。因此,,設(shè)計xi、yi的小數(shù)位為22位,,在c后面補(bǔ)0,,補(bǔ)足22位小數(shù)位,則最多可進(jìn)行22次CORDIC計算,。因為z的值域范圍為[-1.570 8 rad,,1.570 8 rad],將z設(shè)計成25位,,z[24]為符號位,,z[23:22]為整數(shù)位,z[21:0]為小數(shù)位,。
2.2.2 實現(xiàn)結(jié)構(gòu)的設(shè)計
在FPGA中,,CORDIC的實現(xiàn)結(jié)構(gòu)可以選擇迭代結(jié)構(gòu)或流水線結(jié)構(gòu)。迭代結(jié)構(gòu)是直接由公式寫出循環(huán)語句,,處理完當(dāng)前數(shù)據(jù)才可以處理下一個數(shù)據(jù),,缺點是效率低。本設(shè)計采用流水線結(jié)構(gòu),,流水線結(jié)構(gòu)在數(shù)據(jù)處理的同時,,還能繼續(xù)輸入和處理后續(xù)數(shù)據(jù),提高了數(shù)據(jù)吞吐率,。此外,,設(shè)計中采用前端數(shù)據(jù)處理加22級CORDIC計算加后端處理,,第一個數(shù)據(jù)需要24個時鐘周期處理完畢,之后每個周期都可以輸出一個處理結(jié)果,,可以顯著提高數(shù)據(jù)處理速度,。
2.2.3 CORDIC結(jié)構(gòu)
本設(shè)計總共有22級CORDIC計算模塊,第i級CORDIC計算模塊如圖3所示,。yi與|ci|比較,,決定di的值,再根據(jù)式(7)來計算xi+1,、yi+1,、zi+1,同時傳遞輸入值的符號位,,在流水線的后端處理模塊處理,。若輸入c[11]為1,則結(jié)果為-arcsinc,;若輸入c[11]為0,,則結(jié)果為arcsinc。
3 算法校正
輸入數(shù)據(jù)范圍為[-1,,1],,將計算結(jié)果與真實結(jié)果比較,得到誤差分布如圖4所示,。
由圖4可見,,在橫坐標(biāo)絕對值為0.6、0.8,、0.9附近出現(xiàn)較大誤差,,最大誤差達(dá)到10-1數(shù)量級。CORDIC算法使用的是一種數(shù)值計算逼近的思想,,增減的步長值是離散的,,為arctan(2i)。在橫坐標(biāo)絕對值為0.3,、0.6、0.8,、0.9附近,,CORDIC計算存在“死區(qū)”。本文采用查找表和拋物線插值校正,,在誤差值較大的區(qū)間[c1,,c3],令:
在前端數(shù)據(jù)處理中判斷輸入值是否在需要校正的區(qū)間,,若在則進(jìn)行拋物線插值校正,。用少量查找表存儲校正區(qū)間端點的反正弦值和分母的比值,。選用FPGA為32 bit,在其中設(shè)計乘法運算時,,乘數(shù)和被乘數(shù)最高為16 bit才不會使數(shù)據(jù)溢出,。在所有拋物線插值校正系數(shù)中,區(qū)間[0.95,,0.96]上拋物線插值校正的一次項系數(shù)最大為22.108 9,。因此選擇高5位為整數(shù)位,低11位為小數(shù)位進(jìn)行運算,。
4 實驗與仿真
CORDIC程序流程圖如圖5所示,,初始化之后,先判斷輸入值c是否在需要校正的區(qū)間,。若是,,則進(jìn)入拋物線插值校正運算;否則進(jìn)行CORDIC運算,,使x0=1/An,,y0=0,z0=0,。CORDIC運算計算出一個小數(shù)的反正弦值需要24個時鐘周期,,為了保證流水線的機(jī)能,當(dāng)輸入值c在需要校正的區(qū)間時,,插值計算后的數(shù)據(jù)在CORDIC運算模塊中直接傳輸,。計算出反正弦值后,判斷輸入值c的符號位,,如果是0,,則c為正數(shù),反正弦值也為正數(shù),;如果是1,,則c為負(fù)數(shù),反正弦值也為負(fù)數(shù),。
仿真軟件采用ModelSim SE PLUS 6.2b,。輸入的c值范圍為[-1,1],,存放在ModelSim的測試激勵文件中,。處理一個數(shù)據(jù)需要24個時鐘周期,之后每個周期都能輸出一個數(shù)據(jù),,如圖6所示,。
將仿真后的數(shù)據(jù)導(dǎo)入Matlab得到反正弦仿真曲線,如圖7(a)所示,,并與理想值對比,,得到如圖7(b)所示誤差曲線,,CORDIC計算部分弧度值精度達(dá)到10-4數(shù)量級,經(jīng)過校正的部分,,誤差從10-1數(shù)量級降到10-4數(shù)量級,。
本設(shè)計采用流水線結(jié)構(gòu),提高了數(shù)據(jù)吞吐率,。仿真實驗表明,,光相位的誤差精度達(dá)到10-4數(shù)量級,精度較高,,且具有較高的運算速度,,適合大數(shù)據(jù)量高速處理。
參考文獻(xiàn)
[1] Duan FaJie,,Zhang Cong,,Zhang Chao,et al.Fourier transform profilometry based on fiber-optic interferometric projection[C],,2009 2nd International Congress on Image and Signal Processing.2009.
[2] 李超.邁克爾遜型全光纖加速度地震檢波器理論與實驗研究[D].天津:天津大學(xué),,2007.
[3] 付雷,陳淑芬,,孟彥斌.?dāng)?shù)字式開環(huán)單模光纖陀螺中求arcsine的查表和線性插值法[J].北京理工大學(xué)學(xué)報,,2003,23(4):499-502.
[4] 孟克.光纖干涉測量技術(shù)[M].哈爾濱:哈爾濱工程大學(xué)出版社,,2008:67-74.
[5] RAY A.A survey of CORDIC algorithms for FPGA based computers[C].Proceeding.ACM/SIGDA Conference,,1998:191-200.
[6] CHANG Y K,Swartzlander.An analysis of the CORDIC algorithm for direct digital frequency synthesis[C].In:IEEE International Conference on ASAP.California,,USA:IEEE Press,,2002:111-119.