%================================================
%  Filtros Espejo en Cuadratura (QMF)
%================================================
load db10
h0=db10;   % Filtro FIR de fase no lineal
%h0=db10(1:end-1);
%h0=fir1(80,0.5);   % Filtro FIR fase lineal
n=[0:1:length(h0)-1];
figure
stem(n,h0)
title('QMF - Respuesta al Impulso LPF h0(n)')
wH0=[0:0.02:pi];
numH0=h0;
denH0=[1 zeros(1,length(h0)-1)];
[magH0,faseH0]=dbode(numH0,denH0,1,wH0);
H0=magH0.*exp(j*faseH0*pi/180);
nn=(-1).^n;
h1=h0.*nn;
figure
stem(n,h1)
title('QMF - Respuesta al Impulso HPF h1(n)')
numH1=h1;
denH1=[1 zeros(1,length(h1)-1)];
[magH1,faseH1]=dbode(numH1,denH1,1,wH0);
H1=magH1.*exp(j*faseH1*pi/180);
figure
subplot(211)
plot(wH0,magH0,wH0,magH1)
title('QMF - Respuesta en Frec. LPF H0(w) y HPF H1(w)')
subplot(212)
plot(wH0,faseH0,wH0,faseH1)
xlabel('Frec. [rad/s]')
g0=2*h0;
g1=2*h1;
figure
stem(n,g0)
title('QMF - Respuesta al Impulso LPF g0(n)')
figure
stem(n,g1)
title('QMF - Respuesta al Impulso HPF g1(n)')
numG0=g0;
denG0=[1 zeros(1,length(g0)-1)];
[magG0,faseG0]=dbode(numG0,denG0,1,wH0);
G0=magG0.*exp(j*faseG0*pi/180);
numG1=g1;
denG1=[1 zeros(1,length(g1)-1)];
[magG1,faseG1]=dbode(numG1,denG1,1,wH0);
G1=magG1.*exp(j*faseG1*pi/180);
figure
subplot(211)
plot(wH0,magG0,wH0,magG1)
title('QMF - Respuesta en Frec. LPF G0(w) y HPF G1(w)')
subplot(212)
plot(wH0,faseG0,wH0,faseG1)
xlabel('Frec. [rad/s]')
AA=(H0.*G0+H1.*G1)/2;
figure
plot(wH0,abs(AA))
title('Respuesta en Frecuencia banco QMF')
xlabel('Frec. [rad/s]')
%===============================================
%  Filtros de Reconstruccion Perfecta (CMF)
%===============================================
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('db10'); 
figure
stem(n,Lo_D)
title('CMF - Respuesta al Impulso LPF h0(n)')
figure
stem(n,Hi_D)
title('CMF - Respuesta al Impulso HPF h1(n)')
figure
stem(n,Lo_R)
title('CMF - Respuesta al Impulso LPF g0(n)')
figure
stem(n,Hi_R)
title('CMF - Respuesta al Impulso HPF g1(n)')
numLo_D=Lo_D;
denLo_D=[1 zeros(1,length(Lo_D)-1)];
[magLo_D,faseLo_D]=dbode(numLo_D,denLo_D,1,wH0);
LLo_D=magLo_D.*exp(j*faseLo_D*pi/180);
numLo_R=Lo_R;
denLo_R=[1 zeros(1,length(Lo_R)-1)];
[magLo_R,faseLo_R]=dbode(numLo_R,denLo_R,1,wH0);
LLo_R=magLo_R.*exp(j*faseLo_R*pi/180);
numHi_D=Hi_D;
denHi_D=[1 zeros(1,length(Hi_D)-1)];
[magHi_D,faseHi_D]=dbode(numHi_D,denHi_D,1,wH0);
HHi_D=magHi_D.*exp(j*faseLo_D*pi/180);
numHi_R=Hi_R;
denHi_R=[1 zeros(1,length(Hi_R)-1)];
[magHi_R,faseHi_R]=dbode(numHi_R,denHi_R,1,wH0);
HHi_R=magHi_R.*exp(j*faseLo_R*pi/180);
figure
subplot(211)
plot(wH0,magLo_D,wH0,magHi_D)
title('CMF - Respuesta en Frec. LPF H0(w) y HPF H1(w)')
subplot(212)
plot(wH0,faseLo_D,wH0,faseHi_D)
xlabel('Frec. [rad/s]')
figure
subplot(211)
plot(wH0,magLo_R,wH0,magHi_R)
title('CMF - Respuesta en Frec. LPF G0(w) y HPF G1(w)')
subplot(212)
plot(wH0,faseLo_R,wH0,faseHi_R)
xlabel('Frec. [rad/s]')
AAA=(LLo_D.*LLo_R+HHi_D.*HHi_R)/2;
figure
plot(wH0,abs(AAA))
title('Respuesta en Frecuencia banco CMF')
xlabel('Frec. [rad/s]')
