一维小波变换算法程序目录

############################

appcoef函数

% 采用补零的扩展模式(参见dwtmode函数)
% 装载一维尺度信号
load leleccum; s = leleccum(1:3920);
ls=length(s);
subplot(2,1,1);plot(s);
title('原始信号');
% 使用db1小波在第3层进行分解
[c,l] = wavedec(s,3,'db1');
% 由小波分解框架[c,l],提取第3层系数近似值
ca3 = appcoef(c,l,'db1',3);
subplot(2,1,2);plot(ca3);

############################

cwt函数

t = linspace(-1,1,512);
s = 1-abs(t);
c = cwt(s,1:32,'cgau4');
c = cwt(s,[64 32 16:-2:2],'morl');
c = cwt(s,[3 18 12.9 7 1.5],'db2');
c = cwt(s,1:64,'sym4','abslvl',[100 400]);

############################

detcoef函数

% 采用补零的扩展模式(参见dwtmode函数)
% 装载一维尺度信号
load leleccum;
s = leleccum(1:3920);
% 使用db1在第3层进行分解
[c,l] = wavedec(s,3,'db1');
subplot(4,1,1);plot(s);
title('原始信号');
% 从小波分解结构[c,l]中提取1、2及3层的细节系数
[cd1,cd2,cd3] = detcoef(c,l,[1 2 3]);
% 绘图命令
subplot(4,1,2);plot(cd3);Ylabel('cd3');
subplot(4,1,3);plot(cd2);Ylabel('cd2');
subplot(4,1,4);plot(cd1);Ylabel('cd1');


############################

dwt函数

% 当前扩展模式是补零模式 (详见dwtmode函数)
% 构造原始一维尺度信号
randn('seed',531316785)
s = 2 + kron(ones(1,8),[1 -1]) + ((1:16).^2)/32 + 0.2*randn(1,16);
% 进行单尺度离散haar小波变换
[ca1,cd1] = dwt(s,'haar');
subplot(311); plot(s); title('原始信号');
subplot(323); plot(ca1); title('haar低频系数');
subplot(324); plot(cd1); title('haar高频系数');

% 对于给定的小波,计算两个相关的分解滤波器,并直接使用该滤波器计算低频和高频系数
[Lo_D,Hi_D] = wfilters('haar','d');
[ca1,cd1] = dwt(s,Lo_D,Hi_D);

% 进行单尺度db2离散小波变换并观察最后系数的边缘效果
[ca2,cd2] = dwt(s,'db2');
subplot(325); plot(ca2); title('db2低频系数');
subplot(326); plot(cd2); title('db2高频系数');

############################

idwt函数

% 当前扩展模式是补零
% 构造原始一维信号s
randn('seed',531316785)
s = 2 + kron(ones(1,8),[1 -1]) + ...
    ((1:16).^2)/32 + 0.2*randn(1,16);
