吳鑫淵,馮國(guó)英
(四川大學(xué)電子信息學(xué)院,成都 610065)
激光角分辨力高、抗干擾能力強(qiáng),可以有效避免微波貼近地面的多徑效應(yīng)和地物干擾問(wèn)題,被廣泛用于測(cè)距領(lǐng)域[1]。相位式激光測(cè)距作為一種高精度、非接觸的測(cè)量方式,在大地、空間位置高精度測(cè)量等領(lǐng)域起著很重要的作用[2]。鑒相方法可分為模擬法和數(shù)字法兩大類(lèi)。模擬鑒相法適應(yīng)鑒別信號(hào)的頻率高,鑒相速度快,但是實(shí)現(xiàn)電路復(fù)雜、元器件要求高、精度差等缺點(diǎn);數(shù)字法通過(guò)采樣模擬信號(hào)轉(zhuǎn)化為數(shù)字量進(jìn)行鑒相,優(yōu)化了硬件結(jié)構(gòu),測(cè)量精度高。近年來(lái),基于高速采樣和數(shù)字運(yùn)算的數(shù)字鑒相方法越來(lái)越多的應(yīng)用在工程中。數(shù)字法主要包括自動(dòng)數(shù)字鑒相法、數(shù)字相關(guān)法和FFT鑒相法。由于激光回波信號(hào)受測(cè)量范圍,光電探測(cè)器件等影響信噪比浮動(dòng)較大,自動(dòng)數(shù)字鑒相法誤差較大;而數(shù)字相關(guān)法限制了鑒相范圍為0~π;FFT鑒相法在進(jìn)行頻譜分析時(shí),若信號(hào)頻率不是頻譜分辨率的整數(shù)倍,則會(huì)出現(xiàn)嚴(yán)重的頻譜泄露和柵欄效應(yīng),造成鑒相誤差[3],故工程中多采用FFT算法的改進(jìn)算法全相位FFT算法進(jìn)行鑒相。2012年中國(guó)科學(xué)院光電研究所緱寧祎等人設(shè)計(jì)了全相位FFT法的FPGA信號(hào)處理方案,利用傅里葉的變換共軛性實(shí)現(xiàn)了高速實(shí)時(shí)鑒相,在500 KHz測(cè)距速率,頻率偏移1%時(shí),鑒相精度可達(dá)0.09度[4],2015年該所張?jiān)评椎热嗽贔PGA上實(shí)現(xiàn)了鑒相精度0.08度的雙頻測(cè)尺鑒相系統(tǒng),通過(guò)控制兩測(cè)尺之間的頻差,有效降低了測(cè)尺之間的干擾,滿(mǎn)足了大尺度空間中相位式激光測(cè)距的應(yīng)用需求[5];2018年上海理工大學(xué)吳丹丹等人在CycloneⅤ系列FPGA上實(shí)現(xiàn)了FFT算法鑒相,在0-100 KHz測(cè)量帶寬下,測(cè)量精度可達(dá)0.01度[6]。
目前,對(duì)于要求高速,實(shí)時(shí)且精度高的測(cè)距應(yīng)用場(chǎng)景,還沒(méi)有成熟的設(shè)計(jì)方案和相關(guān)產(chǎn)品,為了滿(mǎn)足該領(lǐng)域的需求,文中硬件部分選擇現(xiàn)場(chǎng)可編程邏輯器件FPGA,鑒相算法選擇全相位FFT算法,在FPGA上實(shí)現(xiàn)了從AD采集,數(shù)據(jù)流緩存、處理到鑒相結(jié)果的輸出顯示,并基于整個(gè)系統(tǒng)數(shù)據(jù)處理流程提出了一種流水線(xiàn)式的數(shù)據(jù)處理優(yōu)化方法。
全相位FFT具有良好的頻譜分析特性,能夠有效地抑制頻譜旁瓣泄漏[7];在能量中心多譜線(xiàn)范圍內(nèi),具有信號(hào)初相的“相位不變性”[8]。相比于傳統(tǒng)FFT,它不受信號(hào)頻率必須為頻率分辨整數(shù)倍的制約,在實(shí)際工程實(shí)踐中,能顯著提高測(cè)相精度。
全相位FFT相較于傳統(tǒng)FFT法鑒相[9-10],增加了一個(gè)數(shù)據(jù)預(yù)處理過(guò)程,通過(guò)對(duì)采樣數(shù)據(jù)的預(yù)處理得到一個(gè)新數(shù)字序列進(jìn)行FFT變換。
設(shè)定初始信號(hào)頻率為f,初始相位為θ,A為幅值,t為時(shí)間變量,初始信號(hào)為:
X(t)=Acos(2πft+θ)
(1)
設(shè)采樣頻率fn=1/ΔT,ΔT為采樣時(shí)間間隔,n為采樣點(diǎn)數(shù),經(jīng)過(guò)AD采樣后得到信號(hào)的數(shù)字序列X(n):
(2)
全相位FFT的數(shù)據(jù)預(yù)處理過(guò)程如圖1所示。
圖1 全相位FFT預(yù)處理框圖
首先對(duì)2N-1個(gè)采樣點(diǎn)進(jìn)行預(yù)處理,過(guò)程如下:
(1)兩個(gè)寬度為N的漢寧窗函數(shù)進(jìn)行卷積得到新的函數(shù)w1*w2;
(2)新窗函數(shù)對(duì)中心樣點(diǎn)為x(0)的2N-1個(gè)采樣點(diǎn)進(jìn)行加權(quán):
P(n)=(w1*w2)·S(n),n=0,1,…,2N-1
(3)
(3)加權(quán)后的2N-1個(gè)采樣點(diǎn)隔N相加得到新的N點(diǎn)序列:
Q(n)=P(n)+P(n+N),n=0,1,…,N-1
(4)
然后對(duì)新的N點(diǎn)序列Q進(jìn)行傅里葉變換,并整理得:
(5)
其中k為傅里葉變換后的頻率點(diǎn)序數(shù),N為變換點(diǎn)數(shù)??梢缘玫叫盘?hào)的初始相位
(6)
此鑒相模塊應(yīng)用的相位式激光測(cè)距系統(tǒng)如圖2所示,大體分為激光調(diào)制發(fā)射端,激光回波接收端,F(xiàn)PGA鑒相模塊以及電腦數(shù)據(jù)分析4個(gè)部分。激光調(diào)制發(fā)射端包含函數(shù)信號(hào)發(fā)生器、激光二極管以及準(zhǔn)直透鏡;激光回波接收端包含聚焦透鏡及光電探測(cè)器模塊;FPGA鑒相模塊包含雙路AD采集模塊、FPGA算法設(shè)計(jì)模塊以及液晶顯示模塊;電腦數(shù)據(jù)分析部分包含示波器以及電腦。系統(tǒng)工作流程如下,首先信號(hào)發(fā)生器發(fā)出高頻調(diào)制信號(hào)調(diào)制激光二極管發(fā)射強(qiáng)度隨時(shí)間變換的激光信號(hào),經(jīng)過(guò)反射物反射后,光電探測(cè)器檢測(cè)反射的回波信號(hào),進(jìn)行信號(hào)整形、濾波、AD采集進(jìn)入FPGA實(shí)現(xiàn)兩路正弦信號(hào)的相位差計(jì)算;同時(shí)示波器采集探測(cè)器的輸出信號(hào),使用MATLAB軟件進(jìn)行數(shù)據(jù)分析并鑒相。
圖2 相位式激光測(cè)距系統(tǒng)
為了研究FFT變換點(diǎn)數(shù),信噪比等因素對(duì)全相位FFT法鑒相的影響,通過(guò)控制變量的方法進(jìn)行仿真設(shè)計(jì),具體仿真流程如圖3所示。設(shè)置初始信號(hào)為:
圖3 仿真流程圖
(7)
其中A為信號(hào)振幅,f為調(diào)制頻率,P為初始相位(單位度),噪聲干擾分為三類(lèi),一類(lèi)為Dc直流信號(hào)干擾,另一類(lèi)為諧波干擾,最后一類(lèi)為用高斯函數(shù)模擬的隨機(jī)噪聲。仿真流程為先設(shè)置初始信號(hào)的幅值、初相、FFT變換點(diǎn)數(shù)并加入設(shè)定信噪比的隨機(jī)噪聲,經(jīng)過(guò)采樣,F(xiàn)FT變換加反正切求出單次的相位差,由于FPGA鑒相模塊設(shè)置的平均次數(shù)為1024,所以這里每1024次計(jì)算求平均值,最終得出1024次鑒相的標(biāo)準(zhǔn)差,通過(guò)比較鑒相標(biāo)準(zhǔn)差判斷不同條件對(duì)于鑒相結(jié)果的影響。
設(shè)置變量為信噪比和FFT點(diǎn)數(shù),初始信號(hào)的調(diào)制頻率f為10 MHz,初始相位φ為30度,采樣頻率fs為64 MHz(調(diào)制頻率整數(shù)倍),信噪比的變化范圍從5-40 dB,全相位FFT變換點(diǎn)數(shù)為511-4095點(diǎn),1024次仿真求鑒相平均值和鑒相標(biāo)準(zhǔn)差。
仿真結(jié)果如圖4所示,從圖中可以看出隨著FFT點(diǎn)數(shù)的增多,鑒相標(biāo)準(zhǔn)差明顯減小,點(diǎn)數(shù)超過(guò)4095點(diǎn)之后,對(duì)鑒相標(biāo)準(zhǔn)差影響達(dá)到較小可忽略的程度;信噪比越大,鑒相標(biāo)準(zhǔn)差亦越小??紤]到具體實(shí)驗(yàn)環(huán)境(室內(nèi)信噪比約為30 dB)和實(shí)驗(yàn)要達(dá)到的測(cè)距速率和精度,實(shí)際工程中選擇了1023點(diǎn)全相位FFT點(diǎn)數(shù)進(jìn)行鑒相算法設(shè)計(jì),對(duì)應(yīng)圖中的關(guān)鍵點(diǎn)(FFT點(diǎn)數(shù)1023,信噪比30 dB),既滿(mǎn)足了精度要求,也不會(huì)因?yàn)樾盘?hào)處理花費(fèi)大量時(shí)間而影響鑒相速率。
圖4 信噪比與FFT點(diǎn)數(shù)影響
FPGA內(nèi)部的設(shè)計(jì)框架如圖5所示,主要分為三個(gè)部分,數(shù)據(jù)預(yù)處理模塊、相位計(jì)算模塊以及鑒相結(jié)果平均模塊。數(shù)據(jù)預(yù)處理主要是FPGA與外部雙路AD采集模塊進(jìn)行交互,得到兩路12 bit的數(shù)據(jù)流,接著用含有窗系數(shù)的ROM IP核(經(jīng)卷積漢寧窗系數(shù)初始化)對(duì)數(shù)據(jù)流加權(quán),然后將數(shù)據(jù)流的前511個(gè)數(shù)據(jù)用FIFO緩存后與后511個(gè)數(shù)據(jù)隔N(N為變換點(diǎn)數(shù))相加進(jìn)行數(shù)據(jù)的預(yù)處理;計(jì)算相位的部分主要包含F(xiàn)FT和Cordic IP核的初始化與調(diào)用,將兩路經(jīng)過(guò)預(yù)處理的數(shù)據(jù)流進(jìn)行FFT變換后,調(diào)用Cordic IP核進(jìn)行反正切求出信號(hào)初始相位,最后將兩路信號(hào)相位差得出;數(shù)據(jù)平均部分主要是將計(jì)算出的相位差緩存進(jìn)行數(shù)據(jù)的平均以達(dá)到輸出一個(gè)穩(wěn)定的鑒相結(jié)果。
圖5 FPGA設(shè)計(jì)框圖
(1)FFT算法IP核設(shè)計(jì)
整個(gè)FPGA鑒相系統(tǒng)的最關(guān)鍵部分為相位計(jì)算模塊,其中最主要的為FFT IP核的調(diào)用與設(shè)計(jì)。如圖6所示,設(shè)置FFT的點(diǎn)數(shù)為512點(diǎn),運(yùn)算方式選擇Pipelined Streaming I/O,速度最快,但占用資源較多,系統(tǒng)時(shí)鐘及采樣頻率設(shè)置為64 MHz。
圖6 FFT IP核設(shè)計(jì)
Xilinx FFT IP核采用的是AXI4-Stream總線(xiàn),主要由master(信號(hào)開(kāi)頭為m)和slave(信號(hào)開(kāi)頭為s)兩部分組成,生成后的IP核如圖7所示,其中較重要的端口功能描述如表1所示。
圖7 FFT IP核原理圖
表1 FFT IP核端口功能描述
在設(shè)計(jì)IP核時(shí),配置信息s_config_tadata尤為重要,其包含四個(gè)部分,分別為:
①NFFT,變換點(diǎn)數(shù)。該值為log2(point_size),由于變換點(diǎn)數(shù)為512,這里該二進(jìn)制值為1001。
②CP_LEN,循環(huán)前綴,該值僅在循環(huán)前綴加入時(shí)有效,這里設(shè)置為0。
③FWD_INV,F(xiàn)WD_INV為0表示IFFT運(yùn)算,為1表示FFT運(yùn)算,這里為1。
④SCALE_SCH,縮放因子,這里經(jīng)過(guò)多次測(cè)試,設(shè)置為二進(jìn)制0110101010。
(2)流水線(xiàn)式數(shù)據(jù)處理優(yōu)化及仿真
從圖5可以得出,在FPGA處理流程的第三部分要進(jìn)行鑒相結(jié)果的一個(gè)平均過(guò)程,文中提出了一種流水線(xiàn)式的數(shù)據(jù)處理方法,可以在進(jìn)行多次平均的數(shù)據(jù)處理流程中,大大減少系統(tǒng)的數(shù)據(jù)處理時(shí)間,提高系統(tǒng)鑒相速率。
圖8可以形象地反映出在數(shù)據(jù)平均過(guò)程中此優(yōu)化方法節(jié)約時(shí)間的原理,一次鑒相循環(huán)包含三個(gè)信號(hào)處理過(guò)程,三種形狀分別代表信號(hào)預(yù)處理過(guò)程,F(xiàn)FT IP核運(yùn)算過(guò)程以及Cordic IP核運(yùn)算過(guò)程,紅線(xiàn)上方為未經(jīng)過(guò)優(yōu)化的數(shù)據(jù)處理流程,下方為優(yōu)化后的流程,通過(guò)在循環(huán)求平均的過(guò)程中復(fù)用數(shù)據(jù)預(yù)處理和Cordic IP核運(yùn)算時(shí)間,達(dá)到節(jié)約整個(gè)系統(tǒng)的時(shí)間成本。
圖8 信號(hào)處理流程優(yōu)化
為了盡可能切合實(shí)際,在進(jìn)行FPGA級(jí)仿真時(shí),設(shè)置的參數(shù)基本與實(shí)際測(cè)距參數(shù)一致,設(shè)置系統(tǒng)時(shí)鐘64 MHz,AD采樣速率與系統(tǒng)時(shí)鐘一致,仿真的正弦波信號(hào)使用MATLAB進(jìn)行模擬,雙路正弦波信號(hào)頻率為10 MHz,信噪比設(shè)定為30 dB,雙路信號(hào)相位分別設(shè)置為30度和45度,仿真時(shí)將全相位FFT點(diǎn)數(shù)設(shè)定為63個(gè)點(diǎn),這樣即大大減少了仿真時(shí)間且能在FFT后頻譜譜線(xiàn)的10 MHz處存在一個(gè)參考點(diǎn),便于采樣計(jì)算相位。
在FPGA級(jí)的仿真時(shí),其中耗時(shí)最長(zhǎng)的過(guò)程為進(jìn)行FFT運(yùn)算,因?yàn)樘幚淼臄?shù)據(jù)越多,F(xiàn)FT的時(shí)間越長(zhǎng),仿真時(shí)32點(diǎn)的FFT需要的處理時(shí)間為2.83微秒,實(shí)驗(yàn)時(shí)的512點(diǎn)FFT需要的處理時(shí)間為25微秒,鑒相速率為20 KHz。所以在進(jìn)行流水線(xiàn)式設(shè)計(jì)時(shí)把第二次循環(huán)開(kāi)始的時(shí)間點(diǎn)設(shè)置到上一次FFT運(yùn)算結(jié)果剛開(kāi)始輸出的時(shí)間點(diǎn),從而可以避免兩次循環(huán)導(dǎo)致FFT IP核的一個(gè)共用情形,且可以節(jié)約FFT運(yùn)算后數(shù)據(jù)處理的時(shí)間。
在圖9的仿真結(jié)果圖中,Signal1,2分別為采樣后的兩個(gè)正弦波信號(hào),Hanning window為初始化的窗函數(shù),三條標(biāo)記線(xiàn)分別為第一次鑒相循環(huán)的起點(diǎn)標(biāo)記線(xiàn),第二次循環(huán)的起點(diǎn)標(biāo)記線(xiàn)以及第一次循環(huán)的結(jié)束標(biāo)記線(xiàn),從底邊刻度可以看出,進(jìn)行一次循環(huán)的時(shí)間大約為3.83 μs,優(yōu)化后的兩次循環(huán)的間隔時(shí)間大約為2.96 μs,可節(jié)約時(shí)間0.875 μs,約占一次循環(huán)時(shí)間的百分之三十,實(shí)際測(cè)試中,一次循環(huán)時(shí)間為30 μs,在1024次平均過(guò)程中,可節(jié)約時(shí)間約9.2 ms,由此可見(jiàn),在進(jìn)行大規(guī)模的平均過(guò)程中,節(jié)約的時(shí)間成倍增長(zhǎng),此流水線(xiàn)式的數(shù)據(jù)處理流程可大大節(jié)約系統(tǒng)的計(jì)算時(shí)間,提高整體鑒相速度。
圖9 FPGA仿真結(jié)果
本節(jié)將對(duì)FPGA鑒相模塊進(jìn)行測(cè)試及功能驗(yàn)證,驗(yàn)證流程為:通過(guò)信號(hào)發(fā)生器(型號(hào)為普源DG1000Z系列)產(chǎn)生兩路頻率相同,相位不同的正弦波信號(hào),由雙路AD模塊采樣并由FPGA進(jìn)行相位差檢測(cè)及顯示。產(chǎn)生的正弦波信號(hào)類(lèi)型由有兩種,一種為沒(méi)有直流偏置,幅度為3V的正弦波;另一種正弦波信號(hào)幅度為2V,并加上3V的直流偏置。由于激光二極管工作時(shí)的調(diào)制信號(hào)為直流偏置加上正弦波,第二種類(lèi)型正弦波信號(hào)則是為模擬實(shí)驗(yàn)時(shí)調(diào)制激光的正弦波信號(hào)。兩種類(lèi)型的信號(hào)都分別測(cè)試3組不同頻率,分別為5 MHz、10 MHz、20MHz(AD采樣頻率64 MHz),每組信號(hào)從0-180度每隔10度變化,每次測(cè)量1024次,再進(jìn)行相位差及鑒相誤差的計(jì)算。表2和表3分別為兩種類(lèi)型不同頻率輸入信號(hào)的鑒相結(jié)果及鑒相誤差。
表2 無(wú)直流偏置輸入信號(hào)的鑒相結(jié)果及誤差
表3 有直流偏置輸入信號(hào)的鑒相結(jié)果及誤差
如圖10所示,可得出以下結(jié)論:此鑒相系統(tǒng)在不同頻率的輸入信號(hào)下,鑒相結(jié)果無(wú)明顯區(qū)別,鑒相誤差基本保持在±0.04度以?xún)?nèi);輸入信號(hào)有無(wú)直流偏置時(shí)對(duì)鑒相結(jié)果基本無(wú)影響,符合實(shí)際激光測(cè)距中的實(shí)際應(yīng)用需求。
圖10(a)無(wú)直流偏置輸入信號(hào)鑒相結(jié)果(b)有直流偏置輸入信號(hào)鑒相結(jié)果
本文為了滿(mǎn)足高速高精度的激光測(cè)距應(yīng)用場(chǎng)景,在FPGA中實(shí)現(xiàn)了全相位FFT的鑒相算法,并通過(guò)仿真分析不同SNR和FFT變換點(diǎn)數(shù)下的鑒相標(biāo)準(zhǔn)差,對(duì)比實(shí)際實(shí)驗(yàn)環(huán)境,選取了最符合條件的實(shí)驗(yàn)參數(shù);同時(shí)在整個(gè)數(shù)據(jù)計(jì)算流程中提出了流水線(xiàn)式的數(shù)據(jù)處理優(yōu)化方法,通過(guò)FPGA仿真及實(shí)驗(yàn)證明該方法可大大節(jié)約鑒相時(shí)間。實(shí)驗(yàn)結(jié)果表明,該鑒相系統(tǒng)可在激光調(diào)制頻率為20 MHz的條件下,鑒相速率達(dá)到20 KHz,鑒相精度達(dá)到0.04度以下,基本達(dá)到高速高精度的測(cè)距場(chǎng)景應(yīng)用需求。