看到一位博主写的关于EMD的一些见解,觉得挺有用,特用来保存分享,原文链接:https://www.ilovematlab.cn/thread-566089-1-1.html
EMD是一种信号分解工具。 与小波分解不同。小波分解是利用信号和小波之间的相关性来进行信号分解,当然小波的特性在分解过程中是可以变化的,即所谓的translation and scale。EMD则是完全根据信号本身的特点来进行分解,所以才称之为自适应的分解工具。 这里主要来谈谈EMD分解及其相关去燥是如何实现的。
EMD 程序目前流行的是法国GR的版本。如果稍微懂点编程知识,并不需要安装所谓的EMD工具箱,只需把EMD程序拷贝到相应路径下,直接调用就可以。如果涉及到希伯特黄频谱分析,同样可以把相应程序拷贝到相应路径下就可以了。
那么EMD分解是如何实现的呢? 最简单的来说,就是根据原始信号的上下极值点来进行IMF筛选的。首先选出信号的上下极值点,即极大值和极小值。然后利用cubic line interpolation这种插值方式来连接极大值和极小值,形成上下包络线。也有人有研究利用其它插值方式来构造包络线。上下包络线得到后求平均,然后从原信号中减去。这个过程一直迭代,直到剩余的部分满足IMF的两个条件,则停止筛选,认为其为IMF。后续的IMF都是按照这个程序进行筛选的,一直到残差。 这里面有几个问题值得注意:1. 在求上下包络线的时候,为了克服端点效应,一般程序里都有端点延拓部分,GR里用的是镜像延拓。 2. 从上面的描述来看,IMF的最终个数其实和极值点,插值方式,以及筛选终止条件有关。3. IMF的频率内容则是随着模态顺序的增长从高往低排列,例如IMF1含有的频率肯定大于IMF4的。 4. 因为提到频率,就必须要说EMD最大的一个问题就是模态混叠,及一个IMF里可能含有上或下IMF的频率内容。Eden Huang他们意识这个问题后提出了**EEMD算法,这个算法最大的毛病就是处理长信号时时效性特别特别差。**因为要迭代很多很多次。这是题外话了。5. EMD没有理论依据,仅仅是一个分解程序,这样造成的问题是很难解读单个IMF里所含有的信息成分。 这一点在EMD为基础的去燥程序中尤为突出。
另外,有时在使用EMD时会发现,例如 imf = emd(x),对x进行EMD分解,会不停的出现warning,提示筛选终止条件问题,最终导致信号分解时间过长,无法提取所需IMF。结合Eden Huang在EEMD中提到的,为了保持每个IMF的物理特性,迭代过程设置在6-10比较合理。这样上面刚刚提到的问题就可以解决了。例如 imf = emd(x,’fix’,10), 这样每迭代10次就产生一个IMF,而无需再去满足原先的筛选终止条件,这个也同样出现在EEMD中。当然,改变迭代次数的结果就是imf产生的个数会发生变化。 需要说明的一点是直接使用emd产生的imf中,最后一行是残差,所以IMF的个数其实是size(imf,1)-1.
关于EMD为基础的去燥,好多文献有提到可以直接使用小波去燥中阈值对各个IMF进行去燥,其实这种做法是及其不安全的。小波分解后,一般含噪声部分都认为在细节系数里,所以可以直接对细节系数进行处理。 这是由小波分解的稀疏性来决定的。EMD不一样,同样的白噪声经emd分解后在各个IMF中不能完全呈现出小波分解的那些特性,直接使用小波去燥的方式有很大的可能把原有信号信息也一并去除。 但欣喜的是EMD对白噪声进行分解时也会体现出一些比较特别的特性,比如从第二个IMF开始,他们的log2(IMF能量)呈线性关系。 利用这一特点,可以建立一个白噪声的模型,这个可以在“Development of EMD-Based Denoising Methods Inspired by Wavelet Thresholding”这个文献中看到。当然还得配合使用这个文献中的interval thresholding方式,在去除白噪声的应用中效果还可以。不过这个方法也仅仅适用于白噪声的情景。换做其他噪声效果不好。