📄 sgomedwmedfilt.m
字号:
function SgoMedWmedFilt();
% SgoMedWmedFilt函数用来比较sgolayfilt、medfilt1和Wmedfilt1
% 三种滤波函数在滤除心电图噪声时的效果
% 该函数显示了五种图像:原始没有噪声的心电图、加有噪声的心电图和经三种滤波
% 后得到的心电图
% 噪声大小和滤波器参数由输入决定
DEGREE = input('请输入sgolayfilt 滤波器的阶数:');
FRAME = input('请输入sgolayfilt 滤波器窗口的宽度:');
N=input('请输入medfilt1滤波器窗口的宽度:');
M_BLA=input('请输入medfilt1滤波器参数BLKSZ :');
W=input('请输入wmedfilt1滤波器的加权参数:')
WM_BLA=input('请输入wmedfilt1滤波器参数BLKSZ :');
NOISE=input('请输入心电图所加噪声参数:');
x1 = ecg(500);
x = [x1 x1 x1 x1 x1 x1];
y =x';
%无噪声心电图
% 利用ecg子函数产生了心电图数据
s=add_noise(y,NOISE);
%对心电图加入噪声
sgo_signal=sgolayfilt(s,DEGREE,FRAME);
%利用sgolayfilt函数进行滤波
m_signal=medfilt1(s, N, M_BLA);
%利用medfilt1函数进行滤波
wm_signal=wmedfilt1(s, W, WM_BLA);
%利用wmedfilt1函数进行滤波
subplot(5,1,1);
plot(y);
title('(a)');
subplot(5,1,2);
plot(s);
title('(b)');
subplot(5,1,3);
plot(sgo_signal);
title('(c)');
subplot(5,1,4);
plot(m_signal);
title('(d)');
subplot(5,1,5);
plot(wm_signal);
title('(e)');
function s = add_noise(y,NOISE)
v = 0.05*NOISE*randn(3000,1);
s = y + v;
% 加噪子函数
function x = ecg(L)
a0 = [0,1,40,1,0,-34,118,-99,0,2,21,2,0,0,0];
d0 = [0,27,59,91,131,141,163,185,195,275,307,339,357,390,440];
a = a0 / max(a0);
d = round(d0 * L / d0(15));
d(15)=L;
for i=1:14,
m = d(i) : d(i+1) - 1;
slope = (a(i+1) - a(i)) / (d(i+1) - d(i));
x(m+1) = a(i) + slope * (m - d(i));
end
%心电图发生子函数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -