%Interpretacion de los coeficientes y detalle de la DWT aplicada a una señal
%sinusoidal no estacionaria con contenido de 10 Hz, 25 Hz, 50 Hz y 100 Hz
%
%Nota: para ejecutar este programa es necesario disponer del toolbox de 
%wavelet de Matlab 6

clear all
close all

npuntos=1024;
w=2*pi;
t=0:1/npuntos:1;
t1=t(1:npuntos*0.3);
t2=t(npuntos*0.3:npuntos*0.6);
t3=t(npuntos*0.6:npuntos*0.8);
t4=t(npuntos*0.8:npuntos);
tiempo=1000*t;
x1=sin(w*100*t1);
x2=sin(w*50*t2);
x3=sin(w*25*t3);
x4=sin(w*10*t4);
senal=[x1 x2 x3 x4];

senal=senal';
longitud=length(senal);
tipo='sym6';
nivel=8;
di=[];

%Calculo de los coeficientes de la DWT
figure(1)
[c,l] = wavedec(senal,nivel,tipo);
plot(c);
grid on

[CA,CD] = DWT(senal,tipo); size(CD)
figure(2)
plot(CD)

figure(4)
%x=idwt(CA,CD,tipo);   reconstruye la señal original a partir de los coeficiente de detalle CD y aproximacion CA
%plot(x)

[NC,NL,CA] = UPWLEV(c,l,tipo) 
plot(CA)

%Calculo de los detalles de la DWT
for i=1:nivel
cd=wrcoef('d',c,l,tipo,i);
di=[di;cd'];
end
k=0;
for i=nivel:-1:1
    k=k+1;
    d(k,:)=di(i,:);
end    
a=wrcoef('a',c,l,tipo,nivel);
figura=[senal';a';d];

figure(3)
for i=1:nivel+2
    subplot(nivel+2,1,i)
    plot(figura(i,:))
    axis([0,1000,-1,1]);
    zoom
end