关于EMD算法端点问题处理的讨论
研究emd算法有一段时间了,关于其中端点效应的处理不知道大家认同哪种方法。Rilling给的程序用的好像是镜像极值延拓算法,我参考基于波形匹配和基于支持向量机延拓的方法编写了两种关于端点处理的程序,并对一个仿真信号做了分解。结果我附在了图中(1为用rilling的程序,2为基于波形匹配,3为基于支持向量机,4为原始信号),通过比对我有了一些心得,基于波形匹配算法要针对的是一些规律性比较强的信号,对于规律性强的信号有着较强的优势,对于某些旋转机械故障振动信号的处理应该很有效。但是对于那些规律性不强的,优势就没那么明显了,而且当匹配不当时,延拓的信号和原信号结合处会导致出现新的极值点,就会给下面的迭代带来错误。而基于支持向量机延拓的算法适用性很广,但是由于每次迭代都要进行训练,而且参数优化也需要时间,所以运算时间应该是他最大的问题。像我分解的那个仿真信号,程序运行了大约1分多钟。我想问问大家对端点问题的处理都是用的什么方法。 目前用的Rilling的程序做的端点处理,做的是滚动轴承故障诊断,导师说效果不错,也就没改!回复 板凳 stellar_yang 的帖子
哦,我也做过滚动轴承的实验,直接用rilling的分解后效果确实还可以。下面的图是用rilling的程序画的外圈故障轴承的三维时频图 大家公认的比较好的端点处理方法是哪种啊? 楼主的处理效果确实不错?可是为什么我的结果不好呢?是数据的原因?楼主可否帮忙发一份程序和数据给我?非常感谢邮箱xiangyu537@163.com 相互讨论学习 我把那个波形匹配延拓的程序贴出来吧,其中那个sigmatching_emd函数是我自己将rilling的程序简化的,没有那么多的设置选项了。程序还有很大的问题,只提供个思路。(说明:运行程序需要装有rilling的程序工具包,因为用到了他里面的几个函数)clear
clc
tic
N=512;
fs=512;
t=0:1/fs:(N-1)/fs;
xinhao=cos(2*pi*5*t)+0.4*cos(2*pi*10*t)+0.9*sin(2*pi*25*t);
plot(xinhao);
title('原始信号');
xlabel('采样点数');
ylabel('幅值');
imf=sigmatching_emd(xinhao,,0); %对信号进行基于波形匹配的emd分解,其中是用rilling的迭代条件,0为不显示分解过程,1为显示分解过程。
plot_emd_result(imf);
toc 该图是实际轴承外圈故障数据的分析结果吗? 对,是的,效果还可以!