天天看點

心電信号去噪(part2)--中值濾波器

本系列上一篇(心電信号簡介)指路:​

注:這裡是以小型手持心電圖機為研究對象的(單導聯)。

上一篇中我們說到基線漂移是心電信号中的主要噪音之一,本張介紹的中值濾波器可以較好的去除基線漂移的噪音。

中值濾波器原理

中值濾波器一種非線性的數字濾波技術,具有抑制噪聲和保護邊緣的特性。中值濾波去除基線漂移噪聲的基本思想是先去掉心電信号中較大的值,得到隻含有基線的趨勢項信号,然後讓它與原始的信号進行疊加,進而消除原始心電信号中的基線漂移幹擾。中值濾波的原理:是把心電信号中某一點的值,用該點一個鄰域内各點值的中值點代替。

這裡我們設心電信号為y={y (n) |n=1, 1, …, N},中值濾波器滑動視窗的大小為L=2R+1,L<N,一般視窗的大小為采樣頻率的30%

則用中值濾波器處理後的信号Y(n)為:

心電信号去噪(part2)--中值濾波器

代碼

以下是中值濾波器的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個采樣點,未經處理的信号如下圖所示:

心電信号去噪(part2)--中值濾波器

原始心電圖

這個漂移的有點狠,第一次看到我有點心累。

這裡用分别用視窗大小為33,65,129的進行測試。

心電信号去噪(part2)--中值濾波器

視窗大小33的中值濾波器

心電信号去噪(part2)--中值濾波器

視窗大小65的中值濾波器

心電信号去噪(part2)--中值濾波器

視窗大小129的中值濾波器

觀察了半天,要我選我就選視窗大小為65的,大概是boy我的直覺吧,,開玩笑的,因為結合前輩們的實踐經驗和理論【一般視窗的大小為采樣頻率的30%】,以及,之後要把P波和T波識别出來,視窗33過濾的“太過”,而視窗129過濾的"太弱",是以就選視窗大小為65的啦。

主要參考文獻:

[1]去除心電信号基線漂移算法的比較

繼續閱讀