Nt=2500;
L=16;
M=64;
P=L+M;
w=[0 2 4 6 8 10 12 14 16 18];
B=1;
hiper=0;

%ahora empezamos

Es=1;
K=length(w);
ejex1MMSE=zeros(1,9);
ejey1MMSE=zeros(1,9);
ejex2MMSE=zeros(1,9);
ejey2MMSE=zeros(1,9);
load('C:\Documents and Settings\Juan Pablo\Escritorio\pfdc\pfdc OFDM\PRUEBA\canales.mat')
[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);
Fp=matrizifft(L,P);
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);
            %niOLA=randn(M,Nt);
            %nqOLA=randn(M,Nt);
            %NOLA=sigma.*(niOLA+i.*nqOLA);
            
            
            YY=XX+N;                        %señal que recibo
            
             %MMSE
             
             A=H*T*F;
                U=SS;
                %R=A*U+N;
                R=YY;
                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);
                ejexMMSE(i)=snr;
                ejeyMMSE(i)=ber;
            i=i+1;
           
        end
    
            
            ejex1MMSE=ejex1MMSE+ejexMMSE;
            ejey1MMSE=ejey1MMSE+ejeyMMSE;
            i=1;
    end
    
    ejex1MMSE=ejex1MMSE/60;
    ejey1MMSE=ejey1MMSE/60;
    ejex2MMSE=ejex2MMSE+ejex1MMSE;
    ejey2MMSE=ejey2MMSE+ejey1MMSE;
end
    
    ejex2MMSE=ejex2MMSE/10
    ejey2MMSE=ejey2MMSE/10
    semilogy(ejex2MMSE,ejey2MMSE,'bd-')   %un usuario en azul
    grid;
    xlabel('Es/No');
    ylabel('Ber');
    
    
    
    hold on
    
    
  % DOS USUARIOS
  
  ejex1MMSE=zeros(1,9);
ejey1MMSE=zeros(1,9);
ejex2MMSE=zeros(1,9);
ejey2MMSE=zeros(1,9);
    [S1,s]=generasenal(Nt,M,hiper);
    [S2,s]=generasenal(Nt,M,hiper);
c1=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c1));           %hago que el codigo tenga energia unidad
c1=c1/longitud;
c2=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c2));           %hago que el codigo tenga energia unidad
c2=c2/longitud;
for k=1:Nt
    SS1(:,k)=c1*S1(1,k);                %genero una matriz con los simbolos codificados que voy a ttir
end
for r=1:Nt
    SS2(:,r)=c2*S2(1,r);                %genero una matriz con los simbolos codificados que voy a ttir
end
i=1;

F=matrizifft(L,M);
Fp=matrizifft(L,P);
T=matrizTzp(L,M);
for q=1:10
    h=canal(:,q)
    q
    H=matrizcanalzp(h,L,M);
    XX=H*T*F*(SS1+SS2);                    %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);
            %niOLA=randn(M,Nt);
            %nqOLA=randn(M,Nt);
            %NOLA=sigma.*(niOLA+i.*nqOLA);
            
            
            YY=XX+N;                        %señal que recibo
            
             %MMSE
             
             A=H*T*F;
                U=SS1;
                %R=A*U+N;
                R=YY;
                A1=A';
                Rrr=(R*R')/size(R,2);
                Rrrinv=pinv(Rrr);
                Gmmse=A1*Rrrinv;
                Uest=Gmmse*R;
                CC=c1'*Uest;
                ber=calculaber(S1(1,:),CC);
                ejexMMSE(i)=snr;
                ejeyMMSE(i)=ber;
            i=i+1;
           
        end
    

            ejex1MMSE=ejex1MMSE+ejexMMSE;
            ejey1MMSE=ejey1MMSE+ejeyMMSE;
            i=1;
    end

    ejex1MMSE=ejex1MMSE/60;
    ejey1MMSE=ejey1MMSE/60;
    ejex2MMSE=ejex2MMSE+ejex1MMSE;
    ejey2MMSE=ejey2MMSE+ejey1MMSE;
end

    ejex2MMSE=ejex2MMSE/10
    ejey2MMSE=ejey2MMSE/10
    semilogy(ejex2MMSE,ejey2MMSE,'gh-')  % dos usuarios en verde
    grid;
    xlabel('Es/No');
    ylabel('Ber');
    
    
    hold on
    
    %OCHO USUARIOS
    
 ejex1MMSE=zeros(1,9);
ejey1MMSE=zeros(1,9);
ejex2MMSE=zeros(1,9);
ejey2MMSE=zeros(1,9);

[S1,s]=generasenal(Nt,M,hiper);
[S2,s]=generasenal(Nt,M,hiper);
[S3,s]=generasenal(Nt,M,hiper);
[S4,s]=generasenal(Nt,M,hiper);
[S5,s]=generasenal(Nt,M,hiper);
[S6,s]=generasenal(Nt,M,hiper);
[S7,s]=generasenal(Nt,M,hiper);
[S8,s]=generasenal(Nt,M,hiper);
c1=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c1));           %hago que el codigo tenga energia unidad
c1=c1/longitud;
c2=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c2));           %hago que el codigo tenga energia unidad
c2=c2/longitud;
c3=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c3));           %hago que el codigo tenga energia unidad
c3=c3/longitud;
c4=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c4));           %hago que el codigo tenga energia unidad
c4=c4/longitud;
c5=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c5));           %hago que el codigo tenga energia unidad
c5=c5/longitud;
c6=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c6));           %hago que el codigo tenga energia unidad
c6=c6/longitud;
c7=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c7));           %hago que el codigo tenga energia unidad
c7=c7/longitud;
c8=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c8));           %hago que el codigo tenga energia unidad
c8=c8/longitud;

