日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小波去噪MATLAB代码

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小波去噪MATLAB代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文基于北京交通大學陳后金教授的課件。我加以整理,若有冒犯還請諒解

1利用MATLAB產生分解與重建濾波器組

計算濾波器組的函數[Ld,Hd,Lr,Hr]=wfilters('wname')

Ld:分解低通濾波器h0[-n];

Hd:分解高通濾波器h1[-n];

Lr:分解低通濾波器h0[-n];

Hr:分解高通濾波器h1[-n];

wfname:小波名

eg1:計算db2小波的四個濾波器,并畫出其時域波形。

MATLAB程序如下:
wn='db2';
[Ld,Hd,Lr,Hr] = wfilters(wn);
k=0:3;
subplot(221);stem(k,Ld);

title('低通分解濾波器Ld');
subplot(222);stem(k,Lr);
title('低通重建濾波器Lr');
subplot(223);stem(k,Hd);

title('高通分解濾波器Hd');
subplot(224);stem(k,Hd);
title('高通重建濾波器Hr');

2利用MATLAB計算小波函數

[phi,psi,t]=wavefun('wname',lter)

wname:小波名

lter:計算過程的迭代次數

phi:尺度函數?(t)

psi:小波函數ψ(t)

t:尺度函數與小波函數的抽樣點

eg2:利用MATLAB計算db2小波的尺度函數與小波函數。

MATLAB程序如下:

lter=20;

wname='db2';

[s,w,t]=wavefun(wname,lter);

subolot(211);plot(t,s);

title('尺度函數')

subplot(212);plot(t,w);

title('小波函數')

3 利用MATLAB計算一維DWT和IDWT

計算多級DWT和IDWT的函數為wavedec和waverec,其調用格式為

[C,L]=wavedec(x,N,'wname')

x=waverec(C,L,'wname')

其中

wname: 小波名;?
x: 時域信號;
N: 小波變換的級數;
C = [cAN cDN cDN-1 ??? cD1];
L(1)= cAN的長度, L(2)= cDN的長度,
L(N+1)= cD1的長度, L(N+2)= x的長度

3利用部分小波系數重建信號

x=wrcoef('type', C, L, 'wname', N)
type='a' 由第N級近似分量重建信號
type=‘d' 由第N級細節分量重建信號
wname: 小波名

若 C = [cA3 cD3 cD2 cD1]
x=wrcoef('a',C,L, 'wname',3)
x=IDWT{[cA3 0 0 0]}
x=wrcoef('a',C,L, , 'wname',2)
x=IDWT{[cA3 cD3 0 0] }=IDWT{[cA2 0 0]}

eg3 已知某信號的波形如圖所示,試計算其5級小波變換系數,
由第5、3、1級小波近似系數重建的信號。

MATLAB程序如下:
wname='db1';
dwtmode('per')
t=linspace(0,1,1024);
x=20*t.^2.*(1-t).^4.*cos(12*pi*t);
subplot(511);plot(t,x);
axis([0 1 -0.5 0.5]);title('Signal');

[C,L] = wavedec(x,5,wname);
subplot(512);plot(t,C); axis([0 1 -3 3]);

A5=wrcoef('a',C,L,wname,5);
subplot(513);plot(t,A5);
axis([0 1 -0.5 0.5]);
A3=wrcoef('a',C,L,wname,3);
subplot(514);plot(t,A3);
axis([0 1 -0.5 0.5]);

A1=wrcoef('a',C,L,wname,1);
subplot(515);plot(t,A1);
axis([0 1 -0.5 0.5]);

4基于小波的信號去噪

XD = wden(X, TPTR, SORH, SCAL, N, 'wname')
其中:
XD: 對噪聲信號X去噪后得到的信號;
X: 含噪聲信號;
TPTR: 閾值規則,主要有'rigrsure', 'heursure', 'sqtwolog', 'minimaxi';
SORH: 閾值方法, 's' (soft閾值), 'h' (hard閾值);
SCAL: 閾值尺度的調整方法,主要有'one', ' sln', ' mln' ;
N: 離散小波變換的級數
wname: 小波名

eg4?試利用函數wden對含有噪聲的blocks信號進行去噪。

MATLAB程序如下:
snr=5; % 噪聲方差
[x, xn] = wnoise('blocks',11,snr);
k=0:length(x)-1;
subplot(311);plot(k,x);
title('原信號');
subplot(312);plot(k,xn);
title('含噪信號');
lev=5;wn='db1';
% 利用soft SURE閾值規則去噪
xd1= wden(xn, 'heursure', 's', 'one', lev, wn);
subplot(313);plot(k,xd1);
title('去噪后的結果');

5基于小波的信號壓縮

NC= wthcoef('d', C, L, N)
其中:
'd': 表示對DWT系數C中細節(detail)分量進行壓縮;
C,L: 由wavedec得到的DWT系數;
N: 若N=[1 2 3]表示將C中1、2和3級細節分量置零。
NC: 由系數C經過壓縮后得到的新系數;

eg5試利用函數wthcoef對leleccum信號進行壓縮。

MATLAB程序如下:
load leleccum;?
x = leleccum(1001:2024)*0.95/100;
k=0:length(x)-1;
[C,L] = wavedec(x,5,'db3');
NC1 = wthcoef('d',C,L,[1]);
x1 = waverec(NC1, L, 'db3');
NC5 = wthcoef('d',C,L,[1 2 3 4 5]) ;?
x2 = waverec(NC5, L, 'db3');
subplot(311);plot(k,x);title('原信號');
subplot(312);plot(k,x1);title('2:1壓縮');
subplot(313);plot(k,x2);title('32:1壓縮');

?

總結

以上是生活随笔為你收集整理的小波去噪MATLAB代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。