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 >0.1) || ~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)
这是对信号进行分侍拍穗解的程序,看看对你有没有帮贺毕助
基础背景自行搜索
希尔伯特-黄变换包括两个步骤:
1.使用 EMD 算法获得本质模态函数 (IMF)。
2.通过对上一步获得的结果应用希尔伯特-黄变换得到初始序列的瞬时频率谱。HHT 能够获得非线性和非静态序列的清物郑瞬时频率谱。之后,可以使用经验模态分解处理这些序列。
本文重点讲解第一部分
从 EMD 生成的本质模态函数( IMF) 应满足以下要求:
1.IMF 极值的数量(最大值和最小值的数量答颂之和)与零穿越的数量必须相等或最多相差 1;
2.在 IMF 的任意点,局部最大值定义的包络线的平均值和局部最小值定义的包络线的平均值应等于零。
1.求极值点
2.拟合包络函数
用三次样条插值法拟合包络
3.均值包络线
将两条极值曲线平均获得平均包络线
4.获得中间信号
原始信号减均值包络线,得到中间信号。若中间信号中还存在负的局部极大值和正的局部极小值(此判据等效于是否满足上述经验模态分解条件),说明这还不是一个本征模函数IMF,需要继续进行“筛选”。筛选的过程就是以该中间信号为新的输入信号继续重复1~4的步骤。筛选过程通常在蚂凳残数只包含不超过两个极值时停止。
5.迭代
用上述方法得到第一个IMF后,用原始信号减IMF1,作为新的原始信号,再通过上述的1~4步骤,可以得到IMF2,以此类推,完成EMD分解。
6.分解完需要的IMF后,至此,EMD分解完成。
这篇文章能让你明白经验模态分解(EMD)——基础理论篇
经验模态分解法介绍
经验模态分解 (Empirical Mode Decomposition)
EMD算法PPT演示迭代过程
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)