详情可参见参考文献1,3,很棒的文章,感谢原作者的分享:
手动实现一维离散数据小波分解与重构
一维离散数据小波变换实用案例
这里是个人的学习笔记和其它资料的综合,最后附上了对实际信号的小波分解结果
更新20200902:文献2适用于在用matlab进行尝试时阅读,通过它能够很好的掌握matlab中一维信号小波分析的使用方法
1、时变信号的概念【1】
既然有了傅里叶变换这个工具,为什么还需要小波变换呢?因为:傅里叶变换只能告诉你原始信号中有哪些频率,但不能告诉你这些频率的信号出现在什么时间!也就说明:如果信号是"时变"的(频率随着时间是改变的),那么单纯用傅里叶变换所能反映的信息就十分有限了!因此,针对时变信号,我们使用小波变换。
图1展示"时变信号"与"时不变信号"区别:
2、小波变换的过程【1】
小波分解的流程总结为:先将信号对半分解成"低频近似"与"高频细节"2个部分;同样的操作每次将上一次的"低频近似"部分再分成低频近似和高频细节部分,逐次细分(最多分解到每个部分只有1个点)。每次分出的高频细节部分不做分解。因此:每次分出低频近似部分相当于对本次信号做"低通滤波",分出的高频细节部分相当于对本次信号做"高通滤波"。所以:每次小波分解就是用1个低通滤波器和1个高通滤波器对本次信号做1次低通滤波和1次高通滤波而已。
(最后会剩下一个低通滤波信号和一堆高频滤波信号)
由上述说明可得:小波分解的关键在于2个(一组)滤波器。对于现实的离散数据而言,滤波器看上去很高大上其实就是很简单的数字而已,滤波听起来很难,其实就是做"点乘相加"而已。
最简单的一组滤波器:
低通滤波器【0.5,0.5】,高通滤波器【0.5,-0.5】
原始信号【2,5,8,9,7,4,-1,1】
小波多级分解清楚了,那怎么"重构/恢复"回去呢?塔式分解的逆向合成而已。根据滤波器的规律,逐级往上递推即可实现重构/恢复~
那么问题就来了:
1、选择什么样的滤波器是合适的?常见滤波器
常见参见第三部分,选择合适的滤波器是小波应用的一大难题,有空的话再看看别的资料进行说明【#Todo】
2、滤波出来的高频细节有什么用呢
参见文章第五部分
3.小波变换的MATLAB实现【4】
使用Matlab进行1维小波分析主要使用的函数有:
wavedec小波分解
waverec 小波重建
appcoef 近似系数
detcoef 细节系数
1维小波分析主要使用的滤波器有:
Haar小波
Daubechies小波
从小波变换的算法中其实可以看到,MATLAB中小波变换的算法实际上是先不断的将信号通过高通和低通滤波器后,进行2倍下采样的过程,因此信号会越来越短。
(对于一个样值序列间隔几个样值取样一次,这样得到新序列就是原序列的下采样。)
用振动信号做小波变换可以得到如下的图像,代码可参考资料4,对代码中用到函数的详细解释可参考资料3
4、一维离散小波1级和多级分解【2】
上面提到的那些函数具体是用来干什么的呢:(这部分由于没有实际使用,我也不是特别清楚,下面是参考资料里的解释)
matlab自带的小波分析工具非常全!实际工作中直接用即可。但是刚开始使用会遇到挫折:它的函数太多,并且它们的"名称、功能、配套使用"等要求都有些"相近",很容易导致糊涂!
下面先列举3条关键理解,后面会用到:
小波分解,分解到的"不是频率域"!可以抽象理解为"小波域",但其实没有实际内涵!傅里叶变换到频率域是有实际内涵的;
小波分解得到的"小波系数"是"没有量纲"的!它其实是"没有实际意义的数",需要做系数重构才能从"小波域"再转回到"时域";
"系数重构"与"重构信号"不是一个东西!系数重构就是把无量纲的小波分解系数变回到有意义的"时域";"重构信号"就是把分解的完整恢复回去。
说明:"系数提取"只有"多级分解"才会用的到! 1级分解是不需要"系数提取"的!因为就分成了低频和高频2个部分,直接用1维或2维分解函数的返回结果就行了
还是要着重强调一点:用自带的函数做完"小波分解"后,得到的"小波系数"是"没有量纲"的!可以理解为原始信号域映射到小波域(小波域不是什么具体的东西,只是为了方便理解)!只有把分解出来的"小波系数"再做"系数重构"后,才能回到原始的信号域,得到原始信号的不同的低频和高频子信号成分(还是时域的显示)。
(
wavedec就是小波分解,将一个信号分解成指定层数n,并返回各层的小波系数
appcoef:提取DWT后小波的逼近系数(低频部分)。
detcoef:提取DWT后小波的细节系数(高频部分)
wrcoef——输入小波系数,重建信号,它重建的是原信号在指定层次的,高频或者低频分量
waverec——它的作用与wavedec相反,即将给定的小波系数一次性完全重建出信号。
)
进行小波包变换的基本思想是让信息能量集中,在细节系数中寻找有序性,因此单纯把所有系数进行分解没有实际的帮助,只会增加计算量,因此需要有一定的衡量原则,一般采用熵最小原则,熵越小,信息的规律性越强,一般的判别方法是看系数分解后的系数的熵的和是否大于原系数的熵。
5、小波变换的实际应用【3】
小波变换专业处理时变信号!其重要用途包含:突变点检测、时频分析、信号降噪等。
1)突变点检测
(对个人启示是可以用小波的单极变换做工况点或状态突变点检测)
2)时频分析
关于时频分析,这里再补充一个实际的案例。
3)信号降噪
所谓阈值去噪简而言之就是对信号进行分解,然后对分解后的系数进行阈值处理,最后重构得到去噪信号。该算法其主要理论依据是:小波变换具有很强的去数据相关性,它能够使信号的能量在小波域集中在一些大的小波系数中;而噪声的能量却分布于整个小波域内.因此,经小波分解后,信号的小波系数幅值要大于噪声的系数幅值.可以认为,幅值比较大的小波系数一般以信号为主,而幅值比较小的系数在很大程度上是噪声.于是,采用阈值的办法可以把信号系数保留,而使大部分噪声系数减小至零.小波阈值收缩法去噪的具体处理过程为:将含噪信号在各尺度上进行小波分解,设定一个阈值,幅值低于该阈值的小波系数置为0,高于该阈值的小波系数或者完全保留,或者做相应的“收缩(shrinkage)”处理.最后将处理后获得的小波系数用逆小波变换进行重构,得到去噪后的信号.
参考资料
【1】https://www.jianshu.com/p/8847e6eebe16 手动实现一维离散数据小波分解与重构
【2】https://www.jianshu.com/p/56733f6c0a10 一维离散小波变换函数使用总结
【3】https://www.jianshu.com/p/f1c6b7f73995 一维离散数据小波变换实用案例
【4】https://blog.csdn.net/qq_24598387/article/details/84977504 MATLAB小波变换工具箱 Wavelet Toolbox 实际操作与训练