[转载]小波变换MATLAB程序
(2012-06-13 09:28:04)
标签:
转载 |
原文地址:小波变换MATLAB程序作者:lqtxy25
function [LL HL LH HH] = DWT2(X,dim,lpd,hpd)
%function:[LL HL LH HH] = DWT2(X,dim,lpd,hpd)
%************函数功能*************
%对二维信号X(m,n)进行离散小波变换,注:m、n均为偶数
%************输入参量*************
%X ------ 待处理的二维信号,大小为m*n
%lpd ---- 低通滤波器,默认为(0.5,0.5)
%hpd ---- 高通滤波器,默认为(-0.5,0.5)
%dim ---- 小波分解级数,默认为1
%*************输出参量************
%LL ----- 低频部分的小波分解系数,大小为(m/2,n/2)
%HL ----- 垂直方向的小波分解系数,大小为(m/2,n/2)
%LH ----- 水平方向的小波分解系数,大小为(m/2,n/2)
%HH ----- 对角线方向的小波分解系数,大小为(m/2,n/2)
%lq2009.12.20
%========================================================================
%预警处理:
%=======================================================================
if (nargin < 1)
error('not
enough inputs arguments');
elseif(nargin > 4)
error('too
many inputs arguments');
end
if (nargin == 1)
dim = 1;
lpd = [0.5 0.5];
hpd = [-0.5
0.5];
end
if (nargin == 2)
lpd = [0.5 0.5];
hpd = [-0.5
0.5];
end
%========================================================================
%二维小波变换:
%=======================================================================
%对矩阵X的每一行进行一维小波变换
[m n] = size(X);
for i = 1:m
x1 =
X(i,:);
[cAx1,cDx1]
= DWT1(x1,1,lpd,hpd);
X(i,:) =
[cAx1,cDx1];
%将分解系数存入X中,得到(L,H)
end
%对一维行小波变换后X的每一列进行一维小波变换
for i = 1:n
x2 =
X(:,j);
[cAx2,cDx2]
= DWT1(x2,1,lpd,hpd);
X(:,i) =
[cAx2;cDx2];
%将分解系数存入X中,得到(LL,HL;LH,HH)
end
%LL HL LH HH赋值
LL = X(1:m/2,1:n/2);
% LL是矩阵x的左上角部分
HL = X(1:m/2,n/2+1:n);
% HL是矩阵x的右上角部分
LH = X(m/2+1:m,1:n/2);
% LH是矩阵x的左下角部分
HH = X(m/2+1:m,n/2+1:n);
% HH是矩阵x的右下角部分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [coefA,coefD] = DWT1(x,dim,lpd,hpd)
%function:[coefA coefD] = DWT1(x,dim,lpd,hpd)
%*************函数功能*************
%对一维信号x进行dim级的离散小波变换
%*************输入参量*************
%x ------ 待处理的一维信号
%lpd ---- 低通滤波器,默认为(0.5,0.5)
%hpd ---- 高通滤波器,默认为(-0.5,0.5)
%dim ---- 小波分解级数,默认为1
%*************输出参量*************
%coefA -- 平均部分的小波分解系数
%coefD -- 细节部分的小波分解系数
%lq 2009.12.20
%========================================================================
%预警处理:
%=======================================================================
if (nargin < 1 || nargin > 4)
return;
end
if (nargin == 1)
dim = 1;
lpd = [0.5 0.5];
hpd = [-0.5
0.5];
end
if (nargin == 2)
lpd = [0.5 0.5];
hpd = [-0.5
0.5];
end
%==========================================================================
%一维小波变换
%=======================================================================
coefA = x;
coefD = [];
for i = 1:dim
cvl =
conv(coefA,lpd);
%低通滤波
dnl =
DnSpl(cvl);
%通过下抽样得到平均部分的小波分解系数
cvh =
conv(coefA,hpd);
%高通滤波
dnh =
DnSpl(cvh);
%通过下抽样得到细节部分的小波分解系数
coefA =
dnl;
%经下抽样后的平均部分的小波系数作为下一次分解的信号
coefD =
[coefD
dnh];
%经下抽样后的细节部分的小波系数保存在coefD中
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function dnx = DnSpl(x)
%function:dnx = DnSpl(x)
%*************函数功能*************
%对一维信号x进行下抽样处理,输出序列dnx,即取x位于偶数位上的数值
%*************输入参量*************
%x ------ 待处理的一维信号
%*************输出参量*************
%dnx ---- x经下抽样后的输出序列
n = length(x);
n2 = floor(n/2);
for i = 1:n2
dnx(i) =
x(2*i);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%function:[LL HL LH HH] = DWT2(X,dim,lpd,hpd)
%************函数功能*************
%对二维信号X(m,n)进行离散小波变换,注:m、n均为偶数
%************输入参量*************
%X ------ 待处理的二维信号,大小为m*n
%lpd ---- 低通滤波器,默认为(0.5,0.5)
%hpd ---- 高通滤波器,默认为(-0.5,0.5)
%dim ---- 小波分解级数,默认为1
%*************输出参量************
%LL ----- 低频部分的小波分解系数,大小为(m/2,n/2)
%HL ----- 垂直方向的小波分解系数,大小为(m/2,n/2)
%LH ----- 水平方向的小波分解系数,大小为(m/2,n/2)
%HH ----- 对角线方向的小波分解系数,大小为(m/2,n/2)
%lq2009.12.20
%========================================================================
%预警处理:
%=======================================================================
if (nargin < 1)
elseif(nargin > 4)
end
if (nargin == 1)
end
if (nargin == 2)
end
%========================================================================
%二维小波变换:
%=======================================================================
%对矩阵X的每一行进行一维小波变换
[m n] = size(X);
for i = 1:m
end
%对一维行小波变换后X的每一列进行一维小波变换
for i = 1:n
end
%LL HL LH HH赋值
LL = X(1:m/2,1:n/2);
HL = X(1:m/2,n/2+1:n);
LH = X(m/2+1:m,1:n/2);
HH = X(m/2+1:m,n/2+1:n);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [coefA,coefD] = DWT1(x,dim,lpd,hpd)
%function:[coefA coefD] = DWT1(x,dim,lpd,hpd)
%*************函数功能*************
%对一维信号x进行dim级的离散小波变换
%*************输入参量*************
%x ------ 待处理的一维信号
%lpd ---- 低通滤波器,默认为(0.5,0.5)
%hpd ---- 高通滤波器,默认为(-0.5,0.5)
%dim ---- 小波分解级数,默认为1
%*************输出参量*************
%coefA -- 平均部分的小波分解系数
%coefD -- 细节部分的小波分解系数
%lq 2009.12.20
%========================================================================
%预警处理:
%=======================================================================
if (nargin < 1 || nargin > 4)
end
if (nargin == 1)
end
if (nargin == 2)
end
%==========================================================================
%一维小波变换
%=======================================================================
coefA = x;
coefD = [];
for i = 1:dim
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function dnx = DnSpl(x)
%function:dnx = DnSpl(x)
%*************函数功能*************
%对一维信号x进行下抽样处理,输出序列dnx,即取x位于偶数位上的数值
%*************输入参量*************
%x ------ 待处理的一维信号
%*************输出参量*************
%dnx ---- x经下抽样后的输出序列
n = length(x);
n2 = floor(n/2);
for i = 1:n2
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
后一篇:[转载]小波变换MATLAB程序

加载中…