%parametros
B=1;
hiper=0;
Nt=2500;
L=16;
M=64;
flag=1;
recep=0;
w=[0 2 4 6 8 10 12 14 16 18];

% Empezamos
Es=1;
K=length(w);
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);

load('C:\Documents and Settings\Juan Pablo\Escritorio\pfdc\pfdc OFDM\PRUEBA\canales.mat')
for q=1:10
    h=canal(:,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);
                %empiezo a generar la Gmmse
                A=H*T*F;
                U=SS;
                R=A*U+N;
                A1=A';
                Rrr=(R*R')/size(R,2);
                Rrrinv=pinv(Rrr);
                Gmmse=A1*Rrrinv;
                Uest=Gmmse*R;
                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/100;
        ejey1=ejey1/100;
        ejex2=ejex2+ejex1;
        ejey2=ejey2+ejey1;
end
    ejex2=ejex2/10;
    ejey2=ejey2/10;
    semilogy(ejex,ejey,'ro-')    %canales Aleatorios en rojo
    grid;
    xlabel('Es/No');
    ylabel('Ber');
    
    
    
    hold on
    

    
    
    
    
    
Hada=Hadamard(M);
c=Hada(:,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
for q=1:10
    h=canal(:,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);
                %empiezo a generar la Gmmse
                A=H*T*F;
                U=SS;
                R=A*U+N;
                A1=A';
                Rrr=(R*R')/size(R,2);
                Rrrinv=pinv(Rrr);
                Gmmse=A1*Rrrinv;
                Uest=Gmmse*R;
                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/100;
        ejey1=ejey1/100;
        ejex2=ejex2+ejex1;
        ejey2=ejey2+ejey1;
end
    ejex2=ejex2/10
    ejey2=ejey2/10
    semilogy(ejex,ejey,'b+-')    %canales hadamard en azul
    xlabel('Es/No');
    ylabel('Ber');