本文主要实现如何对数据进行降噪处理。小波分析曾被称为“数学的显微镜”,可见其的地位与应用价值。
1. waveslim包
核心代码:dwt(x, wf=“la8”, n.levels=4, boundary=“periodic”)
dwt.nondyadic(x)(包含要分解的数据的向量或时间序列。这必须是并矢长度向量(2的幂))
-
wf:要在分解中使用的小波滤器的名称。默认情况下,这设置为“la8”,即长度为L=8的Daubechies正交紧支撑小波(Daubechies,1992),最小非对称族。
-
n.levels:指定分解的深度。这必须是小于或等于log(length(x),2)的数字。
-
boundary:指定边界条件的字符串。如果boundary==“periodic”是默认值,则假设分解的向量在其定义的间隔内是周期的;如果边界=“reflection”,则超出其边界的向量被假定为其自身的对称反射。
返回结果【列表形式】:d(小波系数)、s(尺度系数)
2.wavelets包
核心代码:dwt(X, filter=“la8”, n.levels, boundary=“periodic”, fast=TRUE)
(一个单变量或多变量的时间序列。数字向量、矩阵和数据帧均可)
- filter:一个wt.filter对象,一个表示要在分解中使用哪个小波滤波器的字符串,或者一个小波系数的数值向量(不是缩放系数)。有关可接受的筛选器名称,请参阅帮助(wt.filter)。
具体有以下四个小波滤波器:
①Daubechies(不具有对称性;db1即为“haar”滤波器)
②Least Asymetric
③Best Localized
④Coiflet(具有比①更好的对称性) - n.levels:指定分解级别的整数。
- boundary:同上。
- fast:一种逻辑标志,如果为真,则表示金字塔算法是用内部C函数计算的。否则,所有计算中只使用R代码。
返回结果【非列表形式】:W(小波系数)、V(尺度系数)、level(小波分解级别的整数值)
3.有关小波降噪的知识
- 通常大家会用分解的最后一层作为降噪的结果进行分析。最后一层(最高阶)与原始数据只差高频的低阶细节,正如https://blog.csdn.net/zhang0558/article/details/76019832文章所言:
在小波分析中经常用到近似和细节,近似表示信号的高尺度,即低频信息;细节表示信号的低尺度,即高频信息。对含有噪声的信号,噪声分量的主要能量集中在小波解的细节分量中。
- 有图参阅(waveslim包)【来自: R语言 离散小波变化】
左边高频部分一般被视为噪声。一般而言,分层降噪不超过五层为宜;同时需要结合领域数据特点正确选择基函数。相对而言,MATLAB有更加丰富的小波基函数可供选择。
有关小波分析的知识详解,请参阅:小波分析与傅里叶变换的异同?