您當前的位置:首頁 > 繪畫

基於機器學習的心律失常分類(三)——小波閾值去噪[MATLAB]

作者:由 少刷知乎多讀書 發表于 繪畫時間:2020-06-28

在對心電訊號進行分析前,需要對其進行去噪預處理。因為在心電訊號採集或者數模轉換的過程中,會產生噪聲,包括工頻干擾、肌電干擾、基線漂移這三種。本文將介紹目前十分常用且有效的一種去噪方法——小波閾值去噪。

其實去噪這裡展開也是一個挺大的專題,但是我重點還是放在後面幾種機器學習演算法比較上,所以就直接選用了小波閾值去噪,沒有做其它去噪方法的比較。所以這篇就適合想對小波閾值去噪有個簡單瞭解的童鞋~

一、小波閾值去噪基本思想

運用小波變換的思想結合設定閾值的方法對訊號進行去噪的主要流程如下:

基於機器學習的心律失常分類(三)——小波閾值去噪[MATLAB]

(1)尺度小波分解:透過分析選擇合理的小波函式以及特定的分解尺度,對含噪訊號進行特定尺度的目標層數分解;

(2)小波閾值處理:設定閾值對訊號尺度分解出的小波係數進行選擇,若小波係數的幅值低於該閾值則認定為是由噪聲引起的,則捨棄這個分解係數;

(3)小波係數重構:一維小波重構分解後的小波係數。

通俗點說,就是先透過小波變換把訊號轉換不同的尺度空間,然後透過閾值處理篩選出哪些是噪聲,然後把這個噪聲捨棄掉,最後再重構回去,噪聲就沒了。

二、小波變換理論基礎

1974年,法國訊號處理工程師Morlet首次提出小波分析這一新的概念,在保留傅立葉分析特點的同時彌補了其不能同時進行時頻分析的缺陷。傅立葉變換的是透過改變域型別進而改變對同一個事物的不同角度,即把時域上的訊號轉換到頻域上進行分析,因此可以在頻域中處理那些在時域中不好處理的地方。但是傅立葉變換無法進行時頻同時分析,這種侷限性無法對突變和非平穩訊號進行有效處理。小波變換主要是對小波函式進行尺度伸縮還有時間位移,實現對非平穩訊號的多尺度時頻的區域性化分析,可以在訊號的高頻處或成分突變處完成時間上的細化,在低頻處或成分慢變處實現頻率上的細化。

小波變換就是將傅立葉變換中無限長度的三角基函式替換為有限長度的小波基函式,如圖所示。

基於機器學習的心律失常分類(三)——小波閾值去噪[MATLAB]

小波基函式

我自己寫的都是偏理論的公式,感覺沒啥意義我這裡就不貼了,推薦個我覺得很好的文章或者影片吧~

b站影片:

BV1pW411J7s8 傅立葉變換

BV1Ax41157yQ 小波變換

透過上面的學習,對小波變換的一個理念可以有一個簡單的把握了,昂我覺得理解了基本理念對去噪這個步驟就足夠了。

基於機器學習的心律失常分類(三)——小波閾值去噪[MATLAB]

本文選用的db5小波。

三、閾值處理

閾值處理主要包括兩部分,一個是閾值的選取,還有一個是閾值函式的選取。

閾值的選取

閾值

\lambda

就是用來判斷噪聲滴,它的大小就決定了去噪質量。

基於機器學習的心律失常分類(三)——小波閾值去噪[MATLAB]

一般分為以上五種,本文選用的Stein無偏似然估計閾值。這裡我就不詳細介紹了,如果有人想了解的話可以評論我再介紹。。。

下面更新一下關於閾值這裡的介紹。

(1)VisuShrink閾值(通用閾值)

計算公式:

\lambda=\sigma\sqrt{2lnN}

,其中

\sigma

為噪聲的標準差,

N

為訊號長度。

1992年,Donoho等人首先提出了小波閾值收縮去噪,他們提出的閾值公式就是VisuShrink閾值,這個閾值是是在高斯模型下針對多維獨立正態變數聯合分佈得出的,推導過程下面論文中有。

噪聲的標準差

\sigma

估方法計也是由Donoho提出的:

\sigma=\frac{MAD}{0.6745}

,其中

MAD

是所有高頻子帶小波係數幅度的中值。(這個是全域性的思路,如果

MAD

是各個分解層的各高頻子帶係數幅度的中值,那就是區域性的思路)

