利用小波变换做实时信号处理

引言

  在对时变信号进行分析时,小波变换则显现出了明显的优势,因为它能够同时在时域和频域进行局部分析。小波算法由于具有滤波效果好、信号细节损失少的优点,从而引起了人们的广泛关注和实际生活中的不断应用。目前常用的硬件芯片分为两大类:基于大规模可编程集成电路FPGA的纯硬件实现方案和基于高速通用DSP的软件实现方案。采用FPGA的硬件实现方案硬件接口设计灵活,可以和任意数字外围电路直接使用,且其具有高度的集成度和高速的处理速度;而基于高速通用DSP的软件实现方案代码设计灵活,可以快速修改和调试程序。由于小波算法运算量较大,采用DSP方案则不能满足系统的实时性要求。于是,本文提出了一种采用FPGA实现小波算法的方案。

  1 小波去噪的基本原理

  对于小波算法,应用最广泛的是信号处理和图像处理,而在这两个领域中应用最多的就是信号及图像的去噪和压缩。由于在正交小波中,正交基的选取比传统方法更接近实际信号本身,所以通过小波变换可以更容易地分离出噪声,因此,相对于传统方法,小波分析在去噪和压缩方面有着众多优势。

  小波分析用于去噪的过程如下:

  1.1 分解

  选定一种小波,对含噪信号进行N层小波分解,得到各层分解的小波系数。

  1.2 阈值处理

  将通过分解得出的各层高频小波系数进行阈值处理,在进行到最后一层时,要同时对该层的高、低频系数进行阈值处理。

  1.3 重构

  将经过阈值处理后的小波系数通过小波逆变换重构出去噪后的信号。

  2 硬件实现

  系统框图如图1所示。根据相关分析,设计采用了赛灵思公司生产的超大规模 FPGA器件Virtex 5 XC5VSX50T。系统接口采用RS422串口,RS422能够以更快的波特率来收发数据,同时其通信距离也更远。在进行小波变换之前需要预存一定长度的数据,因此在接口和小波变换模块之间需要设置一个FIFO。FPGA通过接口模块将收到的含噪信号数据存入FIFO模块中,预存32个数据。

利用小波变换做实时信号处理

  为保证一定的滤波效果又不使算法的运算量过大,本文将小波变换模块的分解、重构层数设为5层。小波变换模块主要包括前向小波变换模块、阈值处理和逆向小波变换模块。前向小波变换模块完成对含噪信号的多层分解,将含噪信号分解为低频分量和高频分量。阈值处理模块去除经过多层小波分解出来的各层高频噪声,在前4层阈值处理过程中需将处理后的高频分量存储到相应的RAM中。逆向小波变换模块完成信号的多层重构,得出去噪后的信号。逆向小波变换模块重构信号的顺序和前向模块相反,是按最后一层到第一层的顺序重构信号,在进行到相应层次时将存放在相应RAM中经阈值处理后的高频分量取出与该层低频分量进行重构,完成5层逆向小波变换之后即可得到去噪后的信号。小波变换模块的FPGA结构图如图2所示。

利用小波变换做实时信号处理

  本设计选用DB4小波对含噪信号进行提升小波变换,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更符合信号处理系统对实时性的要求。

  4 结语

  本文提出了利用FPGA实现小波信号处理的方案。相比传统滤波方法,小波变换法能更好地滤除噪声,在选好相应的小波后也能满足实时性的要求,是非常理想的信号处理方案。采用FPGA实现小波变换,速度快、数据宽度可任意设置,并且Verilog语言具有可移植性的特点,具有更强的通用性。该方法可以应用在光电跟踪信号去噪及语音去噪等一维信号实时处理系统中,它在较为有效地消除噪声的同时又能基本满足系统的实时性。