for k=1:Nt
    SS1(:,k)=c1*S1(1,k);                %genero una matriz con los simbolos codificados que voy a ttir
end
for r=1:Nt
    SS2(:,r)=c2*S2(1,r);                %genero una matriz con los simbolos codificados que voy a ttir
end

for a=1:Nt
    SS3(:,a)=c3*S3(1,a);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for b=1:Nt
    SS4(:,b)=c4*S4(1,b);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for c=1:Nt
    SS5(:,c)=c5*S5(1,c);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for d=1:Nt
    SS6(:,d)=c6*S6(1,d);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for f=1:Nt
    SS7(:,f)=c7*S7(1,f);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for z=1:Nt
    SS8(:,z)=c8*S8(1,z);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
i=1;

F=matrizifft(L,M);
Fp=matrizifft(L,P);
T=matrizTzp(L,M);
for q=1:10
    h=canal(:,q)
    q
    H=matrizcanalzp(h,L,M);
    XX=H*T*F*(SS1+SS2+SS3+SS4+SS5+SS6+SS7+SS8);                    %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);
            %niOLA=randn(M,Nt);
            %nqOLA=randn(M,Nt);
            %NOLA=sigma.*(niOLA+i.*nqOLA);
            
            
            YY=XX+N;                        %señal que recibo
             %MMSE
             
             A=H*T*F;
                U=SS1;
                %R=A*U+N;
                R=YY;
                A1=A';
                Rrr=(R*R')/size(R,2);
                Rrrinv=pinv(Rrr);
                Gmmse=A1*Rrrinv;
                Uest=Gmmse*R;
                CC=c1'*Uest;
                ber=calculaber(S1(1,:),CC);
                ejexMMSE(i)=snr;
                ejeyMMSE(i)=ber;
            i=i+1;
           
        end
    

            ejex1MMSE=ejex1MMSE+ejexMMSE;
            ejey1MMSE=ejey1MMSE+ejeyMMSE;
            i=1;
    end
    ejex1MMSE=ejex1MMSE/60;
    ejey1MMSE=ejey1MMSE/60;
    ejex2MMSE=ejex2MMSE+ejex1MMSE;
    ejey2MMSE=ejey2MMSE+ejey1MMSE;
end
    
    ejex2MMSE=ejex2MMSE/10
    ejey2MMSE=ejey2MMSE/10
    semilogy(ejex2MMSE,ejey2MMSE,'ro-')   % en rojo 8 usuarios
    grid;
    xlabel('Es/No');
    ylabel('Ber');
    
    
    
    hold on
    
    
    
    
    % 64 Usuarios
    
   
    
    
    ejex1MMSE=zeros(1,9);
ejey1MMSE=zeros(1,9);
ejex2MMSE=zeros(1,9);
ejey2MMSE=zeros(1,9);

[S1,s]=generasenal(Nt,M,hiper);
[S2,s]=generasenal(Nt,M,hiper);
[S3,s]=generasenal(Nt,M,hiper);
[S4,s]=generasenal(Nt,M,hiper);
[S5,s]=generasenal(Nt,M,hiper);
[S6,s]=generasenal(Nt,M,hiper);
[S7,s]=generasenal(Nt,M,hiper);
[S8,s]=generasenal(Nt,M,hiper);

[S9,s]=generasenal(Nt,M,hiper);
[S10,s]=generasenal(Nt,M,hiper);
[S11,s]=generasenal(Nt,M,hiper);
[S12,s]=generasenal(Nt,M,hiper);
[S13,s]=generasenal(Nt,M,hiper);
[S14,s]=generasenal(Nt,M,hiper);
[S15,s]=generasenal(Nt,M,hiper);
[S16,s]=generasenal(Nt,M,hiper);

[S17,s]=generasenal(Nt,M,hiper);
[S18,s]=generasenal(Nt,M,hiper);
[S19,s]=generasenal(Nt,M,hiper);
[S20,s]=generasenal(Nt,M,hiper);
[S21,s]=generasenal(Nt,M,hiper);
[S22,s]=generasenal(Nt,M,hiper);
[S23,s]=generasenal(Nt,M,hiper);
[S24,s]=generasenal(Nt,M,hiper);

[S25,s]=generasenal(Nt,M,hiper);
[S26,s]=generasenal(Nt,M,hiper);
[S27,s]=generasenal(Nt,M,hiper);
[S28,s]=generasenal(Nt,M,hiper);
[S29,s]=generasenal(Nt,M,hiper);
[S30,s]=generasenal(Nt,M,hiper);
[S31,s]=generasenal(Nt,M,hiper);
[S32,s]=generasenal(Nt,M,hiper);

[S33,s]=generasenal(Nt,M,hiper);
[S34,s]=generasenal(Nt,M,hiper);
[S35,s]=generasenal(Nt,M,hiper);
[S36,s]=generasenal(Nt,M,hiper);
[S37,s]=generasenal(Nt,M,hiper);
[S38,s]=generasenal(Nt,M,hiper);
[S39,s]=generasenal(Nt,M,hiper);
[S40,s]=generasenal(Nt,M,hiper);

[S41,s]=generasenal(Nt,M,hiper);
[S42,s]=generasenal(Nt,M,hiper);
[S43,s]=generasenal(Nt,M,hiper);
[S44,s]=generasenal(Nt,M,hiper);
[S45,s]=generasenal(Nt,M,hiper);
[S46,s]=generasenal(Nt,M,hiper);
[S47,s]=generasenal(Nt,M,hiper);
[S48,s]=generasenal(Nt,M,hiper);

[S49,s]=generasenal(Nt,M,hiper);
[S50,s]=generasenal(Nt,M,hiper);
[S51,s]=generasenal(Nt,M,hiper);
[S52,s]=generasenal(Nt,M,hiper);
[S53,s]=generasenal(Nt,M,hiper);
[S54,s]=generasenal(Nt,M,hiper);
[S55,s]=generasenal(Nt,M,hiper);
[S56,s]=generasenal(Nt,M,hiper);

[S57,s]=generasenal(Nt,M,hiper);
[S58,s]=generasenal(Nt,M,hiper);
[S59,s]=generasenal(Nt,M,hiper);
[S60,s]=generasenal(Nt,M,hiper);
[S61,s]=generasenal(Nt,M,hiper);
[S62,s]=generasenal(Nt,M,hiper);
[S63,s]=generasenal(Nt,M,hiper);
[S64,s]=generasenal(Nt,M,hiper);



c1=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c1));           %hago que el codigo tenga energia unidad
c1=c1/longitud;
c2=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c2));           %hago que el codigo tenga energia unidad
c2=c2/longitud;
c3=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c3));           %hago que el codigo tenga energia unidad
c3=c3/longitud;
c4=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c4));           %hago que el codigo tenga energia unidad
c4=c4/longitud;
c5=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c5));           %hago que el codigo tenga energia unidad
c5=c5/longitud;
c6=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c6));           %hago que el codigo tenga energia unidad
c6=c6/longitud;
c7=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c7));           %hago que el codigo tenga energia unidad
c7=c7/longitud;
c8=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c8));           %hago que el codigo tenga energia unidad
c8=c8/longitud;

