FFT在激光测距系统中的应用
FFT在激光测距系统中的应用
作者:张艳林;高秀敏
激光在检测领域中的应用十分广泛,技术含量十分丰富,对社会生产和生活的影响也十分明显。激光测距仪是激光最早的应用之一,这是由于激光具有方向性强、亮度高、单色性好等许多优点。其中利用相位法来测距的方法精度高、实时性好,已经得到广泛的应用。实现相位法的一个重要环节是FFT,当前实现FFT的算法已经成熟,在DSP上实现的FFT可以满足大多数的实时性产品。
1 激光测距原理
激光测距一般分为激光飞行时间测距和非飞行时间测距,前者的基本原理是利用光在发射点到目标物之间的反射时间乘以光速是固定的,所以测量出广德往返时间就测量出距离了。后者是不需要测量光的飞行时间,而是通过光子计数或者数学统计的方法来得到与目标物之间的距离。一般情况下,非飞行时间测距技术应用范围比较有限,仅仅用在一些特点情况下;飞行时间测量技术应用就很广泛,而其中的相位测距法依靠其测距距离远,误差低,体积小和实时性高的优点广泛应用于日常生活中。
相位法测距的基本原理是将调制以后的激光发射出去,到目标物反射回来之后测量与发射前信号的相位差,通过相位差间接的测量出光的飞行时间,进而得到距离,这种方法的误差非常小。
2 FFT在测距系统中的作用
要测量距离就必须先测量出相位差,相位的测量有脉冲法、相位法、数字测相方法、相关法和FFT谱分析法等,针对不同的情况,这几种方法各有优点。成本和精度要求都不太高的情况,可以选取采用计数器的数字测相方法;在实时性要求较高的场合,可以使用FPGA的数字测相方法;如果对精度有一定的限制,那么就只能用后两种了,这里我们选取的是FFT谱分析法。
对于单一频率的FFT结果而言,一般情况下,在离散谱上会出现两条谱线,只有当满足式3的条件时,在功率上正好对应于一条谱线。
f=n*Δf 式3
Δf=fs/N 式4
如果功率谱最大值出现在第n个频率上,则代人式3得f=n*Δf= n*fs/N 式5然后只需在幅度谱上取其相应的第n个频谱值的实式中,f为信号频率,Δf为频率分辩率.假设A/D的采样频率为fs,作N点的FFT,则频率分辩率为部Re和虚部Im,按照式6算就可以得到输入信号的初始相位。
θ=tg-1(Im/Re) 式6在本测距系统中,选取合适的采样频率fs样点数N,能够刚好对主振信号和本振信号进行整周期采样,作FFT运算,其结果必定是只有单条谱线,这是就可以很方便的求出两路信号的相位差。
3 FFT原理及实现
3.1 FFT的原理
FFT是一种DFT的高效算法,基本思想就是利用旋转因子的周期性和对称性来减小运算量,由此提出的一种算法称作FFT算法。取N=8时的例子,当N不等于2的幂的时候,可以在后面补零。因为划分的原因,输入需要用逆序的方式,此时输出就是正常序,如果输入是正常序,那么输出就是逆序。
3.2 FFT在DSP上的实现
本系统选择的硬件是DSP,在硬件上实现FFT,由于输入的是实数系列,可以将2N点实数系列组合成N点复数系列,偶数点作为实部,奇数点作为虚部,由此得出的结果再经过整合就得到最终的结果,这样做的优点是节省了一半的时间,提高了实时性。
该算法总共分四步来实现。
第一步,输入数据的组合和位倒序.
把输入系列作位倒序是为了在整个运算最后的输出得到的系列是正常序。首先将原2N点实序列当成N点复序列。偶数点作实部,奇数点作虚部,然后复数系列经过位倒序,存储在指定数据缓冲区内。
第二步,N点复数FF。
在数据缓冲区里进行N点复数FFT运算。由于在FFT运算中要用到旋转因子,它是一个复数,把它分为正弦和余弦部分,用Q15格式存储,根据式7来计算FFT运算,没作一次运算将结果存放在原输入数据缓冲区里,以节省内存。
第三步,分离复数FFT的输出为奇部分和偶部分。
分离FFT输出为RP、RM、IP和IM四个系列,即偶实数、奇实数、偶虚数和奇虚数四个部分。
第四步,产生2N点的复数FFT输出序列。产生2N个点的复数输出,它与原始的2N个点的实输入系列的DFT一致,输出数据仍然在数据缓冲区内。
如果想看功率谱,那么就要将第四步之后得到的结果进行平方和运算,由于本次目的是要求初始相位,到第四步之后就直接取出有效数据进行运算,求得相位。
4 实验结果及误差
4.1 实验结果
因为本文研究的是FFT在激光测距系统中的作用,只对采样之后的信号作一定的处理,测试的时候模拟一个采样好了的正弦波信号,对之作FFT运算。模拟信号频率为1KHz,采样率为16KHz,对信号作64点FFT运算,根据式5可以得知有效数据出现在功率谱的第4条谱线上,计算功率谱之前的第8个数据是实部,第9个数据是虚部,取出来相除再作反正切。由于用的是正弦波,FFT中的相位是按照余弦来得的,按照这个求得的结果需要加上90°才是正确的结果,下面是测试数据。
实际初始角度:15 34 51 69 79
计算出的角度:14.993148 33.996594 50.99606169.00015978.994857
可以看出,误差不超过0.01°,可见这种方法的误差相当低。
4.2 误差来源及改进
(1)首先FFT自身就有数据截断和舍入误差,FFT的运算过程中有许多小数计算,DSP是采用定点来计算的,这中间就会有一定的误差,如果采用浮点型器件,误差会小很多,但是同时造成成本上的上升,考虑到这项误差对结果影响不大,可以忽略。
(2)FFT固有的频谱泄露和栅栏效应误差,改善的办法就是选取合适的窗函数,适当的增加采样点数并且保证整周期截取。
(3)前端信号所带来的噪声,由于本系统前端信号要经过混频,相加,采样之后才送到DSP里作FFT运算,这中间必然会带来一些噪声,更重要的是会造成信号的相位延时,由于FFT运算本来就对噪声有一定的抑制,所以主要是相位延时。由于要作的是两路信号的相位差,所以如果两路信号的延时效果相差不大,作差运算之后就会抵消这种误差,但是要求就是电路板布线的时候尽量将两路信号线布成一样长,这样会大大减少误差。
5 结语
文章介绍了FFT在测距系统中的作用,实现原理以及方法,在已有的高精度结果中进一步分析,给出误差来源以及减小误差的方法。由于本系统中DSP的低功耗,非常适合应用于便携式激光测距仪,具有很好的应用前景。
本文章转自爱学术(aixueshu.com),如有侵权,请联系删除