用成型濾波器組提高測距精度的一種方法
通常用戶端的系統(tǒng)時鐘精度較低(本文提到的系統(tǒng)時鐘均指用戶端的系統(tǒng)時鐘),因此接收到的幀參考時標(biāo)會存在誤差。在用戶端經(jīng)過計算估計出幀參考時標(biāo)的誤差,再用該誤差調(diào)整發(fā)送回復(fù)幀的時刻,可實現(xiàn)精確測距。因此測距精度取決于兩個因素:幀參考時標(biāo)誤差的估計精度和回復(fù)幀發(fā)送時刻的調(diào)整精度。本文主要討論如何提高回復(fù)幀發(fā)送時刻的調(diào)整精度?;貜?fù)幀是由基帶碼組成的,因此下文中講的發(fā)送時刻的調(diào)整均指基帶碼發(fā)送時刻的調(diào)整。
發(fā)送時刻的調(diào)整精度是由發(fā)送時刻的調(diào)整步長決定的。在一般的數(shù)字系統(tǒng)中,發(fā)送時刻的調(diào)整步長不小于一個系統(tǒng)時鐘的周期。本文利用Altera公司的EP20K300EQC240-3型FPGA器件設(shè)計了一種成型濾波器組,使發(fā)送時刻的調(diào)整步長縮短為時鐘周期的五分之一,從而將發(fā)送時刻的調(diào)整精度大幅度地提高。
1 成型濾波器組調(diào)整發(fā)送時刻的原理
成型濾波器組的設(shè)計原理圖如圖1所示。成型濾波器組包括一
圖1 成型濾波器組的設(shè)計原理圖
2 用FPGA設(shè)計成型濾波器
通常,系統(tǒng)時鐘頻率遠(yuǎn)高于基帶碼的速率,因此在成型濾波前,要在基帶碼的相鄰碼之間進(jìn)行內(nèi)插。內(nèi)插的方式有多種,通常的內(nèi)插方法是在發(fā)送的基帶碼的相鄰碼之間內(nèi)插“0”。將基帶碼插“0”后,與低通濾波器的沖激響應(yīng)卷積,再送到D/A轉(zhuǎn)換器轉(zhuǎn)換成模擬波形就可以實現(xiàn)濾波成型。設(shè)計低通濾波器時,為了得到較好的波形,通常采用高階的FIR濾波器。如果在FPGA中用邏輯單元實現(xiàn)高階FIR濾波器,會占用大量的邏輯單元。比如在Altera公司的FPGA中用邏輯單元實現(xiàn)一個50階的FIR濾波器,需要26個乘法器和50個加法器,要占用一千多個邏輯單元。而本文利用FPGA中的ROM,用查表的方法設(shè)計同樣的FIR濾波器,則只需占用幾十個邏輯單元。圖2是成型濾波器的設(shè)計原理圖。該設(shè)計包括用數(shù)學(xué)工具——MATLAB預(yù)先設(shè)計的部分和在FPGA中實現(xiàn)的部分,MATLAB完成成型濾波后的數(shù)據(jù)波形文件的設(shè)計。FPGA存儲設(shè)計好的數(shù)據(jù)波形文件,并用發(fā)送的基帶碼選通相應(yīng)波形的存儲地址,完成濾波成型。
圖2 成型濾波器的設(shè)計原理圖
首先用MATLAB設(shè)計數(shù)據(jù)波形文件。設(shè)系統(tǒng)基帶碼速率為N MHz,系統(tǒng)時鐘頻率為B MHz。FIR濾波器的階數(shù)為(C為奇數(shù),可根據(jù)濾波器的階數(shù)要求進(jìn)行選擇)。FIR濾波器的系數(shù)可通過MATLAB進(jìn)行設(shè)計。將C個基帶碼排列組合成2C種情況。對于每種組合,在C個基帶碼的相鄰碼間內(nèi)插-1個0后,與設(shè)計好的濾波器的沖激響應(yīng)卷積。卷積結(jié)果的中間個數(shù)據(jù)波形值就是該C個基帶碼組合的中間基帶碼(簡稱中間碼)的濾波結(jié)果值。這個數(shù)據(jù)波形值可以存儲在以該種組合(C個碼)為基地址的ROM中。MATLAB可以計算出所有組合下C個基帶碼的中間碼的濾波結(jié)果值。
FPGA將所有濾波結(jié)果值存入ROM,將每個濾波結(jié)果值所對應(yīng)的基帶碼組合作為該濾波結(jié)果值的存儲地址。系統(tǒng)運(yùn)行時,用一個C位移位寄存器存儲C個基帶碼,作為地址選通ROM,則ROM輸出的濾波結(jié)果值是C個基帶碼的中間碼的濾波結(jié)果值。隨著基帶碼依次到達(dá)移位寄存器,移位寄存器中C個基帶碼的中間碼也被后面的基帶碼依次替換, ROM輸出的將是依次到達(dá)的中間碼的濾波結(jié)果值,從而實現(xiàn)基帶碼的濾波成型。
圖2中ROM存儲的數(shù)據(jù)是設(shè)計一個成型濾波器得到的波形數(shù)據(jù),為了與下面成型濾波器組的存儲數(shù)據(jù)相區(qū)別,將圖2中ROM存儲的所有波形數(shù)據(jù)統(tǒng)稱為一個子波形。
3 在FPGA中用成型濾波器組調(diào)整發(fā)送時刻的方法
圖3是成型濾波器組的實現(xiàn)方案圖。圖中的FPGA的ROM中存儲了E個子波形,稱為一個成型濾波器組。第一個子波形就是圖2所設(shè)計的子波形,稱為原來的子波形。之后的E-1個子波形是原來的子波形以時鐘周期的1/E循環(huán)左移1,2,...,E-1次得到的。如何得到這些移位后的子波形是設(shè)計的關(guān)鍵。由于波形的移位在MATLAB中是以數(shù)值的變化體現(xiàn)出來的,而通過MATLAB計算可以得到數(shù)值精度很高的波形數(shù)據(jù),所以用MATLAB設(shè)計的波形,移位可以遠(yuǎn)小于時鐘周期,因此可以很容易用MATLAB得到以時鐘周期的1/E循環(huán)左移后的各個子波形。
圖3 成型濾波器組的實現(xiàn)方案圖
各移位后的子波形按循環(huán)左移大小依次存儲在ROM中。因此一個時鐘周期的延時被劃分成了E個區(qū)間,將測距誤差除以時鐘周期,得到余數(shù)R,計算出R落在了E個區(qū)間中的哪個。選擇該區(qū)間的子波形,將該子波形送到D/A轉(zhuǎn)換器轉(zhuǎn)換成模擬波形后再輸出,就可將發(fā)送時刻的調(diào)整步長降到時鐘周期的1/E。實際設(shè)計時,在MATLAB中將FIR濾波器的沖激響應(yīng)以時鐘周期的1/E循環(huán)左移,再與插零后的基帶碼卷積,就實現(xiàn)了子波形的循環(huán)左移。而通常的系統(tǒng)實時產(chǎn)生的波形是由系統(tǒng)時鐘控制的,延時不會小于一個時鐘周期,因此其調(diào)整精度遠(yuǎn)不如用MATLAB設(shè)計的成型濾波器組的方法。
上面介紹的是子波形循環(huán)左移的方法,也可以將子波形循環(huán)右移,道理是一樣的。
4 實例與仿真
4.1 子波形的設(shè)計與仿真
本設(shè)計所應(yīng)用的測距系統(tǒng)的基帶碼速率為2MHz,系統(tǒng)時鐘頻率為20MHz,因此在2MHz基帶碼的相鄰比特間內(nèi)插個“0”,然后通過階(C選為5)的FIR濾波器就可實現(xiàn)成型濾波。5個基帶碼可排列成32種組合,圖4是其中的一種基
圖4 基帶碼組合11011的成型濾波的仿真結(jié)果
4.2 成型濾波器組的設(shè)計
由于時鐘周期為50ns,當(dāng)要求最小調(diào)整步長不大于10ns時,在MATLAB中將FIR濾波器的沖激響應(yīng)以時鐘周期的1/5循環(huán)左移,再與插零后的基帶碼進(jìn)行卷積,就可以得到以時鐘周期的1/5循環(huán)左移0,1,2,3,4次后形成的五個子波形。圖5是組合為11011的基帶碼經(jīng)上述方式產(chǎn)生的五個子波形的圖。
圖5組合為11011的基帶碼經(jīng)上述方式產(chǎn)生的五個子波形的圖
從圖5中中央的兩條虛線可以看出,經(jīng)五次移位后的第五個子波形的0碼與原來的子波形的0碼相比,延時為4/5個時鐘周期。這樣就將調(diào)整發(fā)送時刻的步長減小到時鐘周期的1/5,大幅度提高了測距精度。
假設(shè)估計出的測距誤差是72ns,如果不采用成型濾波器的方法,調(diào)整步長為50ns,調(diào)整一個時鐘后,會產(chǎn)生72-50=22ns的調(diào)整精度誤差。而采用成型濾波器后,調(diào)整的步長縮小為10ns,在發(fā)送時將第三個數(shù)據(jù)波形送到D/A轉(zhuǎn)換器轉(zhuǎn)換成模擬波形,再將模擬波形送出就可使調(diào)整精度的誤差降低到72-50-2
評論