c9=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c9));           %hago que el codigo tenga energia unidad
c9=c9/longitud;
c10=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c10));           %hago que el codigo tenga energia unidad
c10=c10/longitud;
c11=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c11));           %hago que el codigo tenga energia unidad
c11=c11/longitud;
c12=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c12));           %hago que el codigo tenga energia unidad
c12=c12/longitud;
c13=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c13));           %hago que el codigo tenga energia unidad
c13=c13/longitud;
c14=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c14));           %hago que el codigo tenga energia unidad
c14=c14/longitud;
c15=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c15));           %hago que el codigo tenga energia unidad
c15=c15/longitud;
c16=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c16));           %hago que el codigo tenga energia unidad
c16=c16/longitud;


c17=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c17));           %hago que el codigo tenga energia unidad
c17=c17/longitud;
c18=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c18));           %hago que el codigo tenga energia unidad
c18=c18/longitud;
c19=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c19));           %hago que el codigo tenga energia unidad
c19=c19/longitud;
c20=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(204));           %hago que el codigo tenga energia unidad
c20=c20/longitud;
c21=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c21));           %hago que el codigo tenga energia unidad
c21=c21/longitud;
c22=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c22));           %hago que el codigo tenga energia unidad
c22=c22/longitud;
c23=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c23));           %hago que el codigo tenga energia unidad
c23=c23/longitud;
c24=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c24));           %hago que el codigo tenga energia unidad
c24=c24/longitud;

