1、小波閾值處理基本理論
所謂閾值去噪簡(jiǎn)而言之就是對(duì)信號(hào)進(jìn)行分解,然后對(duì)分解后的系數(shù)進(jìn)行閾值處理,最后重構(gòu)得到去噪信號(hào)。該算法其主要理論依據(jù)是:小波變換具有很強(qiáng)的去數(shù)據(jù)相關(guān)性,它能夠使信號(hào)的能量在小波域集中在一些大的小波系數(shù)中;而噪聲的能量卻分布于整個(gè)小波域內(nèi)。因此,經(jīng)小波分解后,信號(hào)的小波系數(shù)幅值要大于噪聲的系數(shù)幅值??梢哉J(rèn)為,幅值比較大的小波系數(shù)一般以信號(hào)為主,而幅值比較小的系數(shù)在很大程度上是噪聲。于是,采用閾值的辦法可以把信號(hào)系數(shù)保留,而使大部分噪聲系數(shù)減小至零。小波閾值收縮法去噪的具體處理過(guò)程為:將含噪信號(hào)在各尺度上進(jìn)行小波分解,設(shè)定一個(gè)閾值,幅值低于該閾值的小波系數(shù)置為0,高于該閾值的小波系數(shù)或者完全保留,或者做相應(yīng)的“收縮(shrinkage)”處理。最后將處理后獲得的小波系數(shù)用逆小波變換進(jìn)行重構(gòu),得到去噪后的信號(hào)。
2、閾值函數(shù)的選取
小波分解閾值去噪中,閾值函數(shù)體現(xiàn)了對(duì)超過(guò)和低于閾值的小波系數(shù)不同處理策略,是閾值去噪中關(guān)鍵的一步。設(shè)w表示小波系數(shù),T為給定閾值,sign(*)為符號(hào)函數(shù),常見(jiàn)的閾值函數(shù)有:
硬閾值函數(shù):(小波系數(shù)的絕對(duì)值低于閾值的置零,高于的保留不變)
軟閾值函數(shù):(小波系數(shù)的絕對(duì)值低于閾值的置零,高于的系數(shù)shrinkage處理)
式(3-8)和式(3-9)用圖像表示即為:
值得注意的是:
1)硬閾值函數(shù)在閾值點(diǎn)是不連續(xù)的,在下圖中已經(jīng)用黑線(xiàn)標(biāo)出。不連續(xù)會(huì)帶來(lái)振鈴,偽吉布斯效應(yīng)等。
2)軟閾值函數(shù),原系數(shù)和分解得到的小波系數(shù)總存在著恒定的偏差,這將影響重構(gòu)的精度
同時(shí)這兩種函數(shù)不能表達(dá)出分解后系數(shù)的能量分布,半閾值函數(shù)是一種簡(jiǎn)單而經(jīng)典的改進(jìn)方案。見(jiàn)下圖:
3、閾值的確定
選取的閾值最好剛好大于噪聲的最大水平,可以證明的是噪聲的最大限度以非常高的概率低于(此閾值是Donoho提出的),其中根號(hào)右邊的這個(gè)參數(shù)(叫做sigma)就是估計(jì)出來(lái)的噪聲標(biāo)準(zhǔn)偏差(根據(jù)第一級(jí)分解出的小波細(xì)節(jié)系數(shù),即整個(gè)det1絕對(duì)值系數(shù)中間位置的值),本文將用此閾值去處理各尺度上的細(xì)節(jié)系數(shù),注意所謂全局閾值就是近似系數(shù)不做任何閾值處理外,其他均閾值處理。
4、閾值策略
5、一維信號(hào)的多級(jí)分解與重構(gòu)
以下算法如果用簡(jiǎn)單的文字描述,可是:先將信號(hào)對(duì)稱(chēng)拓延(matlab的默認(rèn)方式),然后再分別與低通分解濾波器和高通分解濾波器卷積,最后下采樣,最后可以看出最終卷積采樣的長(zhǎng)度為floor(n-1)/2+n,如果想繼續(xù)分解下去則繼續(xù)對(duì)低頻系數(shù)CA采取同樣的方式進(jìn)行分解。
6、matlab實(shí)現(xiàn)一維小波閾值去噪
1,核心庫(kù)函數(shù)說(shuō)明
1)wnoisest函數(shù)
作用:估計(jì)一維小波高頻系數(shù)中的噪聲偏差
這個(gè)估計(jì)值使用的是絕對(duì)值中間位置的值(估計(jì)的噪聲偏差值)除以0.6745(MedianAbsoluteDeviation/0.6745),適合0均值的高斯白噪聲
2)wavedec函數(shù)
一維信號(hào)的多尺度分解,將返回諸多細(xì)節(jié)系數(shù)和每個(gè)系數(shù)的長(zhǎng)度,在matlab中鍵入“docwavedec”具體功能一目了然
3)waverec函數(shù)
一維信號(hào)小波分解系數(shù)的重構(gòu),將返回重構(gòu)后的信號(hào)在matlab中鍵入“docwaverec”具體功能一目了然,也可以鍵入“openwaverec”查看matlab具體是怎么做的。
4)wdencmp函數(shù)
這個(gè)函數(shù)用于對(duì)一維或二維信號(hào)的壓縮或者去噪,使用方法:
1[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘gbl’,X,‘wname’,N,THR,SORH,KEEPAPP)
2[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,X,‘wname’,N,THR,SORH)
3[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,C,L,‘wname’,N,THR,SORH)
wname是所用的小波函數(shù),gbl(global的縮寫(xiě))表示每層都采用同一個(gè)閾值進(jìn)行處理,lvd表示每層用不同的閾值進(jìn)行處理,N表示小波分解的層數(shù),THR為閾值向量,對(duì)于格式(2)(3)每層都要求有一個(gè)閾值,因此閾值向量THR的長(zhǎng)度為N,SORH表示選擇軟閾值還是硬閾值(分別取為’s’和’h’),參數(shù)KEEPAPP取值為1時(shí),則低頻系數(shù)不進(jìn)行閾值量化處理,反之,則低頻系數(shù)進(jìn)行閾值量化。XC是消噪或壓縮后的信號(hào),[CXC,LXC]是XC的小波分解結(jié)構(gòu),PERF0和PERFL2是恢復(fù)和壓縮L^2的范數(shù)百分比,是用百分制表明降噪或壓縮所保留的能量成分。
3.代碼實(shí)現(xiàn)
clear;
%獲取噪聲信號(hào)
loadleleccum;
indx=1:3450;
noisez=leleccum(indx);
%信號(hào)的分解
wname=‘db3’;
lev=3;
[c,l]=wavedec(noisez,lev,wname);
%求取閾值
sigma=wnoisest(c,l,1);%使用庫(kù)函數(shù)wnoisest提取第一層的細(xì)節(jié)系數(shù)來(lái)估算噪聲的標(biāo)準(zhǔn)偏差
N=numel(noisez);%整個(gè)信號(hào)的長(zhǎng)度
thr=sigma*sqrt(2*log(N));%最終閾值
%全局閾值處理
keepapp=1;%近似系數(shù)不作處理
denoisexs=wdencmp(‘gbl’,c,l,wname,lev,thr,‘s’,keepapp);
denoisexh=wdencmp(‘gbl’,c,l,wname,lev,thr,‘h’,keepapp);
%作圖
subplot(311),
plot(noisez),title(‘原始噪聲信號(hào)’);
subplot(312),
plot(denoisexs),title(‘matlab軟閾值去噪信號(hào)’);
subplot(313),
plot(denoisexh),title(‘matlab硬閾值去噪信號(hào)’);
評(píng)論