%% Este archivo genera las matrices necesarias para la generacion del
%% receptor MMSE ZP normal en el caso mas simple
%%% es decir ttiendo un solo simbolo a la vez y usando codigos aleatorios
%parametros



%parametros
B=1;
hiper=0;
Nt=2000;
L=16;
M=64;
flag=1;
recep=0;
w=[0 2 4 6 8 10 12 14 16 18];
load('C:\Documents and Settings\Juan Pablo\Escritorio\pfdc\pfdc OFDM\PRUEBA\canales.mat')
    
% Empezamos
Es=1;
K=length(w);
load('C:\Documents and Settings\Juan Pablo\Escritorio\pfdc\pfdc OFDM\PRUEBA\canales.mat')
ejex1=zeros(1,9);
ejey1=zeros(1,9);
ejex2=zeros(1,9);
ejey2=zeros(1,9);
[S,s]=generasenal(Nt,M,hiper);
c=sign(randn(M,1));                 % genero el codigo
longitud=sqrt(length(c));           %hago que el codigo tenga energia unidad
c=c/longitud;
for k=1:Nt
    SS(:,k)=c*S(1,k);                %genero una matriz con los simbolos codificados que voy a ttir
end

i=1;
F=matrizifft(L,M);
T=matrizTzp(L,M);

for q=1:10
    h=canal(:,q)
    q
    H=matrizcanalzp(h,L,M);
    XX=H*T*F*SS;                            %señal que ttito
for g=1:60
    for snr=0:5:40
                No=1/10^(snr/10);
                P=L+M;
                sigma=sqrt(No/2);          
                ni=randn(P,Nt);
                nq=randn(P,Nt);
                N=sigma.*(ni+i.*nq);
                YY=XX+N;  
                %ahora empiezo a generar DELTA y U
                Ho=H*T;
                A=Ho(M+1:P,:);
                B=Ho(1:L,:);
                C=Ho(L+1:M,:);
                aux=A+B;
                H1=[aux;C];      %h1 es H con gorrito del articulo
                DELTA=F'*H1*F;
                U=SS;
                %Y=DELTA*U+N;
                Y=YY(1:M,:)+[YY(M+1:P,:);zeros(M-L,Nt)];
                
                Y=F'*Y;
                DELTA1=DELTA';     %comienza el calculo de Gmmse
                Ryy=(Y*Y')/size(Y,2);
                diagonal=diag(Ryy);
                diagonal1=1./diagonal;
                Ryyinv=diag(diagonal1);
                Gmmse=DELTA1*Ryyinv;
                Uest=Gmmse*Y;
                CC=c'*Uest;
                ber=calculaber(S(1,:),CC);
                ejex(i)=snr;
                ejey(i)=ber;
                i=i+1;
    end
        ejex1=ejex1+ejex;
        ejey1=ejey1+ejey;
        i=1;
end  
        ejex1=ejex1/60;
        ejey1=ejey1/60;
        ejex2=ejex2+ejex1;
        ejey2=ejey2+ejey1;

end

        ejex2=ejex2/10
        ejey2=ejey2/10
 	semilogy(ejex2,ejey2,'cp-')
 	grid;
 	xlabel('Es/No');
 	ylabel('Ber');

            
            
            
            
            
            
            




