微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于CORDIC算法的光相位检测及FPGA实现

基于CORDIC算法的光相位检测及FPGA实现

时间:06-05 来源:互联网 点击:

当前,非接触式测量已经逐渐取代接触式测量,成为测量发展的方向。而在各种各样的非接触式测量方法中,光纤干涉投射技术测量物体表面形貌的方法,由于其光路具有柔软、形状可变、传输距离远、抗干扰能力强等优点,得到了越来越广泛的应用,尤其在各种有强电磁干扰、易燃易爆等恶劣环境中,光纤干涉投射测量技术更是有着很高的应用价值。

在光纤干涉投射技术中,裸露在空气中的光纤容易受到温度、振动的影响,使臂长差发生变化,进而产生光相位的变化,导致干涉条纹漂移,从而影响到测量的精度[1]。交流相位跟踪零差补偿技术(PTAC)是实现光纤相位变化检测和误差补偿的一种关键技术[2],其中涉及信号解调和相位求解,求解反正弦是相位求解的一种主要方法[2]。在FPGA中,传统的求解反正弦函数的主要方法是查找表法[3],查找表数据量的大小和精度紧密相关,在高精度下,查找表法需要大量存储单元,另外也需要校正算法来计算未计入表中的点,这样就对处理器资源提出很高的要求。

针对传统反正弦函数求解方法的缺点,本文采用CORDIC算法求解反正弦值,得到光相位变化并在FPGA中设计了CORDIC算法实现的流水线结构,从而达到了对光相位变化的实时检测。同时,提出采用查找表配合抛物线插值校正算法解决CORDIC算法在运算中存在的“死区”问题。通过实验验证该了方法的可行性。

1 系统结构

光纤干涉投射系统由激光器、聚焦透镜和3 dB耦合器等组成。激光器发出的激光经过聚焦透镜耦合到光纤,经3 dB耦合器分光后由两光纤臂输出。两光纤输出端可被看作是杨氏双孔干涉中的两个小孔,其输出光由同一点光源发出,频率相同,具有恒定的相位差,满足杨氏双孔干涉条件,从而在输出端产生干涉条纹。在实际测量中,温度、振动的影响使光纤发生臂长差变化,从而使光相位发生变化,导致干涉条纹漂移。为解决这一问题,通过PTAC对光相位进行调制解调得到光相位变化信息并对相位误差进行补偿。

如图1所示,光纤干涉投射交流相位跟踪零差补偿系统由激光器、聚焦透镜、3 dB耦合器、PZT和信号调理等部分组成。两输出臂分别缠绕在两个PZT上,一路作为信号臂对光相位进行调制,另一路用作控制和补偿。两条输出臂投射端面存在反射,反射的光返回到3 dB耦合器中发生干涉,构成马赫-泽德干涉仪[4],干涉的光由光电探测器PD接收。信号臂反射回耦合器的光包含光相位调制信息,同时也存在着由环境影响产生的光相位变化信息。两束反射光在耦合器中发生干涉,则光相位调制信息转化为光强变化,再由光电探测器将光强变化转化为电信号。

经过AD转换后,输入FPGA进行计算,通过求解反正弦求出?琢。改变驱动器的直流偏置,即改变待测镜和参考镜的相位差?琢。再经过数模转换、高压放大,通过控制PZT2调整另一输出臂的长度,使两光纤臂相位差保持为一正弦函数,消除温度振动等环境因素带来的影响。

2 反正弦算法实现

2.1 反正弦算法原理

基于CORDIC算法计算反正弦。数字信号处理中常常会遇到求解超越函数的问题,如求解矢量旋转、反三角函数运算、双曲函数等,CORDIC是为了这些问题而提出的[5]。CORDIC基本思想是用一组确定的角度不断摆偏去逼近所求的角度,而这一组角度与运算基数(2i)有关。在硬件电路中,CORDIC运算可以只通过加减操作和移位操作实现,大大节约了资源。CORDIC算法可由式(3)、(4)、(5)、(6)给出[6]。其中,(xi,yi)是矢量的坐标,zi为剩余未旋转的角度。


2.2 反正弦程序设计

2.2.1 字长设计

输入值范围为[-1,1],输入FPGA的初值c为12位。选第一位为符号位,第二位为整数位,后10位为小数位。在FPGA中,使用浮点形式计算小数比较复杂,因此,将小数部分左移10位,化成定点形式运算。CORDIC的计算次数取决于xi、yi的小数位数。如式(8),用yi与输入初值c比较,如果yi的小数位为10位,则最多进行10次CORDIC计算,精度很难保证。因此,设计xi、yi的小数位为22位,在c后面补0,补足22位小数位,则最多可进行22次CORDIC计算。因为z的值域范围为[-1.570 8 rad,1.570 8 rad],将z设计成25位,z[24]为符号位,z[23:22]为整数位,z[21:0]为小数位。

2.2.2 实现结构的设计

在FPGA中,CORDIC的实现结构可以选择迭代结构或流水线结构。迭代结构是直接由公式写出循环语句,处理完当前数据才可以处理下一个数据,缺点是效率低。本设计采用流水线结构,流水线结构在数据处理的同时,还能继续输入和处理后续数据,提高了数据吞吐率。此外,设计中采用前端数据处理加22级CORDIC计算加后端处理,第一个数据需要24个时钟周期处理完毕,之后每个周期都可以输出一个处理结果,可以显著提高数据处理速度。

2.2.3 CORDIC结构

本设计总共有22级CORDIC计算模块,第i级CORDIC计算模块如图3所示。yi与|ci|比较,决定di的值,再根据式(7)来计算xi+1、yi+1、zi+1,同时传递输入值的符号位,在流水线的后端处理模块处理。若输入c[11]为1,则结果为-arcsinc;若输入c[11]为0,则结果为arcsinc。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top