c25=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c25));           %hago que el codigo tenga energia unidad
c25=c25/longitud;
c26=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c26));           %hago que el codigo tenga energia unidad
c26=c26/longitud;
c27=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c27));           %hago que el codigo tenga energia unidad
c27=c27/longitud;
c28=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c28));           %hago que el codigo tenga energia unidad
c28=c28/longitud;
c29=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c29));           %hago que el codigo tenga energia unidad
c29=c29/longitud;
c30=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c30));           %hago que el codigo tenga energia unidad
c30=c30/longitud;
c31=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c31));           %hago que el codigo tenga energia unidad
c31=c31/longitud;
c32=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c32));           %hago que el codigo tenga energia unidad
c32=c32/longitud;



c33=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c33));           %hago que el codigo tenga energia unidad
c33=c33/longitud;
c34=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c34));           %hago que el codigo tenga energia unidad
c34=c34/longitud;
c35=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c35));           %hago que el codigo tenga energia unidad
c35=c35/longitud;
c36=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c36));           %hago que el codigo tenga energia unidad
c36=c36/longitud;
c37=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c37));           %hago que el codigo tenga energia unidad
c37=c37/longitud;
c38=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c38));           %hago que el codigo tenga energia unidad
c38=c38/longitud;
c39=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c39));           %hago que el codigo tenga energia unidad
c39=c39/longitud;
c40=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c40));           %hago que el codigo tenga energia unidad
c40=c40/longitud;

c41=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c41));           %hago que el codigo tenga energia unidad
c41=c41/longitud;
c42=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c42));           %hago que el codigo tenga energia unidad
c42=c42/longitud;
c43=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c43));           %hago que el codigo tenga energia unidad
c43=c43/longitud;
c44=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c44));           %hago que el codigo tenga energia unidad
c44=c44/longitud;
c45=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c45));           %hago que el codigo tenga energia unidad
c45=c45/longitud;
c46=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c46));           %hago que el codigo tenga energia unidad
c46=c46/longitud;
c47=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c47));           %hago que el codigo tenga energia unidad
c47=c47/longitud;
c48=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c48));           %hago que el codigo tenga energia unidad
c48=c48/longitud;


c49=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c49));           %hago que el codigo tenga energia unidad
c49=c49/longitud;
c50=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c50));           %hago que el codigo tenga energia unidad
c50=c50/longitud;
c51=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c51));           %hago que el codigo tenga energia unidad
c51=c51/longitud;
c52=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c52));           %hago que el codigo tenga energia unidad
c52=c52/longitud;
c53=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c53));           %hago que el codigo tenga energia unidad
c53=c53/longitud;
c54=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c54));           %hago que el codigo tenga energia unidad
c54=c54/longitud;
c55=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c55));           %hago que el codigo tenga energia unidad
c55=c55/longitud;
c56=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c56));           %hago que el codigo tenga energia unidad
c56=c56/longitud;

c57=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c57));           %hago que el codigo tenga energia unidad
c57=c57/longitud;
c58=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c58));           %hago que el codigo tenga energia unidad
c58=c58/longitud;
c59=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c59));           %hago que el codigo tenga energia unidad
c59=c59/longitud;
c60=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c60));           %hago que el codigo tenga energia unidad
c60=c60/longitud;
c61=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c61));           %hago que el codigo tenga energia unidad
c61=c61/longitud;
c62=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c62));           %hago que el codigo tenga energia unidad
c62=c62/longitud;
c63=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c63));           %hago que el codigo tenga energia unidad
c63=c63/longitud;
c64=sign(randn(M,1));                         % genero el codigo
longitud=sqrt(length(c64));           %hago que el codigo tenga energia unidad
c64=c64/longitud;




for k=1:Nt
    SS1(:,k)=c1*S1(1,k);                %genero una matriz con los simbolos codificados que voy a ttir
end
for r=1:Nt
    SS2(:,r)=c2*S2(1,r);                %genero una matriz con los simbolos codificados que voy a ttir
end

for a=1:Nt
    SS3(:,a)=c3*S3(1,a);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for b=1:Nt
    SS4(:,b)=c4*S4(1,b);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for c=1:Nt
    SS5(:,c)=c5*S5(1,c);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for d=1:Nt
    SS6(:,d)=c6*S6(1,d);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for f=1:Nt
    SS7(:,f)=c7*S7(1,f);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for z=1:Nt
    SS8(:,z)=c8*S8(1,z);
                    %genero una matriz con los simbolos codificados que voy a ttir
end



for k=1:Nt
    SS9(:,k)=c9*S9(1,k);                %genero una matriz con los simbolos codificados que voy a ttir
end
for r=1:Nt
    SS10(:,r)=c10*S10(1,r);                %genero una matriz con los simbolos codificados que voy a ttir
end

for a=1:Nt
    SS11(:,a)=c11*S11(1,a);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for b=1:Nt
    SS12(:,b)=c12*S12(1,b);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for c=1:Nt
    SS13(:,c)=c13*S13(1,c);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for d=1:Nt
    SS14(:,d)=c14*S14(1,d);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for f=1:Nt
    SS15(:,f)=c15*S15(1,f);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for z=1:Nt
    SS16(:,z)=c16*S16(1,z);
                    %genero una matriz con los simbolos codificados que voy a ttir
end




for k=1:Nt
    SS17(:,k)=c17*S17(1,k);                %genero una matriz con los simbolos codificados que voy a ttir
end
for r=1:Nt
    SS18(:,r)=c18*S18(1,r);                %genero una matriz con los simbolos codificados que voy a ttir
end

for a=1:Nt
    SS19(:,a)=c19*S19(1,a);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for b=1:Nt
    SS20(:,b)=c20*S20(1,b);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for c=1:Nt
    SS21(:,c)=c21*S21(1,c);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for d=1:Nt
    SS22(:,d)=c22*S22(1,d);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for f=1:Nt
    SS23(:,f)=c23*S23(1,f);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for z=1:Nt
    SS24(:,z)=c24*S24(1,z);
                    %genero una matriz con los simbolos codificados que voy a ttir
end





for k=1:Nt
    SS25(:,k)=c25*S25(1,k);                %genero una matriz con los simbolos codificados que voy a ttir
end
for r=1:Nt
    SS26(:,r)=c26*S26(1,r);                %genero una matriz con los simbolos codificados que voy a ttir
end

for a=1:Nt
    SS27(:,a)=c27*S27(1,a);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for b=1:Nt
    SS28(:,b)=c28*S28(1,b);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for c=1:Nt
    SS29(:,c)=c29*S29(1,c);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for d=1:Nt
    SS30(:,d)=c30*S30(1,d);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for f=1:Nt
    SS31(:,f)=c31*S31(1,f);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for z=1:Nt
    SS32(:,z)=c32*S32(1,z);
                    %genero una matriz con los simbolos codificados que voy a ttir
end




for k=1:Nt
    SS33(:,k)=c33*S33(1,k);                %genero una matriz con los simbolos codificados que voy a ttir
end
for r=1:Nt
    SS34(:,r)=c34*S34(1,r);                %genero una matriz con los simbolos codificados que voy a ttir
end

for a=1:Nt
    SS35(:,a)=c35*S35(1,a);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for b=1:Nt
    SS36(:,b)=c36*S36(1,b);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for c=1:Nt
    SS37(:,c)=c37*S37(1,c);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for d=1:Nt
    SS38(:,d)=c38*S38(1,d);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for f=1:Nt
    SS39(:,f)=c39*S39(1,f);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for z=1:Nt
    SS40(:,z)=c40*S40(1,z);
                    %genero una matriz con los simbolos codificados que voy a ttir
end




for k=1:Nt
    SS41(:,k)=c41*S41(1,k);                %genero una matriz con los simbolos codificados que voy a ttir
end
for r=1:Nt
    SS42(:,r)=c42*S42(1,r);                %genero una matriz con los simbolos codificados que voy a ttir
end

