1 一维小波变换的 Matlab 实现
(1) dwt 函数
功能:一维离散小波变换
格式:[cA,cD]=dwt(X,'wname')
[cA,cD]=dwt(X,Lo_D,Hi_D)
说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数 'wname' 对信号X 进行分解,cA、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。
(2) idwt 函数
功能:一维离散小波反变换
格式:X=idwt(cA,cD,'wname')
X=idwt(cA,cD,Lo_R,Hi_R)
X=idwt(cA,cD,'wname',L)
X=idwt(cA,cD,Lo_R,Hi_R,L)
说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
'wname' 为所选的小波函数
X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和 Hi_R 经小波反变换重构原始信号 X 。
X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。
(3) wavedec函数
功能:单尺度一维小波分解函数
格式:[C,L] = wavedec(X,N,'
wname
');
说明:使用小波基函数 'wname' 对一维信号 X 进行 N 层分解。N必须是正整数
[C,S]=wavedec(X,N,'wname') 使用小波基函数 'wname' 对一维信号 X 进行 N 层分解;
(4) waverec 函数
说明:一维信号的多层小波重构
格式:X=waverec(C,S,'wname')
X=waverec(C,S,Lo_R,Hi_R)
说明:X=waverec2(C,S,'wname')用'wname'小波基函数对多层一维小波分解的结果C、S 重构得原始信号X;X=waverec2(C,S,Lo_R,Hi_R) 使用重构低通和高通滤波器 Lo_R 和 Hi_R 重构原信号。
(5) wavedec2 函数
功能:二维信号的多层小波分解
格式:[C,S]=wavedec2(X,N,'wname')
[C,S]=wavedec2(X,N,Lo_D,Hi_D)
说明:[C,S]=wavedec2(X,N,'wname') 使用小波基函数 'wname' 对二维信号 X 进行 N 层分解;
[C,S]=wavedec2(X,N,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。
(6) waverec2 函数
说明:二维信号的多层小波重构
格式: X=waverec2(C,S,'wname')
X=waverec2(C,S,Lo_R,Hi_R)
说明: X=waverec2(C,S,'wname') 由多层二维小波分解的结果 C、S 重构原始信号 X ,
'wname'为使用的小波基函数;
X=waverec2(C,S,Lo_R,Hi_R) 使用重构低通和高通滤波器 Lo_R 和 Hi_R 重构原信号。
Wden函数:一维信号的小波消噪处理
[xd,cxd,lxd]=wden(x,tptr,sorh,scal,n,‘wname’);返回经过小波消噪处理后的信号xd及其小波分解结构。
输入参数tptr为阈值选择标准:
thr1=thselect(x,'rigrsure');%stein无偏估计;
thr2=thselect(x,'heursure');%启发式阈值;
thr3=thselect(x,'sqtwolog');%固定式阈值;
thr4=thselect(x,'minimaxi');%极大极小值阈值;
输出参数sorh为函数选择阈值使用方式:
Sorh=s,为软阈值;
Sorh=h,为硬阈值;
输入参数scal规定了阈值处理随噪声水平的变化:
Scal=one,不随噪声水平变化。
Scal=sln,根据第一层小波分解的噪声水平估计进行调整。
Scal=mln,根据每一层小波分解的噪声水平估计进行调整。
[xd,cxd,lxd]=wden(c,l,tptr,sorh,scal,n,‘wname’);由有噪信号的小波分解结构得到消噪处理后的信号xd,及其小波分解结构。
例:比较不同阈值算法进行信号消噪的处理结果;
r=2055415866;
snr=3;%设置信噪比;
[xref,x]=wnoise(3,11,snr,r);%产生有噪信号;
lev=5;
xdH=wden(x,'heursure','s','sln',lev,'sym6');%heursure阈值信号处理;
xdR=wden(x,'rigrsure','s','sln',lev,'sym6');%rigrsure阈值信号处理;
xdS=wden(x,'sqtwolog','s','sln',lev,'sym6');%sqtwolog阈值信号处理;
xdM=wden(x,'minimaxi','s','sln',lev,'sym6');%minimaxi阈值信号处理;
subplot(3,2,1);
plot(xref);title('原始信号');
axis([1,2048,-10,10]);
subplot(3,2,2);
plot(x);title('有噪信号');
axis([1,2048,-10,10]);
subplot(3,2,3);
plot(xdH);xlabel('heursure阈值消噪处理后的信号');
axis([1,2048,-10,10]);
subplot(3,2,4);
plot(xdR);xlabel('rigrsure阈值消噪处理后的信号');
axis([1,2048,-10,10]);
subplot(3,2,5);
plot(xdS);xlabel('sqtwolog阈值消噪处理后的信号');
axis([1,2048,-10,10]);
subplot(3,2,6);
plot(xdM);xlabel('minimaxi阈值消噪处理后的信号');
Thselect函数:选取用于小波消噪处理的阈值
调用方式
Thr=thselect(x,tptr);根据信号x和阈值选择标准tptr来确定一个消噪处理过程中所采用的自适应阈值。阈值选择标准:
Tptr=rigrsure:使用stein的无偏似然估计原理所得到的自适应阈值。
Tptr=heursure:启发式阈值选择;
Tptr=sqtwolog:固定阈值形式;大小为sqrt(2*lg(length(X)));
Tptr=minimaxi:采用极大极小值原理选择阈值。
阈值的选择规则是基于基本模型y=f(t)+e,其中e是白噪声N(0,1);对于未知的噪声或非白噪声可以重新调节输出阈值。
例:自动生成信号在各个阈值规则下的不同阈值结果。
r=2055415866;
randn('seed',r);
x=randn(1,1000);
thr1=thselect(x,'rigrsure');%stein无偏估计;
thr2=thselect(x,'heursure');%启发式阈值;
thr3=thselect(x,'sqtwolog');%固定式阈值;
thr4=thselect(x,'minimaxi');%极大极小值阈值;
运行结果
thr1 =
1.8065
thr2 =
3.7169
thr3 =
3.7169
thr4 =
2.2163