最新小波变换matlab总结.docx
《最新小波变换matlab总结.docx》由会员分享,可在线阅读,更多相关《最新小波变换matlab总结.docx(77页珍藏版)》请在冰点文库上搜索。
最新小波变换matlab总结
小波变换matlab总结
一、预置工具
1.预置信号
Matlab内置了大量的信号实例,进行信号试验的时候可以调用。
调用格式:
loadsignal
matlab安装目录的toolbox/wavelet/wavedemo
noissin包含噪声的正弦波
leleccum一维电压信号,有365560个采样点
wbarb专指图片:
2.预置小波
Matlab预置了共计15种小波。
查看语句:
wavemngr('read',1)
查看单个小波:
waveinfo('wname')
1.Haar小波
小波名haar
2.Daubechies小波系
小波名db
调用名db1db2db3db4db5db6db7db8db9db10
3.对称小波系Symlets
小波名sym
调用名sym2sym3sym4sym5sym6sym7sym8
4.Coiflets小波系
小波名coif
调用名coif1coif2coif3coif4coif5
5.Biorthogonal小波系
小波名bior
调用名bior1.1bior1.3bior1.5bior2.2bior2.4bior2.6bior2.8bior3.1bior3.3bior3.5bior3.7bior3.9bior4.4bior5.5bior6.8
6.ReverseBior小波系
小波名rbio
调用名rbio1.1rbio1.3rbio1.5rbio2.2rbio2.4rbio2.6rbio2.8rbio3.1rbio3.3rbio3.5rbio3.7rbio3.9rbio4.4rbio5.5rbio6.8
7.Meyer小波
小波名meyr
8.Dmeyer小波
小波名dmey
9.Gaussian小波系
小波名gaus
调用名gaus1gaus2gaus3gaus4gaus5gaus6gaus7gaus8
10.Mexicanhat小波
小波名mexh
11.Morlet小波
小波名morl
12.ComplexGaussian小波系
小波名cgau
调用名cgau1cgau2cgau3cgau4cgau5cgau
13.Shannon小波系
小波名shan
调用名shan1-1.5shan1-1shan1-0.5shan1-0.1shan2-3
14.FrequencyB小波系
小波名fbsp
调用名fbsp1-1-1.5fbsp1-1-1fbsp1-1-0.5fbsp2-1-1fbsp2-1-0.5fbsp2-1-0.1
15.ComplexMorlet小波系
小波名cmor
调用名cmor1-1.5cmor1-1cmor1-0.5cmor1-1cmor1-0.5cmor1-0.1
3.滤波器函数
wfilters函数
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters('wname')
计算对应小波的滤波器。
Thefouroutputfiltersare
Lo_D,用于分解的低通滤波器
Hi_D,用于分解的高通滤波器
Lo_R,用于重构的低通滤波器
Hi_R,用于重构的高通滤波器
4.量化编码
wcodemat函数
y=wcodemat(x,nb,opt,absol)
y=wcodemat(x,nb,opt)
y=wcodemat(x,nb)
y=wcodemat(x)
该函数是用来对矩阵X进行量化编码,它返回矩阵X的一个编码矩阵,在编码中,把矩阵X中元素绝对值最大的作为NB(NB是一个整数),绝对值最小的作为1,其他元素依其绝对值的大小在1与NB中排列.
当OPT为'row'时,做行编码;
当OPT为'col'时,做列编码,
当OPT为'mat'时,做全局编码,即把整个矩阵中的元素绝对值最大的元素作为NB,最小的作为1,其他元素依其绝对值的大小在整个矩阵中排列.
当ABSOL为0时,该函数返回输入矩阵X的一个编码版本;为非0时,返回X的绝对值
5.阈值获取
MATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpen和wwdcbm,下面对它们的用法进行简单的说明。
ddencmp函数
调用格式:
[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X)
函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值。
输入参数X为一维或二维信号;
IN1取值为'den'或'cmp','den'表示进行去噪,'cmp'表示进行压缩;
IN2取值为'wv'或'wp',wv表示选择小波,wp表示选择小波包。
输出参数THR为函数选择的阈值,SORH为函数选择阈值使用方式。
Sorh=s,为软阈值;
Sorh=h,为硬阈值;
输出参数KEEPAPP决定了是否对近似分量进行阈值处理。
可选为0或1。
CRIT为使用小波包进行分解时所选取的熵函数类型。
例:
自动生成信号小波处理的阈值选取方案。
r=2055415866;randn('seed',r);
x=randn(1,1000);%产生白噪声;
%求取对信号进行小波消噪处理的默认阈值、软阈值,并且保留低频系数;
[thr,sorh,keepapp]=ddencmp('den','wv',x);
输出:
thr=3.8593
sorh=s
keepapp=1
thselect函数
调用格式如下:
THR=thselect(X,TPTR);
根据字符串TPTR定义的阈值选择规则来选择信号X的自适应阈值。
自适应阈值的选择规则包括以下四种:
*TPTR='rigrsure',自适应阈值选择使用Stein的无偏风险估计原理。
*TPTR='heursure',使用启发式阈值选择。
*TPTR='sqtwolog',阈值等于sqrt(2*log(length(X))).
*TPTR='minimaxi',用极大极小原理选择阈值。
阈值选择规则基于模型y=f(t)+e,e是高斯白噪声N(0,1)。
wbmpen函数
调用格式:
THR=wbmpen(C,L,SIGMA,ALPHA);
返回去噪的全局阈值THR。
THR通过给定的一种小波系数选择规则计算得到,小波系数选择规则使用Birge-Massart的处罚算法。
[C,L]是进行去噪的信号或图像的小波分解结构;
SIGMA是零均值的高斯白噪声的标准偏差;
ALPHA是用于处罚的调整参数,它必须是一个大于1的实数,一般去ALPHA=2。
wdcbm函数
调用格式:
(1)[THR,NKEEP]=wdcbm(C,L,ALPHA);
(2)[THR,NKEEP]=wdcbm(C,L,ALPHA,M);
函数wdcbm是使用Birge-Massart算法获取一维小波变换的阈值。
返回值THR是与尺度无关的阈值,
NKEEP是系数的个数。
[C,L]是要进行压缩或消噪的信号在j=length(L)-2层的分解结构;
LAPHA和M必须是大于1的实数;
THR是关于j的向量,THR(i)是第i层的阈值;
NKEEP也是关于j的向量,NKEEP(i)是第i层的系数个数。
一般压缩时ALPHA取1.5,去噪时ALPHA取3.
6.阈值去噪
MATLAB中实现信号的阈值去噪的函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。
下面对它们的用法作简单的介绍。
wden函数
调用格式:
(1)[XD,CXD,LXD]=wden(X,TPTR,SORH,SCAL,N,'wname')
(2)[XD,CXD,LXD]=wden(C,L,TPTR,SORH,SCAL,N,'wname')
函数wden用于一维信号的自动消噪。
X为原始信号,[C,L]为信号的小波分解,N为小波分解的层数。
THR为阈值选择规则:
*TPTR='rigrsure',自适应阈值选择使用Stein的无偏风险估计原理。
*TPTR='heursure',使用启发式阈值选择。
*TPTR='sqtwolog',阈值等于sqrt(2*log(length(X))).
*TPTR='minimaxi',用极大极小原理选择阈值。
SORH是软阈值或硬阈值的选择(分别对应's'和'h')。
SCAL指所使用的阈值是否需要重新调整,包含下面三种:
*SCAL='one'不调整;
*SCAL='sln'根据第一层的系数进行噪声层的估计来调整阈值。
*SCAL='mln'根据不同的噪声估计来调整阈值。
XD为消噪后的信号,[CXD,LXD]为消噪后信号的小波分解结构。
格式
(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构[CXD,LXD]。
格式
(2)返回参数与格式
(1)相同,但其结构是由直接对信号的小波分解结构[C,L]进行阈值处理得到的。
wdencmp函数
调用格式有以下三种:
(1)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('gbl',X,'wname',N,THTR,SORH,KEEPAPP);
(2)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('lvd',X,'wname',N,THTR,SORH);
(3)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('lvd',C,L,'wname',N,THTR,SORH);
函数wdencmp用于一维或二维信号的消噪或压缩。
wname是所用的小波函数。
gbl(global的缩写)表示每一层都采用同一个阈值进行处理。
lvd表示每层采用不同的阈值进行处理。
N表示小波分解的层数。
THR为阈值向量,对于格式
(2)和(3)每层都要求有一个阈值,因此阈值向量THR的长度为N。
SORH表示选择软阈值或硬阈值(分别取值为's'和'h'),
参数KEEPAPP取值为1时,则低频系数不进行阈值量化,反之,低频系数要进行阈值量化。
XC是要进行消噪或压缩的信号,
[CXC,LXC]是XC的小波分解结构,
PERF0和PERFL2是恢复或压缩L^2的范数百分比。
如果[C,L]是X的小波分解结构,则PERFL2=100*(CXC向量的范数/C向量的范数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100||XC||^2/||X||^2。
wthresh函数
调用格式:
Y=wthresh(X,SORH,T)
返回输入向量或矩阵X经过软阈值(如果SORH='s')或硬阈值(如果SORH='h')处理后的信号。
T是阈值。
Y=wthresh(X,'s',T)返回的是Y=SIG(X)*(|X|-T)+,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。
Y=wthresh(X,'h',T)返回的是Y=X*1(|X|>T),即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。
一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。
wthcoef函数
调用格式:
(1)NC=wthcoef('d',C,L,N,P)
(2)NC=wthcoef('d',C,L,N)
(3)NC=wthcoef('a',C,L)
(4)NC=wthcoef('t',C,L,N,T,SORH)
用于一维信号小波系数的阈值处理。
格式
(1)返回小波分解结构[C,L]经向量N和P定义的压缩率处理后的新的小波分解向量NC,[NC,L]构成一个新的小波分解结构。
N包含被压缩的细节向量,P是把较小系数置0的百分比信息的向量。
N和P的长度必须相同,向量N必须满足1<=N(i)<=length(L)-2。
格式
(2)返回小波分解结构[C,L]经过向量N中指定的细节系数置0后的小波分解向量NC。
格式(3)返回小波分解结构[C,L]经过近似系数置0后的小波分解向量NC。
格式(4)返回小波分解结构[C,L]经过将向量N作阈值处理后的小波分解向量NC。
如果SORH=’s‘,则为软阈值;如果SORH='h'则为硬阈值。
N包含细节的尺度向量,T是N相对应的阈值向量。
N和T的长度必须相等。
wpdencmp函数
调用格式:
[XD,TREED,PERF0,PERFL2]=wpdencmp(X,SORH,N,'wname',CRIT,PAR,KEEPAPP)
[XD,TREED,PERF0,PERFL2]=wpdencmp(TREE,SORH,CRIT,PAR,KEEPAPP)
函数wpdencmp用于使用小波包变换进行信号的压缩或去噪。
格式
(1)返回输入信号X(一维或二维)的去噪或压缩后的信号XD。
输出参数TREED是XD的最佳小波包分解树;
PERFL2和PERF0是恢复和压缩L2的能量百分比。
PERFL2=100*(X的小波包系数范数/X的小波包系数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100*||XD||^2/||X||^2。
SORH的取值为's'或'h',表示的是软阈值或硬阈值。
输入参数N是小波包的分解层数,wname是包含小波名的字符串。
函数使用由字符串CRIT定义的熵和阈值参数PAR实现最佳分解。
如果KEEPAPP=1,则近似信号的小波系数不进行阈值量化;否则,进行阈值量化。
格式
(2)与格式
(1)的输出参数相同,输入选项也相同,只是它从信号的小波包分解树TREE进行去噪或压缩。
实例:
loadnoisdopp;
x=noisdopp;
%给出全局阈值
[thr,sorh,keepapp]=ddencmp('den','wv',x);
%根据全局阈值对信号降噪
xc=wdencmp('gbl',x,'sym4',2,thr,sorh,keepapp);
[c,l]=wavedec(x,2,'sym4');
[thr1,nkeep]=wdcbm(c,l,3);
xc1=wdencmp('lvd',c,l,'sym4',2,thr1,'s');
subplot(311);plot(x);title('原始信号')
subplot(312);plot(xc);title('使用全局阈值降噪后的信号');
subplot(313);plot(xc1);title('使用分层阈值降噪后的信号');
loadwoman
%下面进行噪声的产生
init=3;
rand('seed',init);
Xn=X+18*(rand(size(X)));
%下面进行图像的去噪处理
[thr,sorh,keepapp]=ddencmp('den','wv',Xn);
Xd=wdencmp('gbl',Xn,'sym5',2,thr,sorh,keepapp);
%用sym5小波对图像信号进行二层的小波分解
[c,s]=wavedec2(X,2,'sym5');
[thr1,nkeep1]=wdcbm2(c,s,1.5);
Xd1=wdencmp('lvd',c,s,'sym5',2,thr1,'s');
%显示图像
subplot(221);image(X);colormap(map);title('原始图像X');axissquare
subplot(222);image(Xn);colormap(map);title('含噪声的图像');axissquare
subplot(223);image(Xd);colormap(map);title('去噪后的图像');axissquare
subplot(224);image(Xd1);colormap(map);title('分层去噪后的图像');axissquare
二、小波变换函数
单尺度一维小波变换
cwt一维连续小波变换
调用格式:
coefs=cwt(s,scale,’wname’)【仅给出系数值】
coefs=cwt(s,scale,’wname’,’plot’)【给出系数值同时生成图像】
实例:
loadnoissin;
figure
subplot(121)
plot(noissin);
subplot(122)
c=cwt(noissin,1:
48,'db4','plot');
dwt一维离散小波变换
调用格式:
[cA1,cD1]=dwt(X,’wname’)【使用指定的小波基函数'wname'对信号X进行分解】
[cA1,cD1]=dwt(X,Lo_D,Hi_D)【使用指定的滤波器组Lo_D、Hi_D对信号进行分解】
实例:
loadleleccum;
s=leleccum(1:
3920);
ls=length(s);
[cA,cD]=dwt(s,'db1');
figure
subplot(121)
plot(cA);
subplot(122)
plot(cD)
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters('db1')
[cA1,cD1]=dwt(s,Lo_D,Hi_D);
figure
subplot(121)
plot(cA1);
subplot(122)
plot(cD1)
idwt一维离散小波逆变换
调用格式:
X=idwt(cA,cD,'wname')
【由近似分量cA和细节分量cD经小波反变换重构原始信号X】
X=idwt(cA,cD,Lo_R,Hi_R)
【用指定的重构滤波器Lo_R和Hi_R经小波反变换重构原始信号X 】
X=idwt(cA,cD,'wname',L)
【指定返回信号X中心附近的L个点】
X=idwt(cA,cD,Lo_R,Hi_R,L)
【与上边一致】
upcoef一维小波系数重构
调用格式:
Y=upcoef(O,X,'wname',N)
Y=upcoef(O,X,'wname',N,L)
Y=upcoef(O,X,Lo_R,Hi_R,N)
Y=upcoef(O,X,Lo_R,Hi_R,N,L)
这一函数是一维小波分解系数的直接重构
它重建的是原信号在指定层次的,高频或者低频分量。
也就是说,这个信号不是原本的信号,而且某个层次上的逼近。
N=1条件下相当与缺省模式的idwt
A1=upcoef('a',cA1,'db1',1,l_s)相当于A1=idwt(cA1,[],'db1',l_s);
D1=upcoef('d',cD1,'db1',1,l_s)相当于D1=idwt([],cD1,'db1',l_s);
而O是一个标识符,O=‘a’低频,O=‘d’高频
N代表了小波系数的级别,是几级小波系数。
L则指定返回信号X中心附近的L个点
例子:
loadleleccum;
s=leleccum(1:
3920);
ls=length(s);
[cA,cD]=dwt(s,'db1');
A1=upcoef('a',cA,'db1',1,ls);D1=upcoef('d',cD,'db1',1,ls);
%A1=idwt(cA,[],'db1',ls);D1=idwt([],cD,'db1',ls);
subplot(1,2,1);plot(A1);title('ApproximationA1')
subplot(1,2,2);plot(D1);title('DetailD1')
多尺度一维小波变换
wavedec多尺度一维分解
调用格式:
[C,L]=wavedec(X,N,’wname’)
[C,L]=wavedec(X,N,Lo_D,Hi_D)
函数返回N层分解的各组分系数C(连接在一个向量里),向量L里返回的是各组分的长度。
分解的结构如下
例子:
loadleleccum;
s=leleccum(1:
3920);
[C,L]=wavedec(s,3,'db1');
subplot(1,2,1);plot(C);title('C')
subplot(1,2,2);plot(L);title('L')
waverec多尺度一维重构
调用格式:
X=waverec(C,L,’wname’)
X=waverec(C,L,Lo_R,Hi_R)
实例:
loadleleccum;
s=leleccum(1:
3920);
[C,L]=wavedec(s,3,'db1');
A0=waverec(C,L,'db1');
Err=abs(s-A0);
figure
(1)
subplot(3,1,1);
plot(s);title('originals');
subplot(3,1,2);
plot(A0);title('wavereconstructions');
subplot(3,1,3);
plot(Err);title('wavereconstructionerr');
appcoef低频系数提取
调用格式:
A=appcoef(C,L,’wname’,N)从C中抽取N层近似系数
A=appcoef(C,L,’wname’)
A=appcoef(C,L,Lo_R,Hi_R,N)
A=appcoef(C,L,Lo_R,Hi_R)
detcoef高频系数提取
调用格式:
A=detcoef(C,L,N)
A=detcoef(C,L)
实例:
loadleleccum;
s=leleccum(1:
3920);
[C,L]=wavedec(s,3,'db1');
cA3=appcoef(C,L,'db1',3);
cD3=detcoef(C,L,3);
cD2=detcoef(C,L,2);
cD1=detcoef(C,L,1);
subplot(2,2,1);plot(cA3);title('cA3')
subplot(2,2,2);plot(cD3);title('cD3')
subplot(2,2,3);plot(cD2);title('cD2')
subplot(2,2,4);plot(cD1);title('cD1')
wrcoef多尺度小波系数重构
调用格式:
X=wrcoef(‘type’,C,L,’wname’,N)
X=wrcoef(‘type’,C,L,Lo_R,Hi_R,N)
X=wrcoef(‘type’,C,L,’wname’)
X=wrcoef(‘type’,C,L,Lo_R,Hi_R)
其中type=‘a’低频,type=‘d’高频
作用类似于upcoef,只不过是多尺度函数。
实例:
loadleleccum;
s=leleccum(1:
3920);
[C,L]=wavedec(s,3,'db1');
cA3=wrcoef('a',C,L,'db1',3);
cD1=wrcoef('d',C,L,'db1',1);
cD2=w