原文:

https://

imjohnstone。su。domains/

/WEBLIST/1994/isaws。pdf

後有很多研究人員對這個閾值進行改進,一個是從形式上的改進,比如:

[1] 陳曉曦;王延傑;劉戀。小波閾值去噪法的深入研究。鐳射與紅外。2012年(01):107-112

基於機器學習的心律失常分類(三)——小波閾值去噪[MATLAB]

另一個是對噪聲標準差估計方法的改進,比如:

[2] 林哲民;康學雷;張立明。在小波域中進行影象噪聲方差估計的EM方法。紅外與毫米波學報。2001年(03):39-42

(2)Sqtwolog閾值(固定閾值)

計算公式:

\lambda=\sqrt{2lnN}

,其中

N

為訊號長度。

相較於VisuShrink閾值少了噪聲的標準差,相當於是針對標準差(小波域)為1的高斯白噪聲而言的。

(3)Rigrsure閾值(無偏似然估計準則)

是一種基於Stein無偏似然估計的自適應閾值選擇。對於給定的閾值T,得到它的似然估計,再將似然T最小化,就得到了所選的閾值,這是一種軟體閾值估計。具體步驟:

① 把用來估計閾值的小波係數向量取絕對值(設其長度為n),(比如用第一層小波分解的全部係數做為候選閾值),由小到大排序,然後將各元素平方,得到新的待估計向量

S

② 對

S

的每個元素,按下式計算風險向量:

Risk_j=\frac{n-2j+\sum_{i=1}^{j}{S_i}+(n-j)S_j}{n}

其中

Risk_j

表示第

j

個元素的風險向量。

③ 在風險向量中找出最小的

Risk_j

作為風險值,記風險向量Risk的最小點所對應的下標值為

k

,從而得到閾值為:

\lambda=\sqrt{S_k}

(4)Minmax閾值(極大極小閾值)

計算公式:

\lambda= \left\{ \begin{array}{lr}              0, N\leq32 &  \\              0.3936+0.1829\frac{lnN}{ln2},N>32 &                 \end{array} \right.

,其中

N

為訊號長度。

該原理是在統計學中為設計估計量而採用的。由於去噪訊號可假設為未知迴歸函式的估計量,則極小極大估計量是實現在最壞條件下最小均方誤差最小的量,即其所選閾值是能夠產生最小的極大方差。

(5)Heursure閾值(混合原則)

基於機器學習的心律失常分類(三)——小波閾值去噪[MATLAB]

上述準則中,混合準則和極小極大準則相對比較保守(僅將部分系數置零),因此在訊號的高頻資訊中有很少一部分在範圍內時,這兩種閾值比較適合。而另外兩種閾值選取規則,特別是固定閾值方法,能消除更多的噪聲,但也有可能將有用訊號的高頻部分去掉。

後續研究人員提出了很多新的改進閾值,以及各種確定閾值的自適應方法(比如透過遺傳演算法引數尋優)。

2。 閾值函式的選取

閾值函式是用來對小波係數

\omega

進行閾值收縮處理。閾值函式一般分為硬閾值和軟閾值。閾值後的小波係數為

\omega\lambda

基於機器學習的心律失常分類(三)——小波閾值去噪[MATLAB]

本文使用的軟閾值。

下面更新一下關於閾值函式這裡的介紹。

其實硬閾值就是:假如我們確定了閾值

\lambda

,那麼在對小波係數進行篩選時,如果小波係數比閾值大那就保留不動,如果小波係數比閾值小那就置零,也就是小於閾值的我們認定為噪聲,就不要它了,大於閾值的我們不做處理。

而軟閾值略有不同的是:如果小波係數比閾值大,那我們對其做一個“收縮”處理,而不是保留原值,小波係數比閾值小依舊置零。

可以看下下面的圖,硬閾值是不連續的,軟閾值是連續的!

基於機器學習的心律失常分類(三)——小波閾值去噪[MATLAB]

(1)硬閾值函式處理後的小波係數在閾值處不連續,造成訊號重構後可能會產生新的振盪。

(2)軟閾值函式在閾值點處是連續的,但軟閾值函式處理後的小波係數與原小波係數之間有一個固定的差值,可能會使重構後的訊號幅度產生一定的失真。

上面兩點是硬閾值函式和軟閾值函式各自存在的問題,在使用時就考慮更在意哪個方面,硬閾值可以更好還原訊號但噪聲濾除不乾淨,軟閾值去噪效果更好但可能存在訊號失真的問題。不過這些也都可以綜合考慮多個方面來解決。

後面也同樣有很多人提出了新的閾值函式,比如:

[3] 尹麗,陳富民,張琦,陳鑫。採用集合經驗模態分解和改進閾值函式的心電自適應去噪方法[J]。西安交通大學學報,2020,54(01):101-107。

基於機器學習的心律失常分類(三)——小波閾值去噪[MATLAB]

PS:有些內容我可能找的也不是很嚴謹,大家看看可以隨時指正或者給出些參考資料,我再改進~

四、去噪模型及評價指標

直接貼圖吧哈哈

基於機器學習的心律失常分類(三)——小波閾值去噪[MATLAB]

五、實驗結果與分析

上程式碼

%% ===============================小波閾值去噪============================= %%

%應用db5作為小波函式進行三層分解

%利用無偏似然估計閾值

%對100。dat的單導聯資料進行去噪

E1

=

M

(:,

1

);

% M為第二篇中對100。dat檔案處理後得到的資料矩陣,M(:,1)指MLII導聯資料,M(:,2)指V5導聯資料

E1

=

E1

n1

=

size

E1

);

