📄 emd3.m
字号:
%emd3函数是自编函数,纯粹基于EMD分解进行去噪,其要调用一系列其他函数来实现。返回值是去去噪后的波形数据,和其经过EMD分解得到
%的各个imf的波形,同时将去噪后的结果和标准波形进行了对比,求出了其相关系数来衡量去噪的效果。输入变量为(eng,ecg)即是含噪的
%波形数据和标注波形数据。
function emd3=imf(x,ecg);%emd滤波函数,ecg是一个标准数据用来和去噪后的数据进行比较。
tic;%计时函数。
x=gui(x);%对x进行归一化。
n=x;%把x的值赋给n.
r1=0;
emd(n);%调用emd函数分解来得到各个imf.
a=ans;
for i=1:size(a,1)
b=add(a,1,i);
j=abs(mean(b));
if j<0.0009
continue;
else
break;
end
end
i
r2=add(a,i,size(a,1));%调用add函数对各个有用的imf进行求和。
n=add(a,1,i-1);
corrcoef(r2,ecg)
picture(r2,ecg);
m=mean(r2-r1);
while abs(m)>0.0002%循环的控制条件,用求平均值的mean函数。循环去除大部分噪声信号。
emd(n);
a=ans;
for i=1:size(a,1)
b=add(a,1,i);
j=abs(mean(b));
if j<0.00035
continue;
else
break;
end
end
i=min(i,5)
r1=r2;
r2=r2+add(a,i,size(a,1));
n=add(a,1,i-1);
m=mean(r2-r1);
end
%r3=r2;
% r1=0;
% emd(r2);
% for i=1:ans
% a=add(ans,1,i);
% if mean(a)<0.001
% continue;
% else
% i=i-1;
% end
% break;
% end
% if i==0
% i=1;
% end
% r2=add(ans,i+1,size(ans,1));
% n=add(ans,1,i);
% while mean(r2-r1)>0.001% 对有用信号再次进行emd滤波,进一步去除少量噪声。
% emd(n);
% for i=1:ans
% a=add(ans,1,i);
% if mean(a)<0.001
% continue;
% else
% i=i-1;
% end
% break;
% end
% if i==0
% i=1;
% end
% r1=r2;
% r2=r2+add(ans,i+1,size(ans,1));
% n=add(ans,1,i);
% end
% r4=r2+n;
emd(r2);
paint(ans);%调用paint函数绘出有用信号的各个imf.
picture(r2,ecg);%调用picture函数绘出原始信号和去噪后的信号,进行对比。
emd3=r2;
corrcoef(r2,ecg)%求出x和y的相关系数。
toc;
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -