快速小波变换的定点DSP实现
从第一个尺度j=1开始,求出滤波器系数与剩余系数的加权和,分别得到cj,k与dj,k,并且它们的长度均为N/2。依次求出j=2,3,…各尺度值,cj,k与dj,k的长度也将变为N/4,N/8,…。应注意到,滤波器系数序列与输入信号序列相乘时,各个系数依次相乘然后累加即为cj,k或dj,k值。计算完一个后,要将滤波器系数序列向后移两个位置,再与输入信号相乘。最后,只剩下两个值时,再从第一个位置继续,从而构成一个圆周形式,得到最后一个cj,k与dj,k。以j=1为例来说明这一点。
同样,可得d1,N/2-1。
在TMS320C2xx系列定点DSP中,并未提供直接实现上述算法的寻址方式,可以利用循环指令实现。其中,要用到的两条重要指令是MAC(乘累加指令)和RPT(重复指令)。MAC指令是DSP指令中最有特色的指令之一,当RPT流水线启动后,通过MAC指令可以在单指令周期内实现乘加操作。算法的关键是一个卷积计算,其过程用如下几条语句即可实现。假设程序存储器地址0xFF00h开始,存放了小波滤波器系数h(k),k=0,1,2,…,L-1的值,从0xFF80h开始,存放了小波滤波器系数g(k),k=0,1,2,…,L-1的值。数据寄存器地址0x1000h(用cc表示)开始,存放输入信号。计算c1,k程序如下
RPTL-1
MAC0FF00h,cc+2*k
下面简要介绍一下单个尺度上的计算过程。仍假设输入信号为N点采样值,小波滤波器长度为L。
由于有上述圆周形式的循环算法,直接计算所有值会有很多不便,因此将整个过程分为两部分。第一部分,保存c0,k(k=N-2,N-1,0,1,2,…,L-3)到一连续存储空间,然后计算k<N/2-L时的d1,k的值,并保存到临时存储空间datad(需要N个单元)中。第二部分计算k=N/2-L,…,N/2-1时的d1,k的值,保存到datad中(从第N/2-L单元开始)。与前面相同方法计算c1,0,c1,1,…,的值,保存时覆盖掉原来的c0,0,c0,1,…,即可。如果为了系数重构方便,可以把datad中前N/2个单元内容移到原来的c0,k(k=N/2,…,N-1)位置。如此方法便可得到分解系数。
4 结论
小波分析具有良好的时频局部性,是当今很受欢迎的分析方法之一,利用定点DSP进行小波变换,满足了实时性,具有良好的精度和低成本,是工控领域的理想选择。
- 一种长序列小波变换快速算法的DSP实现(08-11)
- 一种基于TS201的归一化互相关快速算法(06-29)
- 单片机求平方根的高效快速算法(01-18)
- Cortex—M0单片机二-十进制整数转换的快速算法(08-31)
- 单片机开平方的快速算法(06-29)