s1

=

E1

1

2000

);

%小波分解

C1

L1

]=

wavedec

E1

3

’db5‘

);

%從C中提取尺度3下的近似小波係數

cA3_1

=

appcoef

C1

L1

’db5‘

3

);

%從訊號C中提取尺度1,2,3下的細節小波係數

cD1_1

=

detcoef

C1

L1

1

);

cD2_1

=

detcoef

C1

L1

2

);

cD3_1

=

detcoef

C1

L1

3

);

%使用stein的無偏似然估計原理進行選擇各層的閾值

%cD1_1,cD2_1,cD3_1為各層小波係數

%rigrsure為無偏似然估計的閾值型別

thr1_1

=

thselect

cD1_1

’rigrsure‘

);

thr2_1

=

thselect

cD2_1

’rigrsure‘

);

thr3_1

=

thselect

cD3_1

’rigrsure‘

);

%各層的閾值

TR1

=[

thr1_1

thr2_1

thr3_1

];

%’s‘為軟閾值,’h‘為硬閾值

SORH1

=

’s‘

%——————去噪——————

% XC為去噪後訊號

% [CXC,LXC]為小波分解結構

% PERF0和PERF2是恢復和壓縮的範數百分比

% ’lvd‘為允許設定各層的閾值

% ’gbl‘為固定閾值

% 3為閾值的長度

XC1

CXC1

LXC1

PERF0_1

PERF2_1

]=

wdencmp

’lvd‘

E1

’db5‘

3

TR1

SORH1

);

%——————去噪效果衡量——————

%SNR越大效果越好,MSE越小越好

%選取訊號的長度

N1

=

n1

2

);

x1

=

E1

y1

=

XC1

F1

=

0

MM1

=

0

for

ii

=

1

N1

m1

ii

)=(

x1

ii

-

y1

ii

))

^

2

t1

ii

)=

y1

ii

^

2

f1

ii

)=

t1

ii

/

m1

ii

);

F1

=

F1

+

f1

ii

);

MM1

=

MM1

+

m1

ii

);

end

SNR1

=

10

*

log10

F1

);

MSE1

=

MM1

/

N1

SM1

=

SNR1

/

MSE1

%列印結果

disp

’****************訊號2****************‘

disp

’** **‘

disp

([

’**‘

’ SNR1=‘

SNR1

’ MSE1=‘

MSE1

’**‘

]);

disp

’** **‘

disp

’****************去噪效果****************‘

本文透過對MIT-BIH資料庫資料的波形特徵進行分析,對比上文討論中提到的小波函式的濾波效果,最終確定了選取db5小波函式對原始訊號進行小波變換。由於小波閾值去噪過程中的選取的分解層數過高會導致波形失真,過低致使噪聲抑制效果十分不明顯,因此本文設定3層分解層數。本文選擇了自適應的Stein無偏風險估計閾值,使用軟閾值方法對訊號進行去噪。100。dat的信噪比SNR為108。71,均方差MSE為0。0019,去噪效果較好。

基於機器學習的心律失常分類(三)——小波閾值去噪[MATLAB]

去噪效果對比

標簽: 閾值  係數  小波  訊號  噪聲