与基于MALLAT算法的小波变换不同,提升小波变换不产生数组L,只产生C数组。定义如下:
但是,信号长度必须是2的整数次幂。
由于算法可实现原位计算,因此,每层变换后,系数仍存在原始信号的数组中,格式为:[CD,CA]。下一层再变换时,将CA作为原始信号即可,直到分解结束。
每层变换的步骤:分裂->提升(多层预测/更新)->合并
各层提升的系数由MATLAB中的liftwave函数计算得到。基于MATLAB中此系数的性质,在此算法中,无论预测还是更新,都采用同一个函数;无论变换还是逆变换都采用加法运算。但是,逆变换中滤波器的符号取反。
与Mallat算法相比,不需要过多临时变量,不需要过多大的临时数组。需要的程序堆栈比较少。
**将数据进行提升格式更新/预测
* @功能:分裂后,data的前半部分为奇数序号的点(1,3,5...),后半部分为偶数序号的点(0,2,4...)
* @功能:分裂函数的反函数,data的前半部分为奇数序号的点(1,3,5...),后半部分为偶数序号的点(0,2,4...),
此函数将数据按正常顺序排列
**提升小波变换,即1层提升小波分解
* @return 正常则返回变换后近似系数和细节系数的长度,错误则返回0
**提升逆小波变换,即1层提升小波重构
* @return 正常则返回重构后的信号长度,错误则返回0
**提升逆小波变换,即1层提升小波重构
* @return 正常则返回重构后的信号长度,错误则返回0
**提升小波分解,可实现N层提升小波分解
1、原位分解,分解后原始数据即变为C数组
**提升小波重构,可实现N层提升小波重构
1、原位分解,分解后C数组即变为原始数据
1、 根据算法研究结果,确定需要进行小波分解的信号长度、小波函数和分解层数
因为是原位运算,不需要根据信号长度和小波分解层数去预定义数组L和C,因此不需要define信号长度和小波分解层数,直接在信号缓存和小波分解时指定即可。
a、根据所选定小波的提升格式,修改提升次数和每次提升时滤波器的最大长度
a、修改提升格式中滤波器的系数
//以db4为例,在MATLAB中计算出db4的提升格式如下:
b、修改提升格式中各层滤波器系数的长度、滤波延迟,以及最终的归一化系数
4、 使用分解和重构函数
在程序中合适的位置,缓存或预定义一段原始数据OrgSig,分解后的系数即保存在OrgSig中,再将OrgSig作为重构系数,重构之后的信号仍然保存在OrgSig中。使用例程如下:
小波变换需要的临时变量较大,当信号长度较大时,可能会引起HardFault,进而进入函数HardFault_Handler死循环。这时,需要在启动文件startup_stm32f40_41xxx.s中修改堆区大小。
1、 对于采样率为360Hz的ECG信号,利用db3对500个点进行4层小波分解后再重构,得到结果对比如下图,二者相关系数为1.0000。
与基于MALLAT算法的小波变换不同,提升小波变换不产生数组L,只产生C数组。定义如下:
但是,信号长度必须是2的整数次幂。
由于算法可实现原位计算,因此,每层变换后,系数仍存在原始信号的数组中,格式为:[CD,CA]。下一层再变换时,将CA作为原始信号即可,直到分解结束。
每层变换的步骤:分裂->提升(多层预测/更新)->合并
各层提升的系数由MATLAB中的liftwave函数计算得到。基于MATLAB中此系数的性质,在此算法中,无论预测还是更新,都采用同一个函数;无论变换还是逆变换都采用加法运算。但是,逆变换中滤波器的符号取反。
与Mallat算法相比,不需要过多临时变量,不需要过多大的临时数组。需要的程序堆栈比较少。
**将数据进行提升格式更新/预测
* @功能:分裂后,data的前半部分为奇数序号的点(1,3,5...),后半部分为偶数序号的点(0,2,4...)
* @功能:分裂函数的反函数,data的前半部分为奇数序号的点(1,3,5...),后半部分为偶数序号的点(0,2,4...),
**提升小波变换,即1层提升小波分解
* @return 正常则返回变换后近似系数和细节系数的长度,错误则返回0
**提升逆小波变换,即1层提升小波重构
* @return 正常则返回重构后的信号长度,错误则返回0
**提升逆小波变换,即1层提升小波重构
* @return 正常则返回重构后的信号长度,错误则返回0
**提升小波分解,可实现N层提升小波分解
**提升小波重构,可实现N层提升小波重构
1、原位分解,分解后C数组即变为原始数据
1、 根据算法研究结果,确定需要进行小波分解的信号长度、小波函数和分解层数
因为是原位运算,不需要根据信号长度和小波分解层数去预定义数组L和C,因此不需要define信号长度和小波分解层数,直接在信号缓存和小波分解时指定即可。
a、根据所选定小波的提升格式,修改提升次数和每次提升时滤波器的最大长度
a、修改提升格式中滤波器的系数
//以db4为例,在MATLAB中计算出db4的提升格式如下:
b、修改提升格式中各层滤波器系数的长度、滤波延迟,以及最终的归一化系数
4、 使用分解和重构函数
在程序中合适的位置,缓存或预定义一段原始数据OrgSig,分解后的系数即保存在OrgSig中,再将OrgSig作为重构系数,重构之后的信号仍然保存在OrgSig中。使用例程如下:
小波变换需要的临时变量较大,当信号长度较大时,可能会引起HardFault,进而进入函数HardFault_Handler死循环。这时,需要在启动文件startup_stm32f40_41xxx.s中修改堆区大小。
1、 对于采样率为360Hz的ECG信号,利用db3对500个点进行4层小波分解后再重构,得到结果对比如下图,二者相关系数为1.0000。