%% =================================================================
%% COMPORTAMIENTO EN FRECUENCIA DE DIFERENTES OPERADORES 
%% VS. DIFERENCIADOR EXACTO.
%% =================================================================

clear all; %  Limpiar todas las variables definidas

% Defino algunas opciones por defecto
set (0, 'DefaultAxesFontname', 'Times New Roman') 
set (0, 'DefaultAxesFontsize', 12) 
set (0, 'DefaultTextFontname', 'Times New Roman') 
set (0, 'DefaulttextFontsize', 12)

% Definimos el vector frecuencia angular digital w:
w = (0:pi/100:pi-pi/100);

% Diferenciador exacto H(w) = i*w
Amp_ex = w ;

% Primera diferencia hacia adelante: H(w) = exp(i*w) - 1 
Amp_ad  = sqrt(2*(1-cos(w))) ;

% Diferencia central: H(w) = i*sin(w)
Amp_ce = sin(w) ;

% Tranformación bilineal: H(w) = 2*i*tg/w/2)
Amp_bi = 2*tan(w/2) ;

%___________________________________________________________________

% Graficamos los vlaores absolutos de los espectros de amplitud

figure(1)
clf;
plot(w,Amp_ex,'k;Dif. exacto;',
     w,Amp_ad,'b;Dif. adelante;',
     w,Amp_ce,'g;Dif. central;',
     w,Amp_bi,'r;T. bilineal;')
legend('location','northwest')
axis([0 pi 0 pi])
title('Espectros de diferentes operadores de diferenciacion')
xlabel('\omega');
ylabel('|H(\omega)|');
xt      = 0:pi:pi;
xtlabel = [ '0' ; '{/Symbol p}' ];
yt      = 0:pi:pi;
ytlabel = [ '0' ; '{/Symbol p}' ];
set(gca,'xtick',xt,'xticklabel',xtlabel,
        'ytick',yt,'yticklabel',ytlabel);

% Guardamos el gráfico de la pantalla en un postscript
print('diferenciadores_a.eps','-depsc','-S800,600'); 

%___________________________________________________________________

% Graficamos los valores espectros de amplitud relativos al
% diferenciador perfecto en decibeles

AmpdB_ex = 20*log(Amp_ex./w);
AmpdB_ad = 20*log(Amp_ad./w);
AmpdB_ce = 20*log(Amp_ce./w);
AmpdB_bi = 20*log(Amp_bi./w);

figure(2)
clf;
plot(w,AmpdB_ex,'k;Dif. exacto;',
     w,AmpdB_ad,'b;Dif. adelante;',
     w,AmpdB_ce,'g;Dif. central;',
     w,AmpdB_bi,'r;T. bilineal;')
legend('location','northwest')
axis([0 pi -50 50])
title('Espectros de diferentes operadores de diferenciacion en dB')
xlabel('\omega');
ylabel('|H(\omega)/\omega| [dB]');
xt      = 0:pi:pi;
xtlabel = [ '0' ; '{/Symbol p}' ];
set(gca,'xtick',xt,'xticklabel',xtlabel)

% Guardamos el gráfico de la pantalla en un postscript
print('diferenciadores_b.eps','-depsc','-S800,600'); 

