用成型滤波器组提高测距精度的一种方法
3 在FPGA中用成型滤波器组调整发送时刻的方法
图3是成型滤波器组的实现方案图。图中的FPGA的ROM中存储了E个子波形,称为一个成型滤波器组。第一个子波形就是图2所设计的子波形,称为原来的子波形。之后的E-1个子波形是原来的子波形以时钟周期的1/E循环左移1,2,…,E-1次得到的。如果得到这些移位后的子波形是设计的关键。由于波形的移位在MATLAB中是以数值的变化体现出来的,而通过MATLAB计算可以得到数值精度很高的波形数据,所以用MATLAB设计的波形,移位可以远小于时钟周期,因此可以很容易用MATLAB得到以时钟周期的1/E循环左移后的各个子波形。
各移位后的子波形按循环左移大小依次存储在ROM中。因此一个时钟周期的延时被划分成了E个区间,将测距误差除以时钟周期,得到余数R,计算出R落在了E个区间中的哪个。选择该区间的子波形,将该子波形送到调整步长降到时钟周期的1/E。实际设计时,在MATLAB中将FIR滤波器的冲激响应以时钟周期的1/E循环左移,再与插零后的基带码卷积,就实现了子波形的循环左移。再通常的系统实时产生的滤波是则系统时钟控制的,延时不会小于一个时钟周期,因此其调整精度远不如用MATLAB设计的成型滤波器组的方法。
上面介绍的是子波形循环左移的方法,也可以将子波形循环右移,道理是一样的。
4 实例与仿真
4.1 子波形的设计与仿真
本设计所应用的测距系统的基带码速率为2MHz,系统时钟频率为20MHz,因此在2MHz基带码的相邻比特间内插20/2-1=9个“0”,然后通过(5×20)/2=50阶(C选为5)的FIR滤波器就可实现成型滤波。5个基带码可排列成32种组合,图4是其中的一种基带码组合——11011的成型滤波的仿真结果。图中显示了该组合插零后与成型滤波器的冲激响应进行卷积的过程。可以看出,卷积的中间10点数据波形正好是插零前5个基带码中间的信号0经滤波器平滑后的波形。这10点数据波形存在11011为基地址的ROM中。
4.2 成型滤波器组的设计
由于时钟周期为50ns,当要求最小调整步长不大于10ns时,在MATLAB中将FIR滤波器的冲激响应以时钟周期的1/5循环左移,再与插零后的基带码进行卷积,就可以得到以时钟周期的1/5循环左移0,1,2,3,4次后形成的五个子波形。图5是组合为11011的基带码经上述方式产生的五个子波形的图。
图5
从图5中中央的两条虚线可以看出,经五次移位后的第五个子波形的0码与原来的子波形的0码相比,延时为4/5个时钟周期。这样就将调整发送时刻的步长减小到时钟周期的1/5,大幅度提高了测距精度。
假设估计出的测距误差是72ns,如果不采用成型滤波器的方法,调整步长为50ns,调整一个时钟后,会产生72-50=22ns的调整精度误差。而采用成型滤波器后,调整的步长缩小为10ns,在发送时将第三个数据波形送到D/A转换器转换成模拟波形,再将模拟波形送出就可调整精度的误差降低到72-50-2×10=2ns。图6是采用成型滤波器组前后调整精度的误差对比图(假设测距误差估计服从高斯分布,均值为25ns,标准差为25ns)。
经图中的数据计算得出:在不采用成型滤波器组的情况下,发送调整误差的标准差为18.17ns。采用成型滤波器组后,发送调整误差的标准为4.42ns,是不采用成型滤波器组时的4.42ns/18.7ns=24.33%。