% 使用db2进行单尺度dwt
[ca1,cd1] = dwt(s,'db2');
subplot(221); plot(ca1);
title('db2低频系数');
subplot(222); plot(cd1);
title('db2高频系数');
% 进行单尺度离散小波逆变换
ss = idwt(ca1,cd1,'db2');
err = norm(s-ss);     % 检查重构
subplot(212); plot([s;ss]');
title('原始信号和重构信号');
xlabel(['误差的2范数为 = ',num2str(err)])
% 对于给定小波,计算两个相关重构滤波器,并直接利用它们进行逆变换
[Lo_R,Hi_R] = wfilters('db2','r');
ss = idwt(ca1,cd1,Lo_R,Hi_R);

############################

iswt函数

% 装载一维信号
load noisbloc; s = noisbloc;
% 画出原始信号
subplot(311);
plot(s);
title('原始信号.');   
% 使用db1在第3层进行SWT分解
swc = swt(s,3,'db1');
% 第2种实现方法.
[swa,swd] = swt(s,3,'db1');
% 从平稳小波分解结构swc中,重构s
a0 = iswt(swc,'db1');
% 画出原始信号
subplot(312);
plot(a0);
title('重构信号1.');
% 第2种实现方法
a0bis = iswt(swa,swd,'db1');
% 画出原始信号
subplot(313);
plot(a0bis);
title('重构信号2.');
% 检查重构的效果
err = norm(s-a0)
errbis = norm(s-a0bis)

############################

swt函数

% 载入一维原始信号
load noisbloc; s = noisbloc;
% 画出原始信号
subplot(4,2,1);plot(s);title('原始信号');
subplot(4,2,2);plot(s);title('原始信号');
% 使用db1进行在第3层SWT分解.
[swa,swd] = swt(s,3,'db1');
% 画出从1~3层离散小波变换的低频系数和高频系数
subplot(4,2,3);plot(swa(3,:));title('第3层低频系数');
subplot(4,2,5);plot(swa(2,:));title('第2层低频系数');
subplot(4,2,7);plot(swa(1,:));title('第1层低频系数');
subplot(4,2,4);plot(swd(3,:));title('第3层低频系数');
subplot(4,2,6);plot(swd(2,:));title('第2层低频系数');
subplot(4,2,8);plot(swd(1,:));title('第1层低频系数');

############################

upcoef函数

% 当前扩展模式是补零(参见dwtmode函数)
% 低频信号由1~6层系数获得
cfs = [1]; 
essup = 10;
figure(1)
for i=1:6
    rec = upcoef('a',cfs,'db6',i);
    % essup 是重构信号必须的
    % 当j等于essup时,rec(j) 非常小
    ax = subplot(6,1,i),h = plot(rec(1:essup));
    set(ax,'xlim',[1 325]);
    essup = essup*2;
end
subplot(611)
title(['尺度1到6,由惟一的系数获得的低频信号'])

% 同样可以获得高频信号
% 高频信号可以由惟一系数从尺度1~6获得
cfs = [1];
mi = 12; ma = 30;   % db6小波滤波器必须的
rec = upcoef('d',cfs,'db6',1);
figure(2)
subplot(611), plot(rec(3:12))
for i=2:6
    rec = upcoef('d',cfs,'db6',i);
    subplot(6,1,i), plot(rec(mi*2^(i-2):ma*2^(i-2)))
end
subplot(611)
title(['由惟一系数从尺度1到6获得的高频信号'])

############################

upwlev函数

% 当前的延拓模式是补零(参见dwtmode函数)
% 装载原始一维信号
load sumsin; s = sumsin;
% 使用db1执行3层小波分解
[c,l] = wavedec(s,3,'db1');
subplot(311); plot(s);
title('原始信号s.');
subplot(312); plot(c);
title(' 3层小波分解结构')
xlabel(['第3层的低频系数以及第3、2和1层的高频系数'])
% 对3层的小波分解结构进行重构
% 因此新的结构[nc,nl]是2层小波分解结构
[nc,nl] = upwlev(c,l,'db1');
subplot(313); plot(nc);
title(' 2层小波分解结构')
xlabel(['第2层的低频系数及第1和2层的高频系数'])

############################

wavedec函数

% 当前延拓模式是补零
% 装载一维原始信号
load sumsin; s = sumsin;
subplot(2,1,1);plot(s);
title('原始信号');
% 使用db1进行3层分解
[c,l] = wavedec(s,3,'db1');
subplot(2,1,2);plot(c);title('小波分解结构');
Xlabel(' 低频系数和第3,2,1层的高频系数')

############################

waverec函数

% 当前延拓模式是补零
% 装载一维原始
load leleccum; s = leleccum(1:3920); ls = length(s);
% 使用db5进行尺度为3时的分解
[c,l] = wavedec(s,3,'db5');
% 从小波分解结构[c,l]重构信号s
a0 = waverec(c,l,'db5');
% 检查重构效果.
err = norm(s-a0)
subplot(2,1,1);plot(s);title('原始信号')
subplot(2,1,2);plot(a0);title('重构信号')

############################

wmaxlev函数   (   lev = wmaxlev(sizeX,wname)   )

% 对于一维信号
s = 2^10;     %输入信号的长度
w = 'db1';
% 计算小波分解的最大尺度,规则时最大尺度至少一个系数正确
l1 = wmaxlev(s,w)
% 改变小波
w = 'db7';
% 计算最大分解尺度
l2= wmaxlev(s,w)
% 对于二维信号
s = [2^9 2^7];
w = 'db1';
% 计算最大分解尺度
l3 = wmaxlev(s,w)
% 它和下面这个函数一样
l4 = wmaxlev(min(s),w)
% 改变小波
w = 'db7';
% 计算最大分解尺度
l5 = wmaxlev(s,w)

############################

wrcoef函数

cfd = cfd(:);
I = find(abs(cfd)cfd(I)=zeros(size(I));
cfd = reshape(cfd,5,lv);

% 画出离散系数
subplot(312), colormap(pink(64));
img = image(flipud(wcodemat(cfd,64,'row')));
set(get(img,'parent'),'YtickLabel',[]);
title('离散变换, 系数绝对值.')
ylabel('层数')

% 执行连续小波sym2变换,尺度从1~32
subplot(313)
ccfs = cwt(vonkoch,1:32,'sym2','plot');
title('连续变换, 系数绝对值.')
colormap(pink(64));
ylabel('尺度')

############################


% 采用补零的扩展模式 (参见dwtmode函数)
% 装载一维信号
load sumsin; s = sumsin;
subplot(2,1,1);plot(s);title('原始信号');
%使用sym4进行尺度为5的分解
[c,l] = wavedec(s,5,'sym4');
% 从小波分解结构[c,l],重构尺度为5的低频部分
a5 = wrcoef('a',c,l,'sym4',5);
subplot(2,1,2);plot(a5);title('重构低频信号');

############################

一维离散小波变换

load noisbloc
s= noisbloc(1:1024);
ls=length(s);
[cA1,cD1]=dwt(s,'db4');
A1=upcoef('a',cA1,'db4',1,ls);
D1=upcoef('d',cD1,'db4',1,ls);
subplot(2,1,1);plot(A1);title('低频A1')
subplot(2,1,2);plot(D1);title('高频D1')
A0=idwt(cA1,cD1,'db4',ls);
figure(2)
subplot(2,1,1);plot(s);title('原始信号')
subplot(2,1,2);plot(A0);title('重构信号')

[C,L]=wavedec(s,5,'db4');
cA5=appcoef(C,L,'db4',5);
A5=wrcoef('a',C,L,'db4',3);
D1=wrcoef('d',C,L,'db4',1);
D2=wrcoef('d',C,L,'db4',2);
D3=wrcoef('d',C,L,'db4',3);
D4=wrcoef('d',C,L,'db4',4);
D5=wrcoef('d',C,L,'db4',5);
subplot(3,2,1);plot(A5);title('低频A5')
subplot(3,2,2);plot(D1);title('高频D1')
subplot(3,2,3);plot(D2);title('高频D2')
subplot(3,2,4);plot(D3);title('高频D3')
subplot(3,2,5);plot(D3);title('高频D4')
subplot(3,2,6);plot(D3);title('高频D5')
figure(3)
A0=waverec(C,L,'db4');
subplot(3,1,1);plot(s);title('原始信号')
subplot(3,1,2);plot(A0);title('重构信号')
subplot(3,1,3);plot(s-A0);title('误差信号')
err = max(abs(s-A0))

############################

一维连续小波变换

% 装载实际信号
load vonkoch
vonkoch=vonkoch(1:510);
lv = length(vonkoch);

subplot(311), plot(vonkoch);title('被分析信号.');
set(gca,'Xlim',[0 510])
% 执行离散5层sym2小波变换
% 层数1~5分别对应尺度 2, 4, 8, 16 and 32
[c,l] = wavedec(vonkoch,5,'sym2');

% 扩展离散小波系数进行画图
% 层数1~5分别对应尺度 2, 4, 8, 16和32
cfd = zeros(5,lv);
for k = 1:5
    d = detcoef(c,l,k);
    d = d(ones(1,2^k),:);
    cfd(k,:) = wkeep(d(:)',lv);
end


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值