来自 hg平台 2018-08-13 18:20 的文章

用成型滤波器组提高测距精度的一种方法

摘要:在许多测距系统中,精确地调整用户端回复帧的发送时刻是提高测距精度的关键。介绍了用fpga实现的一种数字式成型滤波器组,它可大幅度地缩短发送时刻的调整步长,有效地提高测距精度,已被成功应用于某个测距系统中。 
        在许多测距系统中,用户端接收到基站发送的帧信号后,便以该帧中特定的位置(称为帧参考时标)为基准发送“回复帧”给基站。基站收到回复帧后,提取它的帧参考时标,并以其作为测距的依据。
    通常用户端的系统时钟精度较低(本文提到的系统时钟均指用户端的系统时钟),因此接收到的帧参考时标会存在误差。在用户端经过计算估计出帧参考时标的误差,再用该误差调整发送回复帧的时刻,可实现精确测距。因此测距精度取决于两个因素:帧参考时标误差的估计精度和回复发送时刻的调整精度。本文主要讨论如何提高回复帧发送时刻的调整精度。回复帧是由基带码组成的,因此下文中讲的发送时刻的高速均指基带码发送时刻的调整。
    发送时刻的调整精度是由发送时刻的调整步长决定的。在一般的数字系统中,发送时刻的高速步长不小于个系统时钟的周期。本文利用altera公司的ep20k300eqc240-3型fpga器件设计了一种成型滤波器组,使发送时刻的调整步长缩短为时钟周期的五分之一,从而将发送时刻的高速精度大幅度地提高。
1 成型滤波器组调整发送时刻的原理
    成型滤波器组的设计原理图所示。成型滤波器组包括一组成型滤波器。相同的发送基带码经成型滤波器组中不同的成型滤波器滤波后,会产生不同延时的发送数据波形。发送数据波形的延时不同,则发送时刻也不同。这就是说,相同的基带码经过不同的成型滤波器滤波后可产生不同发送时刻的波形。因此,以测距误差作为选择字,根据误差的大小选择相应的成型滤波器,就可间接地调整发送基带码的时刻。
2 用fpga设计成型滤波器
    通常,系统时钟频率远高于基带码的速率,因此在成型滤波前,要在基带码的相邻码之间进行内插。内插的方式有多种,通常的内插方法是在发送的基带码的相邻码之间内插“0”。将基带码插“0”后,与低通滤波器的冲激响应卷积,再送到d/a转换器转换成模拟滤波器就可以实现滤波成型。设计低通滤波器时,为了得到较好的波形,通常采用高阶的fir滤波器。如果在fpga中用逻辑单元实现高阶fir滤波器,全占用大量的逻辑单元。比如在altera公司的fpga中用逻辑单元实现一个50阶的fir滤波器,需要26个乘法器和50个加法器,要占用一千多个逻辑单元。而本文利用fpga中的rom,用查表的方法设计同样的fir滤波器,则只需占用几十个逻辑单元。该设计包括用数学工具——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输出的将是依次到达的中间码的滤波结果值,从而实现基带码的滤波成型。
    rom存储的数据是设计一个成型滤波器得到的波形数据,为了与下面成型滤波器组的存储数据相区别,将rom存储的所有波形数据统称为一个子波形。
3 在fpga中用成型滤波器组调整发送时刻的方法
    成型滤波器组的实现方案图。fpga的rom中存储了e个子波形,称为一个成型滤波器组。第一个子波形就是所设计的子波形,称为原来的子波形。之后的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种组合,是其中的一种基带码组合——11011的成型滤波的仿真结果。图中显示了该组合插零后与成型滤波器的冲激响应进行卷积的过程。可以看出,卷积的中间10点数据波形正好是插零前5个基带码中间的信号0经滤波器平滑后的波形。这10点数据波形存在11011为基地址的rom中。
4.2 成型滤波器组的设计
    由于时钟周期为50ns,当要求最小调整步长不大于10ns时,在matlab中将fir滤波器的冲激响应以时钟周期的1/5循环左移,再与插零后的基带码进行卷积,就可以得到以时钟周期的1/5循环左移0,1,2,3,4次后形成的五个子波形。图5是组合为11011的基带码经上述方式产生的五个子波形的图。
   中中央的两条虚线可以看出,经五次移位后的第五个子波形的0码与原来的子波形的0码相比,延时为4/5个时钟周期。这样就将调整发送时刻的步长减小到时钟周期的1/5,大幅度提高了测距精度。
    假设估计出的测距误差是72ns,如果不采用成型滤波器的方法,调整步长为50ns,调整一个时钟后,会产生72-50=22ns的调整精度误差。而采用成型滤波器后,调整的步长缩小为10ns,在发送时将第三个数据波形送到d/a转换器转换成模拟波形,再将模拟波形送出就可调整精度的误差降低到72-50-2×10=2ns。采用成型滤波器组前后调整精度的误差对比图(假设测距误差估计服从高斯分布,均值为25ns,标准差为25ns)。
    经图中的数据计算得出:在不采用成型滤波器组的情况下,发送调整误差的标准差为18.17ns。采用成型滤波器组后,发送调整误差的标准为4.42ns,是不采用成型滤波器组时的4.42ns/18.7ns=24.33%。
    成型滤波器组占用rom的数量是则发送时刻调整的精度、成型滤波器的阶数、波形的数值量化的比特数、每个基带码的时钟采样点个数因素决定的。对上面的例子而言,每五个基带码组合要生成10个8比特的波形数据,因此所存储的地址长度为4比特,存储单位是字节。五个基带码共有32种组合,所以一个子波形的地址长度为4+5=9位。在调整步长是时钟的1/5的要求下,要另加为4+5=9位。在调整步长是时钟的1/5的要求下,要另加3比特基地址来存储五个子波形。所以整个成型滤波器组总共消耗的rom的数量为2(4+5+3)×8=32768比特。
    除采用数字电路方式外,许多系统还用模拟电路的方式调整发送时刻:将基带码通过模拟触发电路发送,而测距误差通过模拟发电路控制基带码的发送时刻。这种方式在理论上调整发送时刻的步长更小,但与数字电路相比,易爱到温度、噪声等多种因素的影响,可靠性差得多。而本文提出的方法是用数字的方式实现的,稳定性和可靠性均有无可比拟的优越性。
    本文设计的成型滤波器充分地利用了硬件中所剩的rom资源,占用了很少的逻辑单元。用该成型滤波器构成的成型滤波器组,可将基带码发送时刻的高速步长减小到时钟周期的几分之一,甚至十几分之一,因此大幅度提高了发送时刻的调整精度。本文的设计已被应用于某个测距系统中,取得了很好的效果。该设计还可应用于其它许多测距系统中,如定位系统、二次雷达等,因此有较高的实用价值。