小波变换能够同时在时域和频域进行局部分析,在对时变信号进行分析时具有明显的优势。小波算法在进行信号处理时,由于具有滤波效果好、信号细节损失少的优点,从而引起了广泛的关注和应用。目前常用于高速实时信号处理的硬件芯片分为两大类:基于大规模可编程集成电路FPGA的纯硬件实现方案和基于高速通用DSP的软件实现方案。采用FPGA的硬件实现方案硬件接口设计灵活,可以和任意数字外围电路直接使用,且其具有高度的集成度和高速的处理速度;而基于高速通用DSP的软件实现方案代码设计灵活,可以快速修改和调试程序[6]。小波算法运算量较大,如果采用DSP方案由软件来实现该算法就很难满足系统实时性的要求。基于以上原因本文提出了采用FPGA方案实现小波算法。该方案对一维信号具有良好的去噪效果,同时也能满足系统的实时性要求。
1 小波去噪的基本原理
对于小波算法,应用最广泛的是信号处理和图像处理,而在这两个领域中应用最多的就是信号及图像的去噪和压缩。由于在正交小波中,正交基的选取比传统方法更接近实际信号本身,所以通过小波变换可以更容易地分离出噪声,因此,相对于传统方法,小波分析在去噪和压缩方面有着无可比拟的优势[5]。
小波分析用于去噪的过程如下:
(1)分解过程:选定一种小波,对含噪信号进行N层小波分解,得到各层分解的小波系数。
(2)阈值处理过程:将通过分解得出的各层高频小波系数进行阈值处理,在进行到最后一层时,要同时对该层的高、低频系数进行阈值处理。
(3)重构过程:将经过阈值处理后的小波系数通过小波逆变换重构出去噪后的信号。
阈值降噪法是一种实现简单、效果较好的小波降噪方法。小波变换具有很强的去数据相关性,它能将信号的能量集中在小波域一些大的小波系数中,而噪声的能量却分布于整个小波域内,因此经小波分解后信号的小波系数比噪声的大。于是,采用阈值的办法可以把信号的小波系数保留,而使绝大部分噪声小波系数置零[2]。目前,常用的阈值函数有硬阈值函数和软阈值函数。硬阈值法处理的结果可以很好地保留信号边缘等局部特征,软阈值法处理的结果要相对平滑,但是比较容易造成模糊等失真现象。
2 硬件实现
系统框图如图1所示。根据相关分析,设计采用了XILINX公司生产的超大规模 FPGA器件Virtex 5 XC5VSX50T。系统接口采用RS422串口,相对于RS232,通过RS422能够以更快的波特率来收发数据,同时其通信距离也比RS232更远。在进行小波变换之前需要预存一定长度的数据,因此在接口和小波变换模块之间需要设置一个FIFO。FPGA通过接口模块将收到的含噪信号数据存入FIFO模块中,预存32个数据。
为保证一定的滤波效果又不使算法的运算量过大,本文将小波变换模块的分解、重构层数设为5层。小波变换模块主要包括前向小波变换模块、阈值处理和逆向小波变换模块。前向小波变换模块完成对含噪信号的多层分解,将含噪信号分解为低频分量和高频分量。阈值处理模块去除经过多层小波分解出来的各层高频噪声,在前4层阈值处理过程中需将处理后的高频分量存储到相应的RAM中。逆向小波变换模块完成信号的多层重构,得出去噪后的信号。逆向小波变换模块重构信号的顺序和前向模块相反,是按最后一层到第一层的顺序重构信号,在进行到相应层次时将存放在相应RAM中经阈值处理后的高频分量取出与该层低频分量进行重构,完成5层逆向小波变换之后即可得到去噪后的信号。小波变换模块的FPGA结构图如图2所示。
本设计选用DB4小波对含噪信号进行提升小波变换,DBN系列的小波扩张性比较好,可以灵活地权衡增加支集长度(为了提高能量的集中度)带来的边界问题,且DB4小波滤波器长度较短,能够提高运算速度,也能够满足一定的滤波效果。
在MATLAB平台中通过执行语句“lsdb4=liftwave('db4');displs(lsdb4);”就能得到db4提升小波的方案信息。其方案信息如下:
lsdb4={ [-0.32227589] [-1.11712361 -0.30014226]
[-0.01880835 0.11764809] [2.13181671 0.63642827]
[-0.46908348 0.14003924 -0.02479124] [0.73412453]
[1.36216672] };
由提升小波算法可知,该算法主要由加、减、乘运算组成,对于FPGA实现来说,加减运算可以调用FPGA的加法器IP核,而浮点系数的乘运算可以通过移位相加来实现。以浮点系数-0.32227589为例,-0.32227589=-((1/4)+(1/16)+(1/128)),所以要实现数据与系数-0.32227589相乘,可以通过右移相加的方法来实现,这样做可以减少对乘法器的调用,从而减少了该部分设计时所需的面积,提高了芯片的处理速度。其具体实现框图如图3所示。
3 仿真结果及分析
本设计使用ISE 10.1软件完成了硬件电路的Verilog设计、综合,使用Modelsim 6.0D完成时序仿真,FPGA系统时钟为39 MHz,输入的信号采样率为5 kHz,输入的采样信号为某型号光纤陀螺的零漂信号,并添加幅值为1 V的伪随机噪声。
如图4所示,第二个信号indata是含噪声的信号,第三个信号outdata是经过提升小波变换后的去噪信号。由图4可以看出,光纤陀螺零漂信号已经完全淹没在噪声之中,在信噪比很低的情况下,经过小波去噪之后能够很好地滤除噪声信号。由图5和图6可以看出,FPGA的小波变换模块从接收到处理完一个数据点所需的时间约为6402632628 ps-6388706228 ps=13.93 μs,完全可以满足一般系统对信号处理实时性的要求。
算法用DSP(TI TMS320C6713)实现时,对C代码进行优化,处理一个数据点所需要的时间约为66μs,采用C和汇编混合编程对关键循环进行进行汇编优化,处理一个数据点所需要的时间约为40 μs。从实时性的角度来说,用FPGA实现该算法比用DSP更符合信号处理系统对实时性的要求。
本文提出了一套利用FPGA实现小波变换的方案。同传统滤波方法相比,小波变换法能更好地滤除噪声,在选好相应的小波后也能满足实时性的要求,是非常理想的信号处理方案。与用DSP处理器的方法相比,采用FPGA实现小波变换具有速度快、数据宽度可任意设置的特点,能更好地满足信号处理实时性的要求,并且Verilog语言具有可移植性的特点,具有更强的通用性。该方法可以应用在光电跟踪信号去噪及语音去噪等一维信号实时处理系统中,它在较为有效地消除噪声的同时又能基本满足系统的实时性。