%% =================================================================
%% ONDÍCULAS EQUIVALENTES DE FASE MÍNIMA, LINEAL, Y MÁXIMA
%%
%% A partir de tres dipolos elementales de fase mínima y de sus 
%% dipolos equivalentes de fase máxima, se generan tres ondículas 
%% equivalentes de tamaño 7 de fase mínima, lineal, y máxima.
%% Se grafican los correspondientes espectros de amplitud, de fase y 
%% sus autocorrelaciones.
%% =================================================================

clear all; close;

%% =================================================================
%% Dipolos de fase mínima
%% =================================================================

a1 = [1.0; 0.2];
b1 = [1.0;-0.4];
c1 = [1.0; 0.6];

%% =================================================================
%% Dipolos de fase máxima
%% =================================================================

a2 = [ 0.2;1.0];
b2 = [-0.4;1.0];
c2 = [ 0.6;1.0];

%% =================================================================
%% Ondícula de fase mínima 
%% =================================================================

wmin = conv(conv(conv(a1,a1),conv(b1,b1)),conv(c1,c1));

WMINAMP    = abs(fft(wmin));   % espectro de amplitud
WMINFASE   = angle(fft(wmin)); % espectro de fase
autocwmin  = xcorr(wmin);      % autocorrelación 

%% =================================================================
%% Ondícula de fase lineal 
%% =================================================================
 
wlin = conv(conv(conv(a1,a2),conv(b1,b2)),conv(c1,c2));

WLINAMP    = abs(fft(wlin));           % espectro de amplitud
WLINFASE   = unwrap(angle(fft(wlin))); % espectro de fase
autocwlin  = xcorr(wlin);              % autocorrelación 

%% =================================================================
%% Ondícula de fase máxima 
%% =================================================================

wmax = conv(conv(conv(a2,a2),conv(b2,b2)),conv(c2,c2));

WMAXAMP   = abs(fft(wmax));   % espectro de amplitud
WMAXFASE  = angle(fft(wmax)); % espectro de fase
autocwmax = xcorr(wmax);      % autocorrelación


%% =================================================================
%% GRAFICOS
%% =================================================================

N = 7; % longitud de las ondículas
 
% -------------------------------------
% Ondículas en tiempo
% -------------------------------------

yt1 = [0 1];

subplot(3,4,1);
plot((0:N-1),wmin,'b-o');
title('Ondiculas');
ylabel('Fase minima');
set(gca,"ytick",yt1);
axis([0 6 -0.8 1.5]);

subplot(3,4,5);
plot((0:N-1),wlin,'g-o');
ylabel('Fase lineal');
set(gca,"ytick",yt1);
axis([0 6 -0.8 1.5]);

subplot(3,4,9);
plot((0:N-1),wmax,'r-o');
ylabel('Fase maxima');
set(gca,"ytick",yt1);
axis([0 6 -0.8 1.5]);

% -------------------------------------
% Espectros de amplitud
% -------------------------------------

yt2 = [0 1 2];

subplot(3,4,2);
plot((0:N-1),WMINAMP,'b-o');
title('Espectros de amplitud');
set(gca,"ytick",yt2);
axis([0 6 -0.5 2.5]);

subplot(3,4,6);
plot((0:N-1),WLINAMP,'g-o');
set(gca,"ytick",yt2);
axis([0 6 -0.5 2.5]);

subplot(3,4,10);
plot((0:N-1),WMAXAMP,'r-o');
set(gca,"ytick",yt2);
axis([0 6 -0.5 2.5]);

% -------------------------------------
% Espectros de fase
% -------------------------------------

yt3     = [-pi 0 pi];
ytlabel = ["-{/Symbol p}" ; "0" ; "{/Symbol p}"];

subplot(3,4,3);
plot((0:N-1),WMINFASE,'b-o');
title('Espectros de fase');
set(gca,"ytick",yt3,"yticklabel",ytlabel);
axis([0 6 -1.2*pi 1.2*pi]);

subplot(3,4,7);
plot((0:N-1),WLINFASE,'g-o');
%set(gca,"ytick",yt3,"yticklabel",ytlabel);
%axis([0 6 -10.1*pi 0*pi]);

subplot(3,4,11);
plot((0:N-1),WMAXFASE,'r-o');
set(gca,"ytick",yt3,"yticklabel",ytlabel);
axis([0 6 -1.2*pi 1.2*pi]);

% -------------------------------------
% Autocorrelaciones
% -------------------------------------

yt4 = -1:2;

subplot(3,4,4);
plot((1-N:N-1),autocwmin,'b-o');
title('Autocorrelaciones');
set(gca,"ytick",yt4);
axis([-6 6 -1.5 2.5]);

subplot(3,4,8);
plot((1-N:N-1),autocwlin,'g-o');
set(gca,"ytick",yt4);
axis([-6 6 -1.5 2.5]);

subplot(3,4,12);
plot((1-N:N-1),autocwmax,'r-o');
set(gca,"ytick",yt4);
axis([-6 6 -1.5 2.5]);


%% =================================================================
%% Salida
%% =================================================================

print('ond_equiv.eps','-depsc');
