资源简介
本程序为使用matlab编写的EMD的实现程序,并且在程序中对提取包络线的三次样条函数进行了改进,利用本程序可以提高EMD的使用精度。本人多次使用本程序或在本程序的基础上改进新算法,并发表学术论文。
代码片段和文件信息
function imf = emd(x) %EMD的实现函数
% Empiricial Mode Decomposition (Hilbert-Huang Transform)
% imf = emd(x)
% Func : findpeaks
x = transpose(x(:));
imf = [];
while ~ismonotonic(x)
x1 = x;
sd = Inf;
while (sd > 0.1) | ~isimf(x1)
s1 = getspline(x1); %s1是极大值包络
s2 = -getspline(-x1); %s2是极小值包络
x2 = x1-(s1+s2)/2; %x2是原信号减去极大值包络和极小值包络之和的平均值之后的剩余部分
sd = sum((x1-x2).^2)/sum(x1.^2); %极大值与极小值包络平均值的平方和与原信号的平方和之比小于0.1,则认为满足IMF的第二个条件。
x1 = x2;
end
imf{end+1} = x1; %x1是个向量
x = x-x1;
end
imf{end+1} = x;
% FUNCTIONS
function u = ismonotonic(x) %判断X是否是单一分量
u1 = length(findpeaks(x))*length(findpeaks(-x));
if u1 > 0 u = 0;
else u = 1; end
function u = isimf(x) %判断X是否是IMF分量
N = length(x);
u1 = sum(x(1:N-1).*x(2:N) < 0); %零点总数
u2 = length(findpeaks(x))+length(findpeaks(-x)); %极大值与极小值总数
if abs(u1-u2) > 1 u = 0; %极值点数与零点数相等或相差一个时,为IMF分量
else u = 1; end %findpeaks(x)得到极大值点,findpeaks(-x)得到极小值点
function s = getspline(x) %三次样条插值得到极大值点的包络
N = length(x);
p = findpeaks(x);
s = spline([0 p N+1][0 x(p) 0]1:N);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-03-30 10:35 EMD-Hermite\
文件 1690 2011-02-28 16:17 EMD-Hermite\emd.m
文件 1424 2011-03-01 09:37 EMD-Hermite\EMD_Hermite.m
文件 3406 2011-03-01 16:07 EMD-Hermite\EMD_Hermite_tst.asv
文件 3406 2011-03-10 15:20 EMD-Hermite\EMD_Hermite_tst.m
文件 3865 2011-03-01 14:41 EMD-Hermite\EMD_Hermite_tst_1.m
文件 3409 2011-03-01 16:13 EMD-Hermite\EMD_Spline_tst.m
文件 382 2011-03-01 11:29 EMD-Hermite\point.m
文件 652 2011-02-25 10:36 EMD-Hermite\subHermite.m
文件 1240 2011-03-01 11:15 EMD-Hermite\subHermite_test.asv
文件 1234 2011-03-01 11:22 EMD-Hermite\subHermite_test.m
文件 468 2011-02-28 15:05 EMD-Hermite\tst.m
文件 66732 2011-03-01 16:07 EMD-Hermite\unti
相关资源
- EMD的MATLAB程序
- emd分解程序,时间序列分解工具
- ( eemd.m )
- EEMD的代码
- eemd源程序
- G-Rilling EMD HHT Matlab 开源代码
- 带端点延拓的EMD和原始EMD的matlab程序
- 希尔伯特黄变换HHT
- 有关emd分解的matlab源程序
- emd分解matlab代码
- EEMD matlab 工具包
- 经验模态分解MATLAB程序包emd
- EMD算法的绝对实用简单版MATLAB程序
- emd分解matlab程序172943
- CEEMDAN,EEMD和EMD.rar
- MATLAB的eemd程序
- EMD matlab代码
- package_emdEMD的matlab程序
- hht变换中emd批量处理数据
- 基于G.Rilling所写EMD的MATLAB代码的中文
- EEMD总体经验模式分解算法matlab程序
- EMD HHT MATLAB源代码,适合初学者
- CEEMD代码,matlab亲测可用
- memd代码多元经验模态分解
- emd分解程序以及HHT变换
- EMD工具箱matlab
- 经验模态分解emd源代码
- 镜像延拓的emd程序
- 关于emd的使用的一个小,可以拿过去
- EMD EEMD VMD比较
评论
共有 条评论