本系列上一篇(心电信号简介)指路:https://blog.csdn.net/m0_37422217/article/details/90738308
注:这里是以小型手持心电图机为研究对象的(单导联)。
上一篇中我们说到基线漂移是心电信号中的主要噪音之一,本张介绍的中值滤波器可以较好的去除基线漂移的噪音。
中值滤波器原理
中值滤波器一种非线性的数字滤波技术,具有抑制噪声和保护边缘的特性。中值滤波去除基线漂移噪声的基本思想是先去掉心电信号中较大的值,得到只含有基线的趋势项信号,然后让它与原始的信号进行叠加,从而消除原始心电信号中的基线漂移干扰。中值滤波的原理:是把心电信号中某一点的值,用该点一个邻域内各点值的中值点代替。
这里我们设心电信号为y={y (n) |n=1, 1, …, N},中值滤波器滑动窗口的大小为L=2R+1,L<N,一般窗口的大小为采样频率的30%
则用中值滤波器处理后的信号Y(n)为:
代码
以下是中值滤波器的MATLAB代码(我占时不想解释为什么中值的变量名要叫BL):
-
%%
中值滤波器
-
%x为原始信号,R为某点左右邻域大小.(窗口大小=
2*R+1)
-
function
[y] = myMedfilt(x, R)
-
y =
x;
-
for
(i = 1:length(x))
-
if
((i+R)<= length(x) && (i-R)>= 1)
-
BL =
median(x((i-R):(i+R)));
-
elseif
((i+R)<= length(x) && (i-R)< 1)
-
BL =
median(x(1:(i+R)));
-
elseif
((i+R)> length(x) && (i-R)>= 1)
-
BL =
median(x((i-R):end));
-
end
-
y(i) =
y(i)- BL;
-
end
-
end
实例
这里我以某心电信号为例,有800个采样点,未经处理的信号如下图所示:

这个漂移的有点狠,第一次看到我有点心累。
这里用分别用窗口大小为33,65,129的进行测试。



观察了半天,要我选我就选窗口大小为65的,大概是boy我的直觉吧,,开玩笑的,因为结合前辈们的实践经验和理论【一般窗口的大小为采样频率的30%】,以及,之后要把P波和T波识别出来,窗口33过滤的“太过”,而窗口129过滤的"太弱",所以就选窗口大小为65的啦。
主要参考文献:
[1]去除心电信号基线漂移算法的比较
[2]心电信号质量评估与去噪方法的研究与实现
下一篇(数学形态学)指路:https://blog.csdn.net/m0_37422217/article/details/90744326
转载:https://blog.csdn.net/m0_37422217/article/details/90739660