【MATLAB】史上最全的 18 种信号分解算法全家桶
「【公众号】(Lwcah)由于改变了推送规则,为了每次新的推送可以在第一时间出现在您的订阅列表中,记得将本【公众号】(Lwcah)设为星标或置顶哦~」
有意向获取代码,请转文末观看代码获取方式~
【MATLAB】5 种高创新性的信号分解算法:
https://mbd.pub/o/bread/ZJ6bkplp
【MATLAB】13 种通用的信号分解算法:
https://mbd.pub/o/bread/mbd-ZJWZmptt
【MATLAB】史上最全的 18 种信号分解算法全家桶:
https://mbd.pub/o/bread/ZJ6bkplq
其他类算法
【MATLAB】史上最全的11种数字信号滤波去噪算法全家桶:
https://mbd.pub/o/bread/ZJiYlphx
【MATLAB】史上最全的9种频谱分析算法全家桶:
https://mbd.pub/o/bread/ZJmVlJ5x
大家吃一顿火锅的价格便可以拥有18种信号分解算法,绝对不亏,知识付费是现今时代的趋势,而且都是我精心制作的教程,有问题可随时反馈~也可单独获取某一算法的代码(见每一算法介绍后文)~
关于代码有任何疑问,均可关注【公众号】(Lwcah)后,获取 up 的个人【微信号】,添加【微信号】后可以一起探讨科研,写作,代码等诸多学术问题,我们一起进步~
1 【MATLAB】EMD 信号分解算法
EMD 是一种信号分解方法,它将一个信号分解成有限个本质模态函数 (EMD) 的和,每个 EMD 都是具有局部特征的振动模式。EMD 分解的主要步骤如下:
- 将信号的局部极大值和极小值连接起来,形成一些局部极值包络线。
- 对于每个局部极值包络线,通过线性插值得到一条平滑的包络线。然后将原信号减去该包络线,得到一条局部振荡的残差信号。
- 对于该残差信号,重复步骤1和2,直到无法再分解出新的局部振荡模式为止。
- 将所有的局部振荡模式相加,得到原始信号的EMD分解。 EMD分解的优点是能够很好地处理非线性和非平稳信号,并且不需要预先设定基函数。因此,EMD分解在信号处理、图像处理和模式识别等领域得到了广泛的应用。
原始数据分解各分量示意图
【MATLAB】EMD 信号分解算法:
https://mbd.pub/o/bread/ZJWZmplq
2【MATLAB】EEMD信号分解算法
EEMD是对EMD的改进,可以克服EMD的一些缺点。EEMD的主要思想是通过对原始数据集进行多次噪声扰动,获得多个EMD分解的集合,然后将这些EMD集合求平均,得到最终的EEMD分解结果。EEMD的主要步骤如下:
- 对原始信号进行若干次随机噪声扰动,得到多个噪声扰动数据集。
- 对每个噪声扰动数据集进行EMD分解,得到多个EMD分解集合。
- 将每个 EMD 分解集合的对应分量进行平均,得到最终的 EEMD 分解结果。 EEMD 分解的优点是能够克服 EMD 的局限性,如基函数的选择和模态重叠等问题。同时,EEMD 还可以提供更好的信噪比和更高的分解精度。因此,EEMD 在信号处理、图像处理和模式识别等领域也得到了广泛的应用。
原始数据分解各分量示意图
原始数据分解各分量的箱型图
【MATLAB】EEMD信号分解算法:
https://mbd.pub/o/bread/ZJWZmplt
3【MATLAB】CEEMD信号分解算法
CEEMD是对EEMD的改进,它在EEMD的基础上引入了一个自适应的扩展方法,可以更好地解决EMD/EEMD中存在的模态混叠问题。CEEMD的主要步骤如下:
- 对原始信号进行若干次随机噪声扰动,得到多个噪声扰动数据集。
- 对每个噪声扰动数据集进行EMD分解,得到多个EMD分解集合。
- 对于每个EMD分解集合,通过一个自适应的扩展方法,将每个局部模态函数分配到它所属的固有模态函数上,消除模态混叠的影响。
- 将每个扩展后的 EMD 分解集合的对应分量进行平均,得到最终的 CEEMD 分解结果。 CEEMD 分解具有良好的局部性和自适应性,能够更准确地分解信号,同时避免了 EEMD 中的模态混叠问题。因此,CEEMD 在信号处理、图像处理和模式识别等领域也得到了广泛的应用。
原始数据分解各分量示意图
【MATLAB】CEEMD信号分解算法:
https://mbd.pub/o/bread/ZJWZmplv
4【MATLAB】CEEMDAN信号分解算法
CEEMDAN是对CEEMD的进一步改进,它引入了一种自适应噪声辅助方法,可以更好地处理信号中的高频噪声。CEEMDAN的主要步骤如下:
- 对原始信号进行若干次随机噪声扰动,得到多个噪声扰动数据集。
- 对每个噪声扰动数据集进行CEEMD分解,得到多个CEEMD分解集合。
- 对于每个CEEMD分解集合,引入自适应噪声辅助方法,通过将噪声信号添加到每个局部模态函数中,增强信号的边缘和高频部分。
- 将每个自适应噪声辅助后的 CEEMD 分解集合的对应分量进行平均,得到最终的 CEEMDAN 分解结果。 CEEMDAN 分解具有更好的对高频噪声的适应性,能够更准确地分解信号。因此,CEEMDAN 在信号处理、图像处理和模式识别等领域也得到了广泛的应用。
原始数据分解各分量示意图
原始数据分解各分量的箱型图
【MATLAB】CEEMDAN信号分解算法:
https://mbd.pub/o/bread/ZJWZmply
5【MATLAB】ICEEMDAN信号分解算法
ICEEMDAN (Improved Complete Ensemble EMD with Adaptive Noise) 是一种基于经验模态分解(Empirical Mode Decomposition, EMD)的信号分解方法。与传统的 EMD 方法不同,ICEEMDAN 引入了自适应噪声和完整集成策略,以提高分解的稳定性和准确性。在 ICEEMDAN 方法中,首先采用 EMD 将原始信号分解成多个固有模态函数(Intrinsic Mode Functions, IMF),然后通过自适应噪声算法去除每个 IMF 中的噪声,最后将去噪后的 IMFs 进行完整集成,得到分解后的信号。相比于传统的 EMD 方法,ICEEMDAN 采用自适应噪声算法去除噪声,可以减少分解过程中的模态混叠问题。此外,完整集成策略可以保证分解后的信号保留了原始信号的全部信息,提高了分解的准确性。 ICEEMDAN 分解方法在信号处理、图像处理、语音处理等领域得到了广泛应用,具有较高的分解效果和可靠性。
原始数据分解各分量示意图
【MATLAB】ICEEMDAN信号分解算法:
https://mbd.pub/o/bread/ZJaYlJxw
6【MATLAB】小波分解信号分解算法
小波分解算法是一种数学方法,用于将信号分解为不同频率的小波成分。这种算法基于小波函数,可以用于信号处理、图像压缩和数据压缩等领域。小波分解算法的基本思想是将一个信号分解成多个小波子带,每个小波子带代表了一个不同频率的小波成分。这些小波子带可以分别进行处理,例如滤波、降采样等操作,然后再进行重构,得到原始信号。小波分解算法的优点是可以提供更好的时频分辨率,对于瞬态信号和非平稳信号的处理效果更好。同时,小波分解算法也可以用于图像压缩和数据压缩,因为小波分解后的子带可以选择性地保留或舍弃,从而实现数据压缩。总之,小波分解算法是一种强大的信号处理技术,被广泛应用于信号处理、图像压缩和数据压缩等领域。
原始数据分解各分量示意图
【MATLAB】小波分解信号分解算法:
https://mbd.pub/o/bread/ZJWZmpps
7【MATLAB】VMD信号分解算法
VMD是一种新型的信号分解方法,它是通过使用变分推断方法将信号分解为一组局部振动模式,每个模式包含多个频率组件。VMD的主要步骤如下:
- 将原始信号进行多次低通滤波,得到多个频带信号。
- 对每个频带信号进行变分推断,得到该频带信号的局部振动模式。
- 将所有频带信号对应的局部振动模式相加,得到原始信号的 VMD 分解。 VMD 分解具有以下优点:能够自动提取信号的局部特征,避免了传统分解方法中需要手动选择基函数的问题;能够处理非线性和非平稳信号,并且不会产生模态重叠的问题。因此,VMD 在信号处理、图像处理和模式识别等领域也得到了广泛的应用。
原始数据分解各分量示意图
【MATLAB】VMD信号分解算法:
https://mbd.pub/o/bread/ZJWZmppu
8【MATLAB】LMD信号分解算法
LMD (Local Mean Decomposition) 分解算法是一种信号分解算法,它可以将一个信号分解成多个局部平滑的成分,并且可以将高频噪声和低频信号有效地分离出来。LMD 分解算法是一种自适应的分解方法,可以根据信号的局部特征来进行分解,从而提高了分解的精度和效果。 LMD 分解算法的基本思想是,在原始信号中选取局部的极大值点和极小值点,然后通过这些极值点之间的平均值来计算一个局部平滑的成分。这个过程可以迭代进行,直到得到所有的局部平滑的成分。最后,将这些局部平滑的成分加起来,即可得到原始信号的分解结果。 LMD 分解算法具有以下优点:
- 自适应性强:LMD 分解算法可以根据信号的局部特征来进行分解,从而提高了分解的精度和效果。
- 分解精度高:LMD 分解算法可以将高频噪声和低频信号有效地分离出来,从而提高了分解的精度。
- 计算效率高:LMD 分解算法的计算量较小,可以快速地进行信号分解。总之,LMD 分解算法是一种高效、精确、自适应的信号分解算法,被广泛应用于信号处理、图像处理、语音处理等领域。
原始数据分解各分量示意图
【MATLAB】LMD信号分解算法:
https://mbd.pub/o/bread/ZJWZmppw
9【MATLAB】RLMD信号分解算法
RLMD(Robust Local Mode Decomposition)是一种鲁棒的局部模态分解方法。它是通过在局部区间内对信号进行多项式拟合,提取局部特征,进而分解信号为多个局部模态函数的和。RLMD的主要步骤如下:
- 将原始信号分段,对每个局部区间内的信号进行多项式拟合,得到该局部区间的局部趋势。
- 将原始信号减去该局部区间的局部趋势,得到该局部区间内的局部振动模式。
- 对每个局部振动模式,重复步骤1和2,直到该局部振动模式变为平稳信号,得到该局部区间内的局部模态函数。
- 将所有局部区间内的局部模态函数相加,得到原始信号的 RLMD 分解。 RLMD 分解具有对噪声和异常值的鲁棒性,能够更准确地分解信号。同时,RLMD 还能够处理非平稳信号,具有较好的局部性和自适应性。因此,RLMD 在信号处理、图像处理和模式识别等领域也得到了广泛的应用。
原始数据分解各分量示意图
【MATLAB】RLMD信号分解算法:
https://mbd.pub/o/bread/ZJWZmppx
10【MATLAB】EWT 信号分解算法
EWT (Empirical Wavelet Transform) 分解算法是一种用于信号分解的方法,它可以将信号分解成多个局部频率的小波成分,从而实现对信号的高效处理和分析。EWT 分解算法基于小波分析和自适应滤波器,可以适应不同类型的信号,并且能够处理非平稳信号和非线性信号。 EWT 分解算法的基本思想是,首先将信号分解成多个局部频率的小波成分,然后通过自适应滤波器对每个小波成分进行去噪和平滑处理,最后将处理后的小波成分合并起来得到原始信号的分解结果。 EWT 分解算法具有以下优点:
- 适应性强:EWT 分解算法可以适应不同类型的信号,并且能够处理非平稳信号和非线性信号。
- 分解精度高:EWT 分解算法可以将信号分解成多个局部频率的小波成分,从而提高了分解的精度。
- 计算效率高:EWT 分解算法的计算量较小,可以快速地进行信号分解。总之,EWT 分解算法是一种高效、精确、适应性强的信号分解算法,被广泛应用于信号处理、图像处理、语音处理等领域。
原始数据分解各分量示意图
【MATLAB】EWT 信号分解算法:
https://mbd.pub/o/bread/ZJWZmppy
11【MATLAB】MLPTDenoise信号分解算法
MLPTDenoise(Multi-Level and Multi-Scale Principal Trend Denoising)是一种多级、多尺度主导趋势去噪方法。它是通过将信号分解为多个层次和尺度的主导趋势,进而去除噪声和冗余信息。MLPTDenoise的主要步骤如下:
- 对原始信号进行小波变换,得到多个尺度的小波系数。
- 对每个小波系数进行主导趋势分解,得到该尺度上的主导趋势和细节信号。
- 将每个尺度的主导趋势相加,得到该层次的主导趋势。
- 将该层次的主导趋势作为信号的一部分,将细节信号作为噪声,对噪声进行滤波去除。
- 将去除噪声后的信号进行重构,得到该层次的去噪信号。
- 重复步骤 2~5,直到所有层次的信号都被分解和去噪,得到原始信号的 MLPTDenoise 分解。 MLPTDenoise 分解具有对噪声和冗余信息的较好抑制效果,同时能够保留信号的主导趋势信息,避免了传统方法中的信号失真问题。因此,MLPTDenoise 在信号处理、图像处理和模式识别等领域也得到了广泛的应用。
原始数据分解各分量示意图
【MATLAB】MLPTDenoise信号分解算法:
https://mbd.pub/o/bread/ZJWZmptq
12【MATLAB】MODWT信号分解算法
MODWT(Maximal Overlap Discrete Wavelet Transform)是一种最大重叠离散小波变换方法,它是通过多级小波分解,将信号分解为不同尺度和频率的小波系数。MODWT的主要步骤如下:
- 对原始信号进行多级小波分解,得到多个尺度和频率的小波系数。
- 对每个尺度的小波系数进行重构,得到重构系数。
- 对每个尺度的重构系数进行小波变换,得到该尺度的小波系数。
- 将所有尺度的小波系数相加,得到原始信号的 MODWT 分解。 MODWT 分解具有对信号的多尺度分析能力,能够提供不同尺度和频率的信号信息。同时,MODWT 还能够避免传统小波变换中的信号失真问题,具有比较好的重构能力。因此,MODWT 在信号处理、图像处理和模式识别等领域也得到了广泛的应用。
原始数据分解各分量示意图
【MATLAB】MODWT信号分解算法:
https://mbd.pub/o/bread/ZJWZmptr
13【MATLAB】辛几何模态分解信号分解算法
辛几何模态分解(Symplectic Modal Analysis,SMA)是一种用于辛结构系统(如机械系统、光学系统等)振动分析的方法。它基于辛几何理论和模态分析方法,能够在保持系统辛结构的前提下,分解系统振动模态,并得到相应的振动频率和阻尼比。具体来说,辛几何模态分解首先将辛结构系统的运动方程转化为哈密尔顿形式,并通过辛几何积分方法求解系统的运动轨迹。然后,通过对系统轨迹进行奇异值分解(SVD),可以得到系统的振动模态及其阻尼比和振动频率。相比于传统的有限元方法,辛几何模态分解能够更准确地描述系统的振动行为,并且可以避免传统方法中出现的不物理的振动模态。辛几何模态分解在机械系统、光学系统、天体力学等领域有着广泛的应用,例如用于光学望远镜的振动分析、用于机械系统的结构优化等。
原始数据分解各分量示意图
【MATLAB】辛几何模态分解信号分解算法:
https://mbd.pub/o/bread/ZJaYmplu
14【MATLAB】 SSA奇异谱分析信号分解算法
SSA奇异谱分析(Singular Spectrum Analysis)是一种处理非线性时间序列数据的方法,可以对时间序列进行分析和预测。
它基于构造在时间序列上的特定矩阵的奇异值分解(SVD),可以从一个时间序列中分解出趋势、振荡分量和噪声。
具体流程如下:
- 根据原始时间序列构建轨迹矩阵X XX。
- 对矩阵X进行奇异值分解:X = ∑ i = 1 r σ i U i V i T X=\sum_{i=1}^{r} \sigma_i U_i V_{i}^TX=∑i=1rσiUiViT 。
- 按奇异值生成r rr个子矩阵:X i = σ i U i V i T X_i = \sigma_i U_i V_{i}^TXi=σiUiViT 。
- 根据某一分组原则将子矩阵X i X_iXi分为m mm个组。
- 对子矩阵X i X_iXi进行对角均值化处理得到子序列。
- 对m mm个组中的子序列相加得到分组子序列。
以上就是SSA奇异谱分析信号分解算法的基本步骤。
Toeplitz 法计算的协方差矩阵 C
trajectory法计算的协方差矩阵C
特征值和特征向量示意图
前四大主成分
前四大重构成分
重建和原始时间序列对比
【MATLAB】 SSA奇异谱分析信号分解算法:
https://mbd.pub/o/bread/ZJ6bkphq
15【MATLAB】 多元变分模态分解MVMD信号分解算法
多元变分模态分解(MVMD)是一种信号分解方法,可以自适应地实现信号的频域剖分及各分量的有效分离。
MVMD算法的具体步骤如下:
- 假设原始信号S被分解为K个分量μ,保证分解序列为具有中心频率的有限带宽的模态分量,同时各模态的估计带宽之和最小,构造变分问题。
- 引入惩罚参数α、Lagrange乘法算子λ,将约束变分问题转变为非约束变分问题,得到增广Lagrange表达式。
- 初始化参数μ1 、ω2 、λ1 和n,n初值设为0。
- 设置循环过程,令n=n+1,μk 、ωk、λt依据下式更新值。
- 当分量满足式(6)时,求解完毕。
以上是多元变分模态分解(MVMD)信号分解算法的基本介绍。
原始数据分解各分量示意图
【MATLAB】 多元变分模态分解MVMD信号分解算法
https://mbd.pub/o/bread/ZJ6bkphr
16【MATLAB】逐次变分模态分解SVMD信号分解算法
逐次变分模态分解(Sequential Variational Mode Decomposition,简称SVMD)是一种用于信号处理和数据分析的方法。它可以将复杂的信号分解为一系列模态函数,每个模态函数代表了信号中的一个特定频率成分。
SVMD的主要目标是提取信号中的不同频率成分,并将其重构为原始信号。它的基本原理是通过变分模态分解的方式将信号分解为多个模态函数。在每个迭代步骤中,SVMD通过最小化信号与模态函数之间的差异来更新模态函数,这个过程会不断重复,直到收敛为止。最终得到的模态函数可以用于重构原始信号。
SVMD的另一个关键特点是逐次分解。在每个迭代步骤中,SVMD会从信号中提取出一个主要的频率成分,并将其从信号中剔除。这样,每个迭代步骤都会提取出信号中的一个频率成分,直到所有的频率成分都被提取完毕。这种逐次分解的方式可以更好地捕捉到信号中的不同频率成分。
总的来说,SVMD是一种有效的信号分解方法,它可以自适应地实现信号的频域剖分及各分量的有效分离。
原始数据分解各分量示意图
【MATLAB】逐次变分模态分解SVMD信号分解算法:
https://mbd.pub/o/bread/ZJ6bkphs
17【MATLAB】 TVFEMD信号分解算法
TVFEMD (Time-Variant Filtered Empirical Mode Decomposition) 是一种信号分解算法,它是基于 EMD (Empirical Mode Decomposition) 方法发展而来的。
EMD是一种自适应的数据分析方法,可以有效地将复杂的信号分解为一系列固有模式函数(Intrinsic Mode Function,简称IMF)。然而,EMD在处理非平稳信号时,存在一些问题,如间歇性和模态混淆。为了解决这些问题,TVFEMD 方法在 EMD 的基础上引入了时变滤波器。
TVFEMD 方法的核心是采用时变滤波技术完成筛选过程,通过充分促进瞬幅和频率信息,自适应地设计了局部截止频率。这种方法可以根据信号的特性自适应地调整滤波器的频率响应,从而更好地提取出信号中的不同频率成分。
为了解决间歇性问题,TVFEMD 引入了一种截止频率调整算法。这种算法可以根据信号的局部特性调整滤波器的截止频率,从而更好地捕捉到信号中的高频成分。
为了提高低采样率下的性能,TVFEMD 提出了一种固有模式函数的带宽标准。这种方法可以根据信号的特性自适应地调整固有模式函数的带宽,从而更好地提取出信号中的低频成分。
总的来说,TVFEMD 是一种完全自适应的信号分解方法,适合于线性和非平稳信号的分析。与 EMD 相比,TVFEMD 可以提高频率分离性能和低采样率下的稳定性,并具有抗噪声干扰的鲁棒性。
原始数据分解各分量示意图
【MATLAB】 TVFEMD信号分解算法:
https://mbd.pub/o/bread/ZJ6bkpht
18【MATLAB】 稳健的经验模式分解REMD信号分解算法
稳健的经验模式分解(Robust Empirical Mode Decomposition,简称REMD)是一种改进的经验模式分解方法,它能够应对一些EMD无法应对的问题,例如数据过于嘈杂,或者数据存在不规则的离群值等。
REMD是通过采用自适应筛分停止标准(SSSC)来实现的。SSSC是一种软筛选停止标准,它通过从混合信号中提取出一组单分量信号(称为固有模式函数IMF),来自动停止EMD的筛分过程。REMD方法在实现过程中,先使用几个工具箱中的函数,然后编写自己的代码,以实现整个算法。
REMD算法的步骤具体包括以下几个方面:
- 数据预处理:由于实际信号中可能存在噪声或异常值,需要对原始信号进行预处理。REMD方法采用稳健性统计方法,如中位数滤波器,对原始信号进行去噪和异常值处理。
- 经验模式分解:将预处理后的信号进行经验模式分解(EMD),得到一系列固有模式函数(IMF)。在EMD过程中,采用自适应筛分停止标准(SSSC)来控制分解的停止,以避免过度分解和噪声干扰。
- 信号重构:将分解得到的IMF进行叠加,得到原始信号的近似表示。在叠加过程中,可以采用加权平均或选用代表性的IMF进行重构。
- 稳健性检验:为了检验重构信号的稳健性,REMD方法采用多种稳健性统计检验方法,如Jackknife重抽样、bootstrap重抽样等,以评估重构信号的精度和稳定性。
- 结果输出:将重构信号和稳健性检验结果输出,并进行分析和解释。
REMD算法的优势在于其稳健性和自适应性。它能够适应各种复杂信号的特性,有效避免噪声干扰和离群值的影响,得到更为准确和可靠的重构信号。REMD方法在各个领域都有广泛的应用,如工程、生物医学、金融等,用于信号处理、特征提取、时间序列分析等方面。
以上是REMD信号分解算法的基础介绍,如需了解更多信息,可以查阅相关文献或咨询专业人士。
原始数据分解各分量示意图
【MATLAB】 稳健的经验模式分解REMD信号分解算法:
https://mbd.pub/o/bread/ZJ6bkphu
1、感谢关注 Lwcah 的个人【公众号】(Lwcah),有关资源获取,请【公众号】(Lwcah)后台发送推文末的关键词,自助获取。
2、若要添加个人【微信号】,请后台发送关键词:微信号。
3、若要进【微信群】:Lwcah 科研技巧群 3。请添加个人【微信号】后进(大家沉浸式科研,广告勿扰),不定时更新科研技巧类推文。可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。
记得关注,并设为星标哦~谢谢啦~
「万请尊重原创成果!!!」
「声明:本【公众号】(Lwcah)的原创成果,在未经允许的情况下,请勿用于任何商业用途!」
「And,今后我会尽可能出一些更高质量的推文与大家共享,再一次感谢大家的关注与支持~也特别感谢大家对号的传播与分享,每天新增的关注都是我持续更新的动力!」
「您的每一次点赞,在看,关注和分享都是对我最大的鼓励~谢谢~」