樊宏偉,刁曉飛,張福民,薛 梓,董欣媛,鐵咪咪
(1.天津大學(xué) 精密儀器與光電子工程學(xué)院,天津 300072;2.中國(guó)計(jì)量科學(xué)研究院,北京 100029;3.北京信息科技大學(xué) 儀器科學(xué)與光電工程學(xué)院,北京 100192)
激光干涉儀在精密測(cè)量、加工、定位等領(lǐng)域有著廣泛的應(yīng)用[1~4]。通過(guò)細(xì)分激光干涉儀輸出信號(hào),可達(dá)到納米甚至皮米級(jí)的分辨率[5,6]。CORDIC算法具有運(yùn)算簡(jiǎn)單、使用較少硬件資源的同時(shí)能夠保持著較高的分辨率和較快的處理速度等優(yōu)點(diǎn)[7,8],在激光干涉信號(hào)處理中有著廣泛的應(yīng)用。
在干涉信號(hào)處理系統(tǒng)中,關(guān)于CORDIC算法的研究主要是針對(duì)硬件實(shí)現(xiàn)該算法時(shí)資源消耗的優(yōu)化、處理速度的提高、迭代次數(shù)對(duì)分辨率的影響等[5,9,10];但對(duì)于該算法的自身誤差對(duì)激光干涉儀位移測(cè)量的影響的研究較少。王曉娜等[11]對(duì)光柵數(shù)字細(xì)分的CORDIC算法總量化誤差進(jìn)行了分析,對(duì)激光干涉信號(hào)處理系統(tǒng)中由CORDIC算法引入的總量化誤差分析有一定參考意義。本文在對(duì)干涉信號(hào)研究過(guò)程中發(fā)現(xiàn),基于CORDIC算法的單頻激光干涉測(cè)量中存在半波長(zhǎng)誤差,該誤差出現(xiàn)具有較強(qiáng)的隨機(jī)性,且出現(xiàn)概率較低,即使出現(xiàn)也只在干涉信號(hào)的1個(gè)周期內(nèi)出現(xiàn)1次,極易被忽略,經(jīng)常被誤認(rèn)為環(huán)境噪聲誤差,很少引起研究人員的關(guān)注。在多波長(zhǎng)絕對(duì)測(cè)距領(lǐng)域針對(duì)該半波長(zhǎng)誤差有一定的研究基礎(chǔ)[12,13],可對(duì)單頻激光干涉測(cè)量中的半波長(zhǎng)誤差研究提供借鑒。
本文針對(duì)該半波長(zhǎng)誤差進(jìn)行了深入研究,首先設(shè)計(jì)了以FPGA為處理器,CORDIC算法為細(xì)分方法的干涉信號(hào)處理系統(tǒng)。通過(guò)分析該誤差的特點(diǎn),確定了該誤差的來(lái)源,最終提出了一種基于修正表的CORDIC算法相位補(bǔ)償技術(shù)消除該誤差。
單頻激光干涉儀輸出的干涉信號(hào)為2路正、余弦信號(hào),可表示為[14]:
(1)
由式(1)可得
(2)
在激光干涉測(cè)量系統(tǒng)中,干涉信號(hào)的相位變化Δθ0為:
(3)
則:
(4)
式中:k為光學(xué)細(xì)分因子(本文取k=2);L為被測(cè)目標(biāo)的位移;λ為光在空氣中的波長(zhǎng);N和n分別為干涉信號(hào)相位的整數(shù)部分和小數(shù)部分。
由于激光干涉系統(tǒng)為相對(duì)位移測(cè)量系統(tǒng),被測(cè)目標(biāo)運(yùn)動(dòng)方向包括靠近和遠(yuǎn)離參考鏡2個(gè)方向,因此在信號(hào)處理時(shí)需要根據(jù)輸入干涉信號(hào)對(duì)被測(cè)位移辨向。
將輸入干涉信號(hào)轉(zhuǎn)換為2路相位差為90°的方波信號(hào),通過(guò)判別2路方波的變化確定整數(shù)部分N和方向,如圖1所示。當(dāng)2路方波的幅值由[0,1]變?yōu)閇1,1],干涉信號(hào)變化一個(gè)周期,并規(guī)定此方向?yàn)檎?,N加1;當(dāng)2路方波的幅值由[1,1]變?yōu)閇0,1]時(shí),方向?yàn)榉聪?,N減1。
圖1 信號(hào)辨向細(xì)分原理圖Fig.1 Signal direction discrimination and subdivision
通過(guò)計(jì)算干涉信號(hào)的相位θ0確定小數(shù)部分n的值,n=θ0/(2 π),θ0∈[0,2 π]。
圖2為干涉信號(hào)經(jīng)AD變換器采樣后輸入到信號(hào)處理系統(tǒng)中。干涉信號(hào)同時(shí)進(jìn)入整數(shù)相位計(jì)算模塊和小數(shù)相位計(jì)算模塊分別計(jì)算N和n。由于2個(gè)模塊的延時(shí)不同,同步模塊使輸出的N和n對(duì)應(yīng)于同一時(shí)刻的干涉信號(hào),N和n相加為總相位,計(jì)算干涉信號(hào)對(duì)應(yīng)被測(cè)位移值。
圖2 干涉儀信號(hào)處理系統(tǒng)原理圖Fig.2 Schematic of interferometer signal processing system
小數(shù)相位計(jì)算模塊使用CORDIC算法計(jì)算輸入干涉信號(hào)的相位值θ0。
在不同坐標(biāo)系和操作模式下,CORDIC算法能夠?qū)崿F(xiàn)不同的基本初等函數(shù)計(jì)算[15]。其迭代方程為:
(5)
式中:i=0,1,2,…,m-1,m為迭代次數(shù);θi=arctan(2-i):di為旋轉(zhuǎn)控制因子,其取值為±1。計(jì)算輸入向量的反正切值時(shí),使用該算法的圓周系統(tǒng)和向量模式,此時(shí),di=-sign(xiyi)。
如圖3所示,設(shè)初始向量為A0(x0,y0),經(jīng)過(guò)m次旋轉(zhuǎn)后的結(jié)果為A(xm,ym),此時(shí)的旋轉(zhuǎn)的角度為θ,則有:
圖3 CORDIC算法實(shí)現(xiàn)反正切函數(shù)示意圖Fig.3 Arctangent function sketch based on CORDIC algorithm
(6)
令z0=0,則zm=arctan(y0/x0),即為輸入向量的相位,Km稱(chēng)為伸縮因子,取值:
(7)
CORDIC算法計(jì)算向量A0(x0,y0)的角度時(shí),使初始向量經(jīng)過(guò)多次旋轉(zhuǎn)逼近x軸,旋轉(zhuǎn)的角度為θ。由于在旋轉(zhuǎn)過(guò)程中,使用有限個(gè)θi,導(dǎo)致旋轉(zhuǎn)后向量的角度值θ與真實(shí)角度值θ0之間存在殘余角度dθ[16],即:
(8)
dθ也稱(chēng)為角度近似誤差,其取值可表示為:
|dθ|≤arctan(2-m+1)
(9)
由角度近似誤差導(dǎo)致的計(jì)算誤差稱(chēng)為近似誤差εa。兩者的關(guān)系為:
εa≤dθ×|A0|≤2-m+1|A0|
(10)
式中|A0|為輸入向量的模長(zhǎng)。
由于FPGA中實(shí)現(xiàn)CORDIC算法是基于定點(diǎn)數(shù)運(yùn)算,因此計(jì)算精度與操作數(shù)的位數(shù)b也有關(guān)系。由b導(dǎo)致的誤差稱(chēng)為舍入誤差εr,其取值為:
(11)
CORDIC算法的總量化誤差OQE為近似誤差和舍入誤差的和:
(12)
由式(12)可知,CORDIC算法的總量化誤差與迭代次數(shù)m、操作數(shù)位數(shù)b和輸入向量的最大模值|A0|max有關(guān)。文獻(xiàn)[11]計(jì)算了FPGA中實(shí)現(xiàn)CORDIC算法|A0|max=1.5時(shí)不同m和b對(duì)應(yīng)的OQE值。為了減小CORDIC算法引入的OQE對(duì)干涉信號(hào)處理系統(tǒng)精度的影響,同時(shí)考慮延時(shí)和資源消耗,系統(tǒng)使用11次迭代和19位的操作數(shù)來(lái)實(shí)現(xiàn)相位細(xì)分。此時(shí)OQE為0.000 91 rad。對(duì)應(yīng)位移量化誤差為EL=OQE/(2 π)×λ/2=0.046nm。此誤差值對(duì)干涉系統(tǒng)精度影響較小,滿(mǎn)足設(shè)計(jì)要求。
用Tektronix AFG1062信號(hào)源產(chǎn)生2路標(biāo)準(zhǔn)的正、余弦信號(hào)作為干涉信號(hào),信號(hào)頻率為100 kHz,幅值為±1 V。信號(hào)處理系統(tǒng)ADC采樣率為120 MHz,16 bit,輸入電壓范圍為±1 V。FPGA使用Xilinx Kintex-325T。信號(hào)處理系統(tǒng)連續(xù)記錄8 000個(gè)采樣周期數(shù)據(jù)存入計(jì)算機(jī)進(jìn)行分析,測(cè)試該信號(hào)處理系統(tǒng)性能。
圖4為信號(hào)處理系統(tǒng)的輸出位移曲線(xiàn)。由于干涉信號(hào)為理想的正、余弦信號(hào),其對(duì)應(yīng)位移值應(yīng)是一條直線(xiàn);而在圖中可以發(fā)現(xiàn),部分區(qū)域出現(xiàn)了向下的位移跳變。將信號(hào)處理系統(tǒng)測(cè)量的位移值與理論值做差,得到系統(tǒng)的測(cè)量誤差,見(jiàn)圖5。由圖5可知:各位移跳變點(diǎn)的誤差幅值相等,大小為316.4 nm;其余各點(diǎn)的誤差值接近于0。剔除FPGA位移序列中跳變點(diǎn)后,測(cè)量誤差值小于±0.05 nm,這與設(shè)計(jì)要求相符。
圖4 正向運(yùn)動(dòng)位移曲線(xiàn)Fig.4 Displacement curve of forward motion
圖5 正向運(yùn)動(dòng)誤差曲線(xiàn)Fig.5 Error curve of forward motion
將兩輸入信號(hào)調(diào)換,對(duì)反向運(yùn)動(dòng)的干涉信號(hào)處理。記錄1組反向運(yùn)動(dòng)時(shí)的位移數(shù)據(jù),如圖6所示,位移跳變依舊存在。將正向和反向運(yùn)動(dòng)時(shí)位移序列中產(chǎn)生跳變的點(diǎn)與其前后的點(diǎn)列于表1和表2中。
表1 正向運(yùn)動(dòng)各位移跳變點(diǎn)相關(guān)數(shù)據(jù)Tab.1 Data of displacement jump points in forward motion
表2 反向運(yùn)動(dòng)各位移跳變點(diǎn)相關(guān)數(shù)據(jù)Tab.2 Data of displacement jump points in reverse motion
圖6 反向運(yùn)動(dòng)位移曲線(xiàn)Fig.6 Displacement curve of reverse motion
實(shí)驗(yàn)過(guò)程中還增加了CORDIC算法的迭代次數(shù),當(dāng)?shù)螖?shù)增加時(shí),實(shí)驗(yàn)數(shù)據(jù)中仍出現(xiàn)了位移跳變,但出現(xiàn)概率有所下降。
由實(shí)驗(yàn)分析可知,該粗大誤差特點(diǎn)有:(1) 出現(xiàn)誤差的點(diǎn)一定在干涉信號(hào)相位零點(diǎn)附近,此時(shí)整數(shù)N變化正確;(2) 在誤差點(diǎn)上n的計(jì)算結(jié)果與理論值存在較大偏差,原因是CORDIC算法將位于第四象限的干涉信號(hào)對(duì)應(yīng)的小數(shù)相位n計(jì)算為0(應(yīng)接近于1);(3) 該誤差大小約為316.4 nm,即干涉光源波長(zhǎng)的1/2;(4) 該誤差并不在每個(gè)N變化的時(shí)刻出現(xiàn),存在一定的隨機(jī)性,隨著迭代次數(shù)的增加出現(xiàn)的概率會(huì)降低。
向量A(0,1)與x軸重合,相位值θ0=0。但使用CORDIC算法計(jì)算該向量的相位時(shí),由于角度近似誤差的存在,其輸出可能不等于0;同理,向量為(1,yl),yl→0時(shí),理論相位值θ0=±θl,CORDIC算法計(jì)算該向量的相位值時(shí)有可能符號(hào)相反。
表3為迭代次數(shù)等于11~18時(shí),CORDIC算法計(jì)算的向量(1,0)、(1,1/215)、(1,-1/215)相位值??梢钥闯?,隨著迭代次數(shù)不同,輸出相位θ在0相位附近會(huì)發(fā)生變化,甚至出現(xiàn)符號(hào)相反的情況(表3中第四象限的相位值用負(fù)相位表示)。
表3 輸入向量在x軸正半軸附近時(shí)CORDIC算法輸出相位Tab.3 Output phase of CORDIC algorithm when input vector is near the positive half axis of x-axis ×10-8 rad
干涉信號(hào)的李薩茹圖如圖7所示,設(shè)當(dāng)前周期N=N0。正向時(shí),輸入向量逆時(shí)針旋轉(zhuǎn),n從0增加至1,在x軸正半軸處N=N0+1,如圖7(a)所示;反向時(shí),輸入向量順時(shí)針旋轉(zhuǎn),n從1減小至0,在x軸正半軸處N=N0,下一時(shí)刻N(yùn)=N0-1,如圖7(b)所示。信號(hào)處理系統(tǒng)按照此規(guī)則對(duì)干涉信號(hào)處理得到總相位。
圖7 干涉信號(hào)李薩茹圖Fig.7 Lissajou curves of interference signal
由于角度近似誤差的影響,在信號(hào)周期變化的臨界處(即在干涉信號(hào)與x軸正半軸重合時(shí)),CORDIC算法計(jì)算的相位θ可能會(huì)產(chǎn)生歧義,導(dǎo)致位移產(chǎn)生半波長(zhǎng)大小的粗大誤差。以正向運(yùn)動(dòng)為例說(shuō)明產(chǎn)生的4類(lèi)粗大誤差及其來(lái)源。
① 當(dāng)干涉信號(hào)位于第四象限,其y分量很小,信號(hào)與x軸即將重合,理論的n接近于1。但CORDIC算法計(jì)算的相位值θ等于0,即n等于0,此時(shí)產(chǎn)生負(fù)的半波長(zhǎng)誤差,表1和表2位移跳變屬于此類(lèi)。
② 干涉信號(hào)位于第四象限,且靠近x軸,理論的n→1。但CORDIC算法計(jì)算的相位值θ可能大于0,即n大于0,此時(shí)產(chǎn)生負(fù)的半波長(zhǎng)誤差。
③ 當(dāng)干涉信號(hào)與x軸正半軸重合時(shí),理論的n等于0。但CORIC算法計(jì)算的相位值θ可能小于0,即n→1,產(chǎn)生正的半波長(zhǎng)誤差。
④ 干涉信號(hào)與x軸正半軸重合后繼續(xù)正向運(yùn)動(dòng),信號(hào)位于第一象限。當(dāng)干涉信號(hào)的y分量很小時(shí),理論的相位值n→0,但CORDIC算法計(jì)算的相位值可能小于0,即n→1,也會(huì)產(chǎn)生正的半波長(zhǎng)誤差。
負(fù)向運(yùn)動(dòng)的半波長(zhǎng)誤差與正向運(yùn)動(dòng)的半波長(zhǎng)誤差情況類(lèi)似。表4和表5列出了正向、反向運(yùn)動(dòng)時(shí),干涉信號(hào)在x軸正半軸及其前后一個(gè)時(shí)刻的理論值和CORDIC算法的計(jì)算值之間的差異,以及由此導(dǎo)致的位移差類(lèi)型。
表4 正向運(yùn)動(dòng)半波長(zhǎng)的誤差來(lái)源Tab.4 Sources of half-wavelength error in forward motion
表5 反向運(yùn)動(dòng)半波長(zhǎng)誤差來(lái)源Tab.5 Sources of half-wavelength error in reverse motion
由于在數(shù)字系統(tǒng)中,計(jì)算相位的算法通過(guò)有限位的操作數(shù)和有限的迭代次數(shù)實(shí)現(xiàn),輸出相位總是存在計(jì)算誤差,例如CORDIC算法。算法的操作數(shù)位數(shù)和迭代次數(shù)滿(mǎn)足要求時(shí),對(duì)于一般的應(yīng)用,該計(jì)算誤差的影響可以容忍,但在干涉系統(tǒng)設(shè)計(jì)中,涉及到整數(shù)N和小數(shù)n的結(jié)合。如表3所示,在干涉信號(hào)相位0點(diǎn)附近,CORDIC算法的計(jì)算誤差使得輸出相位θ跨過(guò)了[2 π-,0+],在這個(gè)區(qū)間內(nèi)具有不確定性。在小數(shù)相位n與整數(shù)N結(jié)合時(shí),可能會(huì)發(fā)生表4和表5列出的4種情況,使得總相位可能比實(shí)際值大1或者小1,從而導(dǎo)致干涉信號(hào)處理系統(tǒng)輸出的位移可能產(chǎn)生正負(fù)半波長(zhǎng)誤差。為此,需要在信號(hào)處理系統(tǒng)中加入修正表,對(duì)CORDIC算法計(jì)算特殊向量的相位進(jìn)行修正,以避免計(jì)算位移時(shí)產(chǎn)生粗大誤差,誤差修正表見(jiàn)表6。
表6 消除半波長(zhǎng)誤差修正表Tab.6 Correction table for eliminating half-wave lenghth error
干涉信號(hào)位于第一象限時(shí),若CORDIC算法輸出的相位值在第四象限,則令n=0;干涉信號(hào)位于第四象限時(shí),若CORDIC算法輸出的相位值在第一象限或x軸正半軸上,則令n=1;干涉信號(hào)位于x軸正半軸時(shí),令n=0。修正規(guī)則中將第一象限部分干涉信號(hào)對(duì)應(yīng)的相位小數(shù)n近似等于0,第四象限部分干涉信號(hào)對(duì)應(yīng)的n近似等于1,這會(huì)引入誤差,但該誤差值的大小可用式(10)計(jì)算,由式(12)知該誤差小于量化誤差OQE,對(duì)信號(hào)處理系統(tǒng)的輸出位移影響較小。
以3.1節(jié)的實(shí)驗(yàn)條件對(duì)修正后的信號(hào)處理系統(tǒng)進(jìn)行驗(yàn)證,同時(shí)記錄未修正和修正后的數(shù)據(jù)。圖8是迭代次數(shù)n為11時(shí),對(duì)CORDIC算法輸出未修正和修正后的位移曲線(xiàn),由圖可知該粗大誤差已被有效消除且沒(méi)有導(dǎo)致信號(hào)處理系統(tǒng)的總誤差增加。
圖8 迭代次數(shù)為11時(shí)未修正和修正后的位移曲線(xiàn)Fig.8 Uncorrected and corrected displacement curves with 11 iterations
表7列出了粗大誤差點(diǎn)和其前后各點(diǎn)的相關(guān)值,該位移序列中所有粗大誤差均是由于CORDIC算法將第四象限干涉信號(hào)的相位值計(jì)算為0造成的,即為表4中的第①類(lèi)誤差,經(jīng)信號(hào)處理系統(tǒng)修正后該時(shí)刻干涉信號(hào)對(duì)應(yīng)的n被修正為1,信號(hào)處理系統(tǒng)輸出的位移值也與理論值接近。
表7 圖8中各誤差點(diǎn)未修正數(shù)據(jù)和修正后數(shù)據(jù)對(duì)比Tab.7 Comparisons of uncorrected and corrected data for each error point in Fig.8
本文研制了基于CORDIC算法的單頻激光干涉信號(hào)處理系統(tǒng),確定了CORDIC算法的迭代次數(shù)和位數(shù)。研究發(fā)現(xiàn)信號(hào)處理系統(tǒng)計(jì)算位移時(shí)存在半波長(zhǎng)粗大誤差,該誤差隨機(jī)出現(xiàn)且符號(hào)不定。在本文的干涉信號(hào)處理系統(tǒng)中表現(xiàn)為CORDIC算法的角度近似誤差使得0相位附近的干涉信號(hào)輸出相位可能發(fā)生符號(hào)錯(cuò)誤,在干涉信號(hào)小數(shù)n與整數(shù)N相加時(shí)出現(xiàn)±1誤差,最終導(dǎo)致位移測(cè)量結(jié)果出現(xiàn)半波長(zhǎng)誤差。為此提出了一種基于修正表的CORDIC算法相位補(bǔ)償技術(shù),對(duì)CORDIC算法輸出的相位進(jìn)行修正,使其與輸入干涉信號(hào)的理論相位值符號(hào)一致。實(shí)驗(yàn)結(jié)果表明該補(bǔ)償技術(shù)能夠有效消除粗大誤差,且不增大干涉系統(tǒng)的總量化誤差。該補(bǔ)償技術(shù)對(duì)基于CORDIC算法的單頻激光干涉信號(hào)處理系統(tǒng)具有一定的應(yīng)用價(jià)值。