%Demo_ISI
% El efecto de la interferencia entre símbolos

%DEMO_ISI
% Demostración del efecto de la interferencia entre símbolos
%	Autor: Jesus Ibañez
%   Copyright (c) 2009 G.T.A.S. (Grupo Tratamiento Avanzado de Señal)
%                 DICOM Universidad de Cantabria
%
%	Fecha   : 22 Octubre 2009.
%	Version : 1.0

%===========================================================================
% Notas:
% ----------------------
%===========================================================================

%===========================================================================
% Historia de Modificaciones:
% ----------------------
%	o	Creada y Comprobada bajo MATLAB 2007a 22/10/2009
%   o   Mejoras estéticas 27/11/2012
%===========================================================================


close all

L=500;  % factor de sobremuestreo
b=[1 0 1 0 0 1];
N=length(b)+1;      % número de símbolos
s=[0 2*b-1];        % símbolos polares con un valor nulo al inicio

x=kron(s,ones(1,L));    % señal NRZ polar

%[b1,a1]=butter(4,1/L);
[b1,a1]=cheby1(4,2,1.2/L);
%b1 = fir1(3*L,2/L);a1=1;
y=filter(b1,a1,x);

n=((0:length(y)-1)-L)/L;
figure(1);subplot(211);plot(n,x,'b','linewidth',1);hold on;plot(n,y,'k','linewidth',2);hold off;
line([-1 N-1],[0 0],'LineStyle','--','color','k');
axis([-1 N-1 -2 2]);legend('Señal de Línea','Señal tras filtro Rx');
title('Interferencia Entre Símbolos (ISI)');xlabel('tiempo/T')

pause

colores = [0 0 1;0 0.5 0;1 0 0;0 0.75 0.75; 0.75 0 0.75; 0.75 0.75 0;0.25 0.25 0.25];


for k=2:N
    simbolo=zeros(1,N);
    simbolo(k)=s(k);
    xk=kron(simbolo,ones(1,L));
    yk=filter(b1,a1,xk);
    n_decision(k-1) = find( abs(yk) == max(abs(yk)) );
    subplot(212);plot(n,xk,'color',colores(k-1,:));hold on;plot(n,yk,'linewidth',2,'color',colores(k-1,:));hold on
    xlabel('tiempo/T');axis([-1 N-1 -2 2]);pause
    if k<N
        if k==2
            line(n(n_decision(1))*[1 1],[yk(n_decision(1)) 0],'LineStyle','--','color',colores(1,:));
            text(n(n_decision(1)),-0.2,'{t_0}','color',colores(1,:),'HorizontalAlignment','center','FontSize',16);
        end
        subplot(212);plot(n(n_decision(k-1)),yk(n_decision(k-1)),'linewidth',3,'color',colores(k-1,:),'Marker','o');xlabel('tiempo/T')
        text(n(n_decision(k-1)),1.4*yk(n_decision(k-1)),sprintf('{s[%i]h(t_0)}',k-2),'color',colores(k-1,:),'HorizontalAlignment','center','FontSize',16);pause
    end
end
subplot(212);plot(n,y,'k','linewidth',2);stem(n(n_decision(1:N-2)),y(n_decision(1:N-2)),'k','linewidth',3);axis([-1 N-1 -2 2]);hold off
    