for a=1:Nt
    SS43(:,a)=c43*S43(1,a);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for b=1:Nt
    SS44(:,b)=c44*S44(1,b);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for c=1:Nt
    SS45(:,c)=c45*S45(1,c);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for d=1:Nt
    SS46(:,d)=c46*S46(1,d);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for f=1:Nt
    SS47(:,f)=c47*S47(1,f);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for z=1:Nt
    SS48(:,z)=c48*S48(1,z);
                    %genero una matriz con los simbolos codificados que voy a ttir
end





for k=1:Nt
    SS49(:,k)=c49*S49(1,k);                %genero una matriz con los simbolos codificados que voy a ttir
end
for r=1:Nt
    SS50(:,r)=c50*S50(1,r);                %genero una matriz con los simbolos codificados que voy a ttir
end

for a=1:Nt
    SS51(:,a)=c51*S51(1,a);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for b=1:Nt
    SS52(:,b)=c52*S52(1,b);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for c=1:Nt
    SS53(:,c)=c53*S53(1,c);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for d=1:Nt
    SS54(:,d)=c54*S54(1,d);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for f=1:Nt
    SS55(:,f)=c55*S55(1,f);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for z=1:Nt
    SS56(:,z)=c56*S56(1,z);
                    %genero una matriz con los simbolos codificados que voy a ttir
end




for k=1:Nt
    SS57(:,k)=c57*S57(1,k);                %genero una matriz con los simbolos codificados que voy a ttir
end
for r=1:Nt
    SS58(:,r)=c58*S58(1,r);                %genero una matriz con los simbolos codificados que voy a ttir
end

for a=1:Nt
    SS59(:,a)=c59*S59(1,a);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for b=1:Nt
    SS60(:,b)=c60*S60(1,b);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for c=1:Nt
    SS61(:,c)=c61*S61(1,c);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for d=1:Nt
    SS62(:,d)=c62*S62(1,d);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for f=1:Nt
    SS63(:,f)=c63*S63(1,f);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for z=1:Nt
    SS64(:,z)=c64*S64(1,z);
                    %genero una matriz con los simbolos codificados que voy a ttir
end


i=1;

F=matrizifft(L,M);
Fp=matrizifft(L,P);
T=matrizTzp(L,M);
for q=1:10
    h=canal(:,q)
    q
    H=matrizcanalzp(h,L,M);
    XX=H*T*F*(SS1+SS2+SS3+SS4+SS5+SS6+SS7+SS8+SS9+SS20+SS11+SS12+SS13+SS14+SS15+SS16+SS17+SS18+SS19+SS20+SS21+SS22+SS23+SS24+SS25+SS26+SS27+SS28+SS29+SS30+SS31+SS32+SS33+SS34+SS35+SS36+SS37+SS38+SS39+SS40+SS41+SS42+SS43+SS44+SS45+SS46+SS47+SS48+SS49+SS50+SS51+SS52+SS53+SS54+SS55+SS56+SS57+SS58+SS59+SS60+SS61+SS62+SS63+SS64);                    %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);
            %niOLA=randn(M,Nt);
            %nqOLA=randn(M,Nt);
            %NOLA=sigma.*(niOLA+i.*nqOLA);
            
            
            YY=XX+N;                        %señal que recibo
            
             %MMSE
             
             A=H*T*F;
                U=SS1;
                %R=A*U+N;
                R=YY;
                A1=A';
                Rrr=(R*R')/size(R,2);
                Rrrinv=pinv(Rrr);
                Gmmse=A1*Rrrinv;
                Uest=Gmmse*R;
                CC=c1'*Uest;
                ber=calculaber(S1(1,:),CC);
                ejexMMSE(i)=snr;
                ejeyMMSE(i)=ber;
            i=i+1;
           
        end
    
           
            ejex1MMSE=ejex1MMSE+ejexMMSE;
            ejey1MMSE=ejey1MMSE+ejeyMMSE;
            i=1;
    end
    ejex1MMSE=ejex1MMSE/60;
    ejey1MMSE=ejey1MMSE/60;
    ejex2MMSE=ejex2MMSE+ejex1MMSE;
    ejey2MMSE=ejey2MMSE+ejey1MMSE;
end
 
    ejex2MMSE=ejex2MMSE/10
    ejey2MMSE=ejey2MMSE/10
    semilogy(ejex2MMSE,ejey2MMSE,'kp-')   %en negro 64 usuarios
    grid;
    xlabel('Es/No');
    ylabel('Ber');
    
    
    
    
    
    
  
    
    
    