用成型滤波器组提高测距精度的一种方法
关键词:测距 帧参考时标 子波形 成型滤波器 成型滤波器组
在许多测距系统中,用户端接收到基站发送的帧信号后,便以该帧中特定的位置(称为帧参考时标)为基准发送“回复帧”给基站。基站收到回复帧后,(凹丫丫范文网fanwen.oyaya.net收集整理)提取它的帧参考时标,并以其作为测距的依据。
通常用户端的系统时钟精度较低(本文提到的系统时钟均指用户端的系统时钟),因此接收到的帧参考时标会存在误差。在用户端经过计算估计出帧参考时标的误差,再用该误差调整发送回复帧的时刻,可实现精确测距。因此测距精度取决于两个因素:帧参考时标误差的估计精度和回复发送时刻的调整精度。本文主要讨论如何提高回复帧发送时刻的调整精度。回复帧是由基带码组成的,因此下文中讲的发送时刻的高速均指基带码发送时刻的调整。
发送时刻的调整精度是由发送时刻的调整步长决定的。在一般的数字系统中,发送时刻的高速步长不小于个系统时钟的周期。本文利用Altera公司的EP20K300EQC240-3型FPGA器件设计了一种成型滤波器组,使发送时刻的调整步长缩短为时钟周期的五分之一,从而将发送时刻的高速精度大幅度地提高。
1 成型滤波器组调整发送时刻的原理
成型滤波器组的设计原理图如图1所示。成型滤波器组包括一组成型滤波器。相同的发送基带码经成型滤波器组中不同的成型滤波器滤波后,会产生不同延时的发送数据波形。发送数据波形的延时不同,则发送时刻也不同。这就是说,相同的基带码经过不同的成型滤波器滤波后可产生不同发送时刻的波形。因此,以测距误差作为选择字,根据误差的大小选择相应的成型滤波器,就可间接地调整发送基带码的时刻。
2 用FPGA设计成型滤波器
通常,系统时钟频率远高于基带码的速率,因此在成型滤波前,要在基带码的相邻码之间进行内插。内插的方式有多种,通常的内插方法是在发送的基带码的相邻码之间内插“0”。将基带码插“0”后,与低通滤波器的冲激响应卷积,再送到D/A转换器转换成模拟滤波器就可以实现滤波成型。设计低通滤波器时,为了得到较好的波形,通常采用高阶的FIR滤波器。如果在FPGA中用逻辑单元实现高阶FIR滤波器,全占用大量的逻辑单元。比如在Altera公司的FPGA中用逻辑单元实现一个50阶的FIR滤波器,需要26个乘法器和50个加法器,要占用一千多个逻辑单元。而本文利用FPGA中的ROM,用查表的方法设计同样的FIR滤波器,则只需占用几十个逻辑单元。图2是成型滤波器的设计原理图。该设计包括用数学工具——MATLAB预先设计的部分和在FPGA中实现的部分,MATLAB完成成型滤波后的数据波形文件的设计。FPGA存储设计好的数据波形文件,并用发送的基带码选通相应波形的存储地址,完成滤波成型。
首先用MATLAB设计数据波形文件。设系统基带码速率为N MHz,系统时钟频率为B MHz。FIR滤波器的阶数为(C×B)/N(C为奇数,可根据滤波器的阶数要求进行选择)。FIR滤波器的系数可通过MATLAB进行设计。将C个基带码排列组合成2 C种情况。对于每种组合,在C个基带码的相邻码间内插(B/N)-1个0后,与设计好的滤波器的冲激响应卷积。卷积结果的中间B/N个数据波形值就是该C个基带组合的中间基带码(简称中间码)的滤波结果值。这B/N个数据波形值可以存储在以该种组合(C个码)为基地址的ROM中。MATLAB可以计算出所有组合下C个基带码的中间码的滤波结果值。
FPGA将所有滤波结果值存入ROM,将每个滤波结果值所对应的基带码组合作为该滤波结果值的存储地址。系统运行时,用一个C位移位寄存器存储C个基带码,作为地址选通ROM,则ROM输出的滤波结果值是C个基带码的中间码的滤波结果值。随着基带码依次到达移位寄存器,移位寄存器中C个基带码的中间码也被后面的基带码依次替换,ROM输出的将是依次到达的中间码的滤波结果值,从而实现基带码的滤波成型。
图2中ROM存储的数据是设计一个成型滤波器得到的波形数据,为了与下面成型滤波器组的存储数据相区别,将图2中ROM存储的所有波形数据统称为一个子波形。