研究db小波,用分解和重构滤波器和上下采样函数实现多分辨分析,代码如下:
%%% 小波分解与重构
clear;close all;
load noissin;Sig=noissin;
%% 滤波器分解
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('db3');
[c,l] = wavedec(Sig,2,Lo_D,Hi_D);
[cd1,cd2]=detcoef(c,l,[1,2]);
ca2 = appcoef(c,l,'db3',2);
% 重构
X=waverec(c,l,Lo_R,Hi_R);
%% 换种方式分解
[C,L] = wavedec(Sig,2,'db3');
[Cd1,Cd2]=detcoef(c,l,[1,2]);
Ca2 = appcoef(c,l,'db3',2);
Ca1=appcoef(c,l,'db3',1);
%% 手动卷积分解
det1=conv(Hi_D,Sig);
det1=dyaddown(det1);
app1=conv(Lo_D,Sig);
app1=dyaddown(app1);
det2=conv(Hi_D,app1);
det2=dyaddown(det2);
app2=conv(Lo_D,app1);
app2=dyaddown(app2);
% 重构
App1=conv(Lo_R,dyadup(app2))+conv(Hi_R,dyadup(det2));
App1=App1(6:end-5); % 前后各去掉5个值
Xs=conv(Lo_R,dyadup(App1))+conv(Hi_R,dyadup(det1));
% figure(1);subplot(211);plot(Cd1);title('cd1')
% subplot(212);plot(det1);title('det1')
% figure(2);subplot(211);plot(Ca1);title('ca1')
% subplot(212);plot(app1);title('app1')
卷积后发现结果的头尾几个元素不对,可能是延拓的方式有区别,所以手动重构时去掉了5个,是滤波器长度-1,最后结果除头尾不对,其它一致。