emdm文件
function imf = emd(x)
% Empiricial Mode Decomposition (Hilbert-Huang Transform)
% EMD分解或HHT变换
% 返回值为cell类型,依次为一次IMF、二次IMF、、最后残差
x = transpose(x(:));
imf = [];
while ~ismonotonic(x)
x1 = x;
sd = Inf;
while (sd > 01) || ~isimf(x1)
s1 = getspline(x1); % 极大值点样条曲线
s2 = -getspline(-x1); % 极小值点样条曲线
x2 = x1-(s1+s2)/2;
sd = sum((x1-x2)^2)/sum(x1^2);
x1 = x2;
end
imf{end+1} = x1;
x = x-x1;
end
imf{end+1} = x;
% 是否单调
function u = ismonotonic(x)
u1 = length(findpeaks(x))length(findpeaks(-x));
if u1 > 0
u = 0;
else
u = 1;
end
% 是否IMF分量
function u = isimf(x)
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;
else
u = 1;
end
% 据极大值点构造样条曲线
function s = getspline(x)
N = length(x);
p = findpeaks(x);
s = spline([0 p N+1],[0 x(p) 0],1:N);
这是对信号进行分解的程序,看看对你有没有帮助
EMD-HHT变换的经典文献
以下为一般性带附件资料发贴选项:
资料成文时间:1998
语言:英语
页数:96
何人(公司)所著:E Huang , Zheng Shen , Steven R Long ,Proc R Soc Lond A (1998) 454, 903
文件格式:PDF
文件原名:The empirical mode decomposition and the Hilbert spectrum for nonlinear and
non-stationary time series analysis
你静心读完这篇文章一定有很大启发.
MATLAB应该足够了,我这么认为.
程序要自己写的,下的基本不合乎你的要求
时间序列t,最简单用法就是imf=emd(t),当然emd里面还有很多可选项,例如 IMF = EMD(X,,'Option_name',Option_value,),详细使用方法安装HHT工具箱后看帮助即可
自动扫描,在设置-附加设置-程序执行和保护-系统启动时执行卡巴斯基(去掉钩选) 使用卡巴斯基过程中发现,可以取消卡巴斯基开机扫描启动项,大大提高启动速度。方法:在设置里---手动扫描任务---扫描系统启动对象---属性---启动对象---设置---计划---把启用计划扫描前面的对号去掉--ok。以后开机不必再漫长地等待了。但是为了安全起见,可以随时手动扫描启动项(很快,只须1分钟),当然,不必每次开机(特别是重启)都扫描哦!! 哈哈,你是不是更喜欢卡巴斯基了,杀毒更强,启动也快了。 加快启动速度的注册表文件内容: Windows Registry Editor Version 500 [HKEY_LOCAL_MACHINE\SOFTWARE\KasperskyLab\Components\7] ;RunStartup;=dword:00000000 : 安装完成后的几个优化设置方案: 1、设置——附加设置——确认提示——设置——把四个复选框全部清空。 2、设置——附加设置——程序界面——把第一个和第二个复选框清空。 3、将自动更新设置成每小时。可以时时使病毒库保持最新! 4、设置——设置隔离和备份——文件最大限度改成10MB,超过限度执行的动作改成“删除最早的对象”。
function imf = emd(x,n);%%最好把函数名改为emd1之类的,以免和Grilling的emd冲突
%%n为你想得到的IMF的个数
c = x('; % copy of the input signal (as a row vector)
N = length(x);-
% loop to decompose the input signal into n successive IMFs
imf = []; % Matrix which will contain the successive IMF, and the residuefor t=1:n
% loop on successive IMFs
%-------------------------------------------------------------------------
% inner loop to find each imf
h = c; % at the beginning of the sifting process, h is the signal
SD = 1; % Standard deviation which will be used to stop the sifting process
while SD > 03 % while the standard deviation is higher than 03 (typical value) %%筛选停止准则
% find local max/min points
d = diff(h); % approximate derivative %%求各点导数
maxmin = []; % to store the optima (min and max without distinction so far)
for i=1:N-2
if d(i)==0 % we are on a zero %%导数为0的点,即”驻点“,但驻点不一定都是极值点,如y=x^3的x=0处
if sign(d(i-1))~=sign(d(i+1)) % it is a maximum %%如果驻点两侧的导数异号(如一边正,一边负),那么该点为极值点
maxmin = [maxmin, i]; %%找到极值点在信号中的坐标(不分极大值和极小值点)
end
elseif sign(d(i))~=sign(d(i+1)) % we are straddling a zero so%%如y=|x|在x=0处是极值点,但该点倒数不存在,所以不能用上面的判
断方法
maxmin = [maxmin, i+1]; % define zero as at i+1 (not i) %%这里提供了另一类极值点的判断方法
end
end
if size(maxmin,2) < 2 % then it is the residue %%判断信号是不是已经符合残余分量定义
break
end
% divide maxmin into maxes and mins %% 分离极大值点和极小值点
if maxmin(1)>maxmin(2) % first one is a max not a min
maxes = maxmin(1:2:length(maxmin));
mins = maxmin(2:2:length(maxmin));
else % is the other way around
maxes = maxmin(2:2:length(maxmin));
mins = maxmin(1:2:length(maxmin));
end % make endpoints both maxes and mins
maxes = [1 maxes N];
mins = [1 mins N];
%------------------------------------------------------------------------- % spline interpolate to get max and min envelopes; form imf
maxenv = spline(maxes,h(maxes),1:N); %%用样条函数插值拟合所有的极大值点
minenv = spline(mins, h(mins),1:N); %%用样条函数插值拟合所有的极小值点
m = (maxenv + minenv)/2; % mean of max and min enveloppes %%求上下包络的均值
prevh = h; % copy of the previous value of h before modifying it %%h为分解前的信号
h = h - m; % substract mean to h %% 减去包络均值
% calculate standard deviation
eps = 00000001; % to avoid zero values
SD = sum ( ((prevh - h)^2) / (prevh^2 + eps) ); %% 计算停止准则
end
imf = [imf; h]; % store the extracted IMF in the matrix imf
% if size(maxmin,2)<2, then h is the residue
% stop criterion of the algo if we reach the end before n
if size(maxmin,2) < 2
break
end
c = c - h; % substract the extracted IMF from the signal
end
return
以上就是关于对图像进行emd分解程序得到各个imf分量全部的内容,包括:对图像进行emd分解程序得到各个imf分量、EMD HHT变换 在MATLAB中怎么弄啊、求助EMD程序如何使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)