与大家分享各种改善端点效应的方法
毕设开题半年了,但在HHT的端点效应这个问题上卡了三个月了,虽然查阅了不少资料,在论坛里也学到不少知识,但至今仍没有找到一个相对有效的方法,下面我跟大家分享我的程序(其中有的是对前辈程序做过修改的,会进行说明,如有遗漏请指出),希望大家能指出程序中的错误和不足。(1)徐斌《希尔伯特-黄变换方法的改进》:平行延拓法
分四种情况,以其中一种情况(下图所示)为例:
第一个极值为极小值,则认为第一个采样点为极大值点,连接第一个采样点和第一个极大值点得直线s1,过第一个极小值点求其平行线,在t(1)时刻的值为第一个假设的第一个极小值。序列右端同理,其他情况类似。
函数下载:boundary_conditions_paracon.m (paracon:parallel continuation)
(文件扩展名改为.m即可运行)
(2)黄大吉 2003 《希尔伯特黄变换的端点延拓》:极值延拓法:以端点的一个特征波为依据,在两端各延拓两个极大值和极小值。以第一个值是极大值为例,求得信号左端第一个特征波包含的信号包含的点数为kl=indmax(2)-indmax(1),向外延拓的极大值点和极小值点的位置分别为和,取值分别为x(indmax(1))和x(indmin(1))。boundary_conditions_HDJ
(3)黄诚惕 《希尔伯特_黄变换及其应用研究》:边界局部特征尺度延拓
boundary_conditions_charalen(charalen: characterlength)
(4)对playfish的程序进行修改: 序列左端:第一个和第二个极大值点所在直线在t(1)时刻的值为tmaxp1,若tmaxp1>z(1),则zlmax=tmaxp1,否则zlmax=z(1);第一个和第二个极小值点所在直线在t(1)时刻的值tminpl,若tminpl<z(1),则zlmin=tminpl,否则zlmin=z(1)。序列右端类似。
boundary_conditions_rependp(rependp: replace endpoint)
(5)Fangji Wu 2008 《An improved methodfor restraining the end effect in empirical mode decomposition and itsapplications to the fault diagnosis of large rotating machinery》:ISBM,对aishuishou的程序的修改分享一下我的成果:基于ISBM延拓的EMD
http://forum.vibunion.com/thread-98772-1-1.html
boundary_conditions_isbm(isbm: improved sloped-based method)
(6)李海燕 2009 《一种改善EMD端点效应的可行方法》:极值平均
boundary_conditions_averextr(averextr: average extreme)
:handshake 楼主太有爱了,谢谢分享{:{39}:} HHT变换还不懂,这个就更难学习了,哎!{:{19}:}。的确,群里关于HHT资料还是挺多的。不过至今未研究到这方面。 回复 4 # wuzhijun117420 的帖子
端点效应是HHT的硬伤,EMD分解和Hilbert变换中都存在的。 楼主霸气{:{39}:} 回复 1 # 529899778 的帖子
谢谢你楼主!
你毕设也用HHT,是做哪方面的啊 回复 7 # tamujin 的帖子
我是做脑磁信号的时频分析的。 楼主确实很牛啊,能不能分享一下多项式包络拟合算法和神经网络算法的程序,非常感谢啊 本帖最后由 529899778 于 2012-3-15 16:07 编辑
回复 9 # yueemd 的帖子
"用多项式拟合的方法抑制端点, 由于其数据点不能取的过多以及多项式的次数的不确定性, 使得最后的分解结果不能较好地反映原始信号的特征。"
"神经网络延拓算法的最大不足就是运算速度太慢。EMD方法筛出每一个IMF分量都要循环若干次才能满足结束条件,在每次循环中要利用该方法对原数据序列的两端进行延拓。每一端若延拓N 个点就要循环N次,循环次数太多造成速度太慢。其次,对于不同类型的数据序列,最适合的神经网络模型也会有所不同,在实际应用过程中需根据需要设定不同类型的模型,给编程带来了较大的麻烦。"
我试着用《基于多项式拟合算法的EMD端点问题的处理》和《基于多项式拟合的EMD端点效应处理方法研究》中的方法,简单编了程序(最近太忙,没做仔细修改)
EMD程序: 程序中我用的是matlab自带的polyfit拟合的,效果很不好,你可以用下边的函数替换试试: 最小二乘拟合的函数: ,其中调用的Tinv函数 :用于求逆矩阵,当然如果你有更好的求广义逆的函数可以自己替换试试。 回复 1 # 529899778 的帖子
你有经过波形延拓的EMD的matlab程序吗?能不能发一份啊 323104356@qq.com 楼主最好比较一下几种延拓方法,个人理解每种方法都有他的应用范围。最好使用者根据自己信号特点选择合适的延拓方法。 回复 12 # 吃书的老虎 的帖子
赵进平等人认为,延拓的目的不是为了给出准确的原序列以外的数据,而是提供一种条件,使得包络完全由端点的数据确定。
你的想法是很好的,确实不同的信号有不同的特征,应该用不同的边界处理方法,这需要做大量的工作来验证和总结,但现在的问题是,对于简单的由几个正弦信号叠加的信号,处理效果尚且如此,那么对于复杂的实测信号,分析结果可想而知会有多差,至少不能完全可信了吧。 回复 11 # haogang212 的帖子
EMD主程序我用的是法国人G.Rilling的程序,只是修改其中边界处理的部分,其中上述几种方法有的就是对波形进行延拓的。 这个真是好东西,谢谢楼主分享~