jjzjj

经验模态分解和各种进化及变种 EMD,EEMD,CEEMD,CEEMDAN,ESMD等简要介绍

晏九初 2023-04-15 原文

EMD是时频分析常用的一种信号处理方式,EMD经过发展到现在也有很多不同的发展,本文总结了已知的各种优化和变种。

分类:

EMD(经验模态分解):基本模态分解
EEMD(集合经验模态分解):EMD+白噪声
CEEMD(互补集合经验模态分解):加正负成对的辅助白噪声
CEEMDAN(完全自适应噪声集合经验模态分解):分解过程加白噪声经EMD分解得到的各阶IMF分量
ESMD(极点对称模态分解):外部包络线插值改内部极点对称插值
VMD(变分模态分解): 可将时间序列数据分解为一系列具有有限带宽的本征模态函数(IMF),可自适应更新各IMF的最优中心频率和带宽。
LMD(局域均值分解):PF 分量分解,采用平滑处理的方法形成局部均值函数和局域包络函数,因此可以避免 EMD 方法中采用三次样条函数形成上下包络线时产生的过包络、欠包络现象。
RLMD(鲁棒性局部均值分解):可以处理LMD中的边界条件、包络估计和筛选停止准则

EMD(经验模态分解):

EMD在非线性非平稳信号分析中具有显著优势。与传统时频分析技术相比,EMD无需选择基函数,其分解基于信号本身极值点的分布。
例如:

EMD方法适用信号范围广泛,无需设定基函数,克服了小波变换中基函数无自适应性的问题。但是利用EMD方法有两个缺陷:

1 . 模态混叠现象
用EMD分解得到的IMF存在模态混叠,有下列情况之一可以称为模态混叠:
①在同一个IMF分量中,存在尺度分布范围很宽却又各不相同的信号
②在不同的IMF分量中,存在着尺度相近的信号

2.端点效应
端点效应由两种情形造成的:
①在三次样条拟合中产生
②在Hilbert变换中产生,导致信号开始之前和结尾之后没有样本被考虑

EEMD(集合经验模态分解):

利用EMD滤波器组行为及白噪声频谱均匀分布的统计特性,使Sifting过程信号极值点分布更趋匀称,有效抑制由间歇性高频分量等因素造成的模态混叠。

EEMD方法的本质是一种叠加高斯白噪声的多次经验模态分解(EMD),利用了高斯白噪声具有频率均匀分布的统计特性,通过每次加入同等幅值的不同白噪声来改变信号的极值点特性,之后对多次EMD得到的相应IMF进行总体平均来抵消加入的白噪声,从而有效抑制模态混叠的产生。

CEEMD(互补集合经验模态分解):

向原始信号中加入正负成对的辅助白噪声,在集合平均时相消,能有效提高分解效率,克服EEMD重构误差大、分解完备性差的问题。
优点有:

  1. 集总平均次数会减少,从百量级减小到几十的量级。
  2. 重建后的信号噪声明显减少。
  3. 集总平均次数越多,噪声越小

但 CEEMD的不足之处在于进行EMD分解时产生的IMF个数仍存在差异,导致最终集合平均时IMF分量对齐困难,或导致集合平均产生误差。

CEEMDAN(自适应噪声完备集合经验模态分解):

在分解过程中添加的是白噪声经EMD分解得到的各阶IMF分量,最后重构信号中的噪声残余(比EEMD的结果)更小,降低了筛选次数。

另一方面,各组信号经CEEMDAN分解出第一阶固有模态分量后立即进行集合平均,避免了CEEMD中各组IMF分解结果差异造成最后集合平均难以对齐的问题,也避免了其中某一阶IMF分解效果不好时,将影响传递给下一阶,影响后续分解。

ESMD(极点对称模态分解):

将外部包络线插值改为内部极点对称插值
视频:https://www.zhihu.com/zvideo/1326624034449252352
方法介绍:https://zhuanlan.zhihu.com/p/334628925
对应论文:https://www.doc88.com/p-0788912839541.html
别人提出的改进策略:https://www.hanspub.org/journal/PaperInformation.aspx?paperID=27923
(改善每半个周期中关于中点不对称的数据的分解性能)

VMD(变分模态分解)

变分模态分解(VMD)是2014年提出的一种非递归信号处理方法,通过迭代搜索变分模态的最优解,变分问题,就是有关求泛函的极大值和极小值的问题,研究对象是函数,目的是求极值。

可将时间序列数据分解为一系列具有有限带宽的本征模态函数(IMF),可自适应更新各IMF的最优中心频率和带宽。

VMD具有较好抗噪能力,可以克服经验模态分解(EMD)频率混叠的问题。因为某个IMF频率如果合理,那它的频率应该比较集中在比较窄的一个范围,但实际上,EMD分解中,某一窄带的频率可能分布在不同IMF中。

LMD(局部均值分解):

1)LMD 的分解结果是一系列瞬时频率具有物理意义的PF 分量之和,PF 分量由包络信
号和纯调频信号相乘得到,从纯调频信号计算得到的瞬时频率是正的、连续的、具
有物理意义的。而EMD 方法是先得到 IMF 分量,然后对IMF 分量进行 Hilbert 变换
求得瞬时频率和瞬时幅值,则可能产生无法解释的负频率。
2)LMD 方法采用平滑处理的方法形成局部均值函数和局域包络函数,因此可以避免
EMD 方法中采用三次样条函数形成上下包络线时产生的过包络、欠包络现象。
(3) LMD 的端点效应相比较 EMD,在程度上轻得多,作用范围也比较小。这主要体现
在下面三个方面:
①LMD 信号端点附近未知包络线的长度比 EMD 的短。
②存在特殊的信号,经 LMD 的结果不受端点效应影响,如端点为极值的调幅调频信号。
③LMD 端点效应的扩散速度比 LMD 慢

RLMD(局部鲁棒均值分解)

局部均值分解算法能够根据信号自身的复杂程度及变化规律,将一个复杂的多分量信号通过多重循环迭代的方式,逐步分解成若干个乘积函数和一个残余分量之和,而每一个乘积函数都是一个包络函数和一个纯调频函数的乘积,理论上应与某一物理过程对应。

RLMD从3个方面对局部均值分解方法进行优化。
对边界条件的优化
对边界条件的优化采用镜像延拓法对信号进行延伸,能够减弱端点效应
对信号的包络估计的优化
在估计信号包络时采用移动平均算法,基于统计理论的统计方法选取适当的滑窗长度
筛分停止准则的优化
通过软筛分停止准则进行最优的筛分迭代次数的自适应寻找

有关经验模态分解和各种进化及变种 EMD,EEMD,CEEMD,CEEMDAN,ESMD等简要介绍的更多相关文章

  1. 报告回顾丨模型进化狂飙,DetectGPT能否识别最新模型生成结果? - 2

    导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri

  2. python - python的进化路线图是什么 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。在哪里可以找到python的中期或长期路线图。借此,我可以了解决策者最关心的是什么,以及他们眼中这门语言的future是什么?一段时间以来,我一直在玩弄Python和Ruby,制作我在开发中需要的中小型工具,通过比较不同但相似的语言来获得乐趣和学习。Python和Ruby的许多特性可以互换,或者易于模仿。两者都引入了一些函数式风格并且发展迅速(Py300

  3. ruby-on-rails - 是否有针对经验丰富的 Ruby 开发人员的 Rails 指南? - 2

    几年前,我从一些Rails初学者指南开始学习Ruby/Rails。那时我已经学习了Rails的基础知识,例如模型和路由的一些约定优于配置,以及如何使用helpers等。但是,我并没有坚持多久,因为此后不久我发现了Sinatra,并决定我个人更喜欢它。不过,我最终真的爱上了Ruby,从那以后我写了很多Ruby,几乎没有一个是针对任何Rails项目的。然而,事实证明大部分可用的Ruby工作都是针对Rails应用程序的。所以我现在想再尝试一下Rails。现在,该引用资料很棒并且有很多有用的信息,但我只查看了我需要的特定内容的引用资料,而没有记住。但我不太可能在引用资料中看到像script/c

  4. ruby-on-rails - 将大型 Rails 应用程序分解成较小的应用程序? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我有一个包含600个模型的Rails应用程序,很快就会增加到800-1000个。我想对Rails应用程序进行分段,以便仅加载某些模型,因此充当单独的应用程序,但所有模型都共享相同的基本模型。是否有执行此操作的标准做法?编辑:我在2.3.8编辑2:问题是许多模型是相似的,但不同之处恰恰足以保证编写一个新类,也就是说,将所有模型都放在一个模型中所需的逻辑将是

  5. ruby-on-rails - 你如何分解出 RSpec 中常见的 "before(:each)"调用,以便多个规范可以使用它们? - 2

    我想分解这堆代码,以便我所有的Controller测试(好吧,几乎所有的)都使用这个before(:each)block:before(:each)do@user=User.newcontroller.stub(:authenticate_user!)controller.stub(:current_user).and_return(@user)controller.stub(:add_secure_model_data)end有什么办法吗?我不想将它包含在所有Controller中......因为有一些不需要它。基本上,每个从SecureController扩展的Controller

  6. ruby-on-rails - 有没有人有使用 Ruby in Steel 的经验? - 2

    主要来自.NET背景,我非常喜欢(无论好坏)VisualStudio。不过,我现在要去学校学习软件工程,我的第一个类是使用RubyonRails的XP(极限编程)。大多数情况下,我听说当您使用Ruby进行开发时,您往往会完全跳过整个IDE;我对这种可能性完全开放。不过,那里有IDE,因此似乎至少一些人仍然认为使用IDE是值得的。由于我非常熟悉VS,我只是想知道是否有人使用过RubyInSteel.从网站上看,它确实看起来不错。不过,我真的不知道它对一般RoR开发有多大用处或适用性,这就是为什么我认为我会把这个问题抛在那里。您使用过RubyInSteel吗?你对它的印象如何?它如何与其他

  7. ruby-on-rails - Ruby:使用 Gems 处理重复性日历事件的经验? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想改善这个问题吗?更新问题,以便可以通过editingthispost用事实和引文回答问题.11个月前关闭。Improvethisquestion我想为我的项目找到一个ruby​​gem,以处理符合以下要求的重复事件:可以处理“每周星期二和星期三”或“每月最后一个星期二”这样的模式可以计算下一次出现可以将模式序列化/反序列化为字符串以存储在数据库中序列化格式稳定(即升级后仍能加载)至少使用以下模式组件:时间、星期几、月份日期、月份中的第n天;可以每天、每周、每月或间隔n天、周或月重复可以用自然的英语语言表示模式可以解析英语模

  8. ruby - Capybara 麻烦填写 JS 模态 - 2

    首先让我确认这不是重复的(因为那里发布的答案没有解决我的问题)。Thispost本质上是我的确切问题:Capybara无法在Stripe模式中找到表单字段来填写它们。这是我的capybara规范:describe'checkout',type::feature,js:truedoit'checksoutcorrectly'dovisit'/'page.shouldhave_content'Amount:$20.00'page.find('#button-two').click_button'PaywithCard'Capybara.within_frame'stripe_checkou

  9. ruby - 是否有教程教授经验丰富的程序员使用的常见 Ruby 编程习语,但对新手来说可能并不明显? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我正在寻找Ruby的CodeLikeaPythonista:IdiomaticPython等价物理想的特性:易于阅读涵盖所有主题的单一文档:提示、技巧、指南、注意事项和陷阱比一本书还小惯用语应该在标准发行版中开箱即用(%sudoapt-getinstallruby​​irbrdoc)请尽可能为每个答案放一个教程,并附上教程中的示例代码及其含义。更新:这些

  10. ruby-on-rails - 如何分解长行的 Ruby - 2

    我总是在我的Railsmodels顶部看到大行代码。我正在寻找用标准Ruby风格分解它们的最佳方法的建议。例如,我现在看到的一行是这样的:delegate:occupation,:location,:picture_url,:homepage_url,:headline,:full_name,:to=>:profile,:prefix=>true,:allow_nil=>true打破这些长方法调用行的传统风格是什么? 最佳答案 简短的回答是视情况。基础知识首先,您可以使用“新的”Ruby哈希语法保存几个字符:result=very_

随机推荐