% COMUNICACIONES DIGITALES
% Tema 2
% Problema Igualador Zero Forcing
% Curso 2023-2024

hce=[0.3 1 -0.2 0.1];   % Respuesta al impulso del canal discreto equivalente a igualar
% hce=[0.3*exp(1i*pi/3) 1];
n0=2;   % Tap máximo del canal (empezando por n=1)  

% Cálculo del igualador ZF (entrenamiento)

a=[1 0 0 0 0 0 0 0];    % símbolos de entrenamiento
z=conv(a,hce);  % Señal recibida
%z=awgn(z,20,'measured')

Nc=3;   % Número de coeficientes del igualador
d0=n0-1;   % Retardo del canal
dc=1;    % Retardo del igualador

zh=[z(n0:-1:1) zeros(1,Nc-n0)];
zv=[z(n0:n0+Nc-1)];
Z=toeplitz(zv,zh)

y=[zeros(1,d0+dc-1) a];y=y(1:Nc).'
h=(inv(Z)*y)

%% Recepción de símbolos con y sin igualador

a=[1 -1 1 1 -1 -1 -1 1 -1 1 1 1 -1];    % símbolos transmitidos
z=conv(a,hce);  % símbolos recibidos
y=conv(z,h);    % símbolos recibidos igualados

htotal=conv(hce,h);
[maxim,cursor]=max(abs(htotal));
ISI_max=max(abs([htotal(1:cursor-1) htotal(cursor+1:end)]))

ejey = ceil(max([max(abs(a)) max(abs(z)) max(abs(y))]));
ejex = length(y);

subplot(411);stem(a);title('Símbolos transmitidos');axis([0 ejex -ejey ejey]);grid
subplot(412);stem(z);title('Observables (con ISI y retardo de 1 muestra)');axis([0 ejex -ejey ejey]);grid
subplot(413);stem(y);title('Observables tras igualador (retardo: 2 muestras)');axis([0 ejex -ejey ejey]);grid
subplot(414);stem(0:length(htotal)-1,htotal);title('Respuesta conjunta h_c_e[n] y h[n]');grid

