大家好,又见面了,我是你们的朋友全栈君。
EMD(经验模态分解)是由美国NASA的黄锷博士提出的一种信号处理方法。EMD将信号分解为频率按照从高到低的一系列模态分量,并由于噪声占主导的分量主要是高频信号,有效信号占主导的分量主要是低频信号,因而它们之间存在着一个分界点,当找到这个分界点时即可实现对信号的降噪。
EMD的每一个固有模态分量均满足以下两个条件:其极值点和过零点的个数相等或者相差至多为1,任意一点的上下包络线均值为零。EMD进行“筛分”步骤总结如下:
1)使用三次样条曲线拟合信号的极大值点和极小值点,形成了上下包络线,其次计算出上下包络线的均值,然后令信号减去该均值后则可得到了一个新的信号;再次重复上述方法求取上下包络线和均值以及新的信号,直至最后得到信号满足固有模态分量的两个条件;
2)将原始信号减去所有的固有模态分量得到的残余信号代入步骤1)运算,直至最后的残余信号为满足一定的条件时,则停止分解,其即为余项。
EMD安装包的下载:https://download.csdn.net/download/qq_27806947/10366188 其安装过程如下:
1)找到matlab安装目录下的toolbox,并把安装包粘贴进去!
2)添加maltab的路径,设置路径-添加并包含子文件夹-选中toolbox下的package_emd-保存-关闭如下图所示:
3)在命令行中运行命令:install_emd即可!
这里使用EMD分解一个加速度信号,程序和结果如下图所示:
modos=emd(s1); %已经知道结果是2个固有模态分量和一个余项了,否则应该用for循环和size(modos)
figure
plot(t1,s1)
xlabel('时间/s');
ylabel('位移/m');
title('原始信号')
figure
subplot(3,1,1)
plot(t1,modos(1,:))
title('EMD分解的信号')
ylabel('IMF1/m');
subplot(3,1,2)
plot(t1,modos(2,:))
ylabel('IMF2/m');
subplot(3,1,3)
plot(t1,modos(3,:))
xlabel('时间/s');
ylabel('余项/m');
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134717.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...