 %%% Este seria el sistema para OFDM-CDMA usando ZP en el caso mas simple
%%% es decir ttiendo un solo simbolo a la vez y usando codigos aleatorios
%parametros

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

%ahora empezamos

Es=1;
K=length(w);
ejex1ZF=zeros(1,9);
ejey1ZF=zeros(1,9);
ejex2ZF=zeros(1,9);
ejey2ZF=zeros(1,9);
ejex1FAST=zeros(1,9);
ejey1FAST=zeros(1,9);
ejex2FAST=zeros(1,9);
ejey2FAST=zeros(1,9);
ejex1OLA=zeros(1,9);
ejey1OLA=zeros(1,9);
ejex2OLA=zeros(1,9);
ejey2OLA=zeros(1,9);
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')
Hada=Hadamard(M);
Hada=Hada(1:M/B,:);
[S1,s]=generasenal(Nt,M,hiper);
C1=Hada(:,1);
I=eye(B);
c1=kron(I,C1); 
longitud=sqrt(length(c1));           %hago que el codigo tenga energia unidad
c1=c1/longitud;
[S2,s]=generasenal(Nt,M,hiper);
C2=Hada(:,2);
I=eye(B);
c2=kron(I,C2); 
longitud=sqrt(length(c2));           %hago que el codigo tenga energia unidad
c2=c2/longitud;
[S3,s]=generasenal(Nt,M,hiper);
C3=Hada(:,3);
I=eye(B);
c3=kron(I,C3); 
longitud=sqrt(length(c3));           %hago que el codigo tenga energia unidad
c3=c3/longitud;
[S4,s]=generasenal(Nt,M,hiper);
C4=Hada(:,4);
I=eye(B);
c4=kron(I,C4); 
longitud=sqrt(length(c4));           %hago que el codigo tenga energia unidad
c4=c4/longitud;
[S5,s]=generasenal(Nt,M,hiper);
C5=Hada(:,5);
I=eye(B);
c5=kron(I,C5); 
longitud=sqrt(length(c5));           %hago que el codigo tenga energia unidad
c5=c5/longitud;
[S6,s]=generasenal(Nt,M,hiper);
C6=Hada(:,6);
I=eye(B);
c6=kron(I,C6); 
longitud=sqrt(length(c6));           %hago que el codigo tenga energia unidad
c6=c6/longitud;
[S7,s]=generasenal(Nt,M,hiper);
C7=Hada(:,7);
I=eye(B);
c7=kron(I,C7); 
longitud=sqrt(length(c7));           %hago que el codigo tenga energia unidad
c7=c7/longitud;
[S8,s]=generasenal(Nt,M,hiper);
C8=Hada(:,8);
I=eye(B);
c8=kron(I,C8); 
longitud=sqrt(length(c8));           %hago que el codigo tenga energia unidad
c8=c8/longitud;



[S9,s]=generasenal(Nt,M,hiper);
C9=Hada(:,9);
I=eye(B);
c9=kron(I,C9); 
longitud=sqrt(length(c9));           %hago que el codigo tenga energia unidad
c9=c9/longitud;
[S10,s]=generasenal(Nt,M,hiper);
C10=Hada(:,10);
I=eye(B);
c10=kron(I,C10); 
longitud=sqrt(length(c10));           %hago que el codigo tenga energia unidad
c10=c10/longitud;
[S11,s]=generasenal(Nt,M,hiper);
C11=Hada(:,11);
I=eye(B);
c11=kron(I,C11); 
longitud=sqrt(length(c11));           %hago que el codigo tenga energia unidad
c11=c11/longitud;
[S12,s]=generasenal(Nt,M,hiper);
C12=Hada(:,12);
I=eye(B);
c12=kron(I,C12); 
longitud=sqrt(length(c12));           %hago que el codigo tenga energia unidad
c12=c12/longitud;
[S13,s]=generasenal(Nt,M,hiper);
C13=Hada(:,13);
I=eye(B);
c13=kron(I,C13); 
longitud=sqrt(length(c13));           %hago que el codigo tenga energia unidad
c13=c13/longitud;
[S14,s]=generasenal(Nt,M,hiper);
C14=Hada(:,14);
I=eye(B);
c14=kron(I,C14); 
longitud=sqrt(length(c14));           %hago que el codigo tenga energia unidad
c14=c14/longitud;
[S15,s]=generasenal(Nt,M,hiper);
C15=Hada(:,15);
I=eye(B);
c15=kron(I,C15); 
longitud=sqrt(length(c15));           %hago que el codigo tenga energia unidad
c15=c15/longitud;
[S16,s]=generasenal(Nt,M,hiper);
C16=Hada(:,16);
I=eye(B);
c16=kron(I,C16); 
longitud=sqrt(length(c16));           %hago que el codigo tenga energia unidad
c16=c16/longitud;





[S17,s]=generasenal(Nt,M,hiper);
C17=Hada(:,17);
I=eye(B);
c17=kron(I,C17); 
longitud=sqrt(length(c17));           %hago que el codigo tenga energia unidad
c17=c17/longitud;
[S18,s]=generasenal(Nt,M,hiper);
C18=Hada(:,18);
I=eye(B);
c18=kron(I,C18); 
longitud=sqrt(length(c18));           %hago que el codigo tenga energia unidad
c18=c18/longitud;
[S19,s]=generasenal(Nt,M,hiper);
C19=Hada(:,19);
I=eye(B);
c19=kron(I,C19); 
longitud=sqrt(length(c19));           %hago que el codigo tenga energia unidad
c19=c19/longitud;
[S20,s]=generasenal(Nt,M,hiper);
C20=Hada(:,20);
I=eye(B);
c20=kron(I,C20); 
longitud=sqrt(length(c20));           %hago que el codigo tenga energia unidad
c20=c20/longitud;
[S21,s]=generasenal(Nt,M,hiper);
C21=Hada(:,21);
I=eye(B);
c21=kron(I,C21); 
longitud=sqrt(length(c21));           %hago que el codigo tenga energia unidad
c21=c21/longitud;
[S22,s]=generasenal(Nt,M,hiper);
C22=Hada(:,22);
I=eye(B);
c22=kron(I,C22); 
longitud=sqrt(length(c22));           %hago que el codigo tenga energia unidad
c22=c22/longitud;
[S23,s]=generasenal(Nt,M,hiper);
C23=Hada(:,23);
I=eye(B);
c23=kron(I,C23); 
longitud=sqrt(length(c23));           %hago que el codigo tenga energia unidad
c23=c23/longitud;
[S24,s]=generasenal(Nt,M,hiper);
C24=Hada(:,24);
I=eye(B);
c24=kron(I,C24); 
longitud=sqrt(length(c24));           %hago que el codigo tenga energia unidad
c24=c24/longitud;





[S25,s]=generasenal(Nt,M,hiper);
C25=Hada(:,25);
I=eye(B);
c25=kron(I,C25); 
longitud=sqrt(length(c25));           %hago que el codigo tenga energia unidad
c25=c25/longitud;
[S26,s]=generasenal(Nt,M,hiper);
C26=Hada(:,26);
I=eye(B);
c26=kron(I,C26); 
longitud=sqrt(length(c26));           %hago que el codigo tenga energia unidad
c26=c26/longitud;
[S27,s]=generasenal(Nt,M,hiper);
C27=Hada(:,27);
I=eye(B);
c27=kron(I,C27); 
longitud=sqrt(length(c27));           %hago que el codigo tenga energia unidad
c27=c27/longitud;
[S28,s]=generasenal(Nt,M,hiper);
C28=Hada(:,28);
I=eye(B);
c28=kron(I,C28); 
longitud=sqrt(length(c28));           %hago que el codigo tenga energia unidad
c28=c28/longitud;
[S29,s]=generasenal(Nt,M,hiper);
C29=Hada(:,29);
I=eye(B);
c29=kron(I,C29); 
longitud=sqrt(length(c29));           %hago que el codigo tenga energia unidad
c29=c29/longitud;
[S30,s]=generasenal(Nt,M,hiper);
C30=Hada(:,30);
I=eye(B);
c30=kron(I,C30); 
longitud=sqrt(length(c30));           %hago que el codigo tenga energia unidad
c30=c30/longitud;
[S31,s]=generasenal(Nt,M,hiper);
C31=Hada(:,31);
I=eye(B);
c31=kron(I,C31); 
longitud=sqrt(length(c31));           %hago que el codigo tenga energia unidad
c31=c31/longitud;
[S32,s]=generasenal(Nt,M,hiper);
C32=Hada(:,32);
I=eye(B);
c32=kron(I,C32); 
longitud=sqrt(length(c32));           %hago que el codigo tenga energia unidad
c32=c32/longitud;





[S33,s]=generasenal(Nt,M,hiper);
C33=Hada(:,33);
I=eye(B);
c33=kron(I,C33); 
longitud=sqrt(length(c33));           %hago que el codigo tenga energia unidad
c33=c33/longitud;
[S34,s]=generasenal(Nt,M,hiper);
C34=Hada(:,34);
I=eye(B);
c34=kron(I,C34); 
longitud=sqrt(length(c34));           %hago que el codigo tenga energia unidad
c34=c34/longitud;
[S35,s]=generasenal(Nt,M,hiper);
C35=Hada(:,35);
I=eye(B);
c35=kron(I,C35); 
longitud=sqrt(length(c35));           %hago que el codigo tenga energia unidad
c35=c35/longitud;
[S36,s]=generasenal(Nt,M,hiper);
C36=Hada(:,36);
I=eye(B);
c36=kron(I,C36); 
longitud=sqrt(length(c36));           %hago que el codigo tenga energia unidad
c36=c36/longitud;
[S37,s]=generasenal(Nt,M,hiper);
C37=Hada(:,37);
I=eye(B);
c37=kron(I,C37); 
longitud=sqrt(length(c37));           %hago que el codigo tenga energia unidad
c37=c37/longitud;
[S38,s]=generasenal(Nt,M,hiper);
C38=Hada(:,38);
I=eye(B);
c38=kron(I,C38); 
longitud=sqrt(length(c38));           %hago que el codigo tenga energia unidad
c38=c38/longitud;
[S39,s]=generasenal(Nt,M,hiper);
C39=Hada(:,39);
I=eye(B);
c39=kron(I,C39); 
longitud=sqrt(length(c39));           %hago que el codigo tenga energia unidad
c39=c39/longitud;
[S40,s]=generasenal(Nt,M,hiper);
C40=Hada(:,40);
I=eye(B);
c40=kron(I,C40); 
longitud=sqrt(length(c40));           %hago que el codigo tenga energia unidad
c40=c40/longitud;





[S41,s]=generasenal(Nt,M,hiper);
C41=Hada(:,41);
I=eye(B);
c41=kron(I,C41); 
longitud=sqrt(length(c41));           %hago que el codigo tenga energia unidad
c41=c41/longitud;
[S42,s]=generasenal(Nt,M,hiper);
C42=Hada(:,42);
I=eye(B);
c42=kron(I,C42); 
longitud=sqrt(length(c42));           %hago que el codigo tenga energia unidad
c42=c42/longitud;
[S43,s]=generasenal(Nt,M,hiper);
C43=Hada(:,43);
I=eye(B);
c43=kron(I,C43); 
longitud=sqrt(length(c43));           %hago que el codigo tenga energia unidad
c43=c43/longitud;
[S44,s]=generasenal(Nt,M,hiper);
C44=Hada(:,44);
I=eye(B);
c44=kron(I,C44); 
longitud=sqrt(length(c44));           %hago que el codigo tenga energia unidad
c44=c44/longitud;
[S45,s]=generasenal(Nt,M,hiper);
C45=Hada(:,45);
I=eye(B);
c45=kron(I,C45); 
longitud=sqrt(length(c45));           %hago que el codigo tenga energia unidad
c45=c45/longitud;
[S46,s]=generasenal(Nt,M,hiper);
C46=Hada(:,46);
I=eye(B);
c46=kron(I,C46); 
longitud=sqrt(length(c46));           %hago que el codigo tenga energia unidad
c46=c46/longitud;
[S47,s]=generasenal(Nt,M,hiper);
C47=Hada(:,47);
I=eye(B);
c47=kron(I,C47); 
longitud=sqrt(length(c47));           %hago que el codigo tenga energia unidad
c47=c47/longitud;
[S48,s]=generasenal(Nt,M,hiper);
C48=Hada(:,48);
I=eye(B);
c48=kron(I,C48); 
longitud=sqrt(length(c48));           %hago que el codigo tenga energia unidad
c48=c48/longitud;





[S49,s]=generasenal(Nt,M,hiper);
C49=Hada(:,49);
I=eye(B);
c49=kron(I,C49); 
longitud=sqrt(length(c49));           %hago que el codigo tenga energia unidad
c49=c49/longitud;
[S50,s]=generasenal(Nt,M,hiper);
C50=Hada(:,50);
I=eye(B);
c50=kron(I,C50); 
longitud=sqrt(length(c50));           %hago que el codigo tenga energia unidad
c50=c50/longitud;
[S51,s]=generasenal(Nt,M,hiper);
C51=Hada(:,51);
I=eye(B);
c51=kron(I,C51); 
longitud=sqrt(length(c51));           %hago que el codigo tenga energia unidad
c51=c51/longitud;
[S52,s]=generasenal(Nt,M,hiper);
C52=Hada(:,52);
I=eye(B);
c52=kron(I,C52); 
longitud=sqrt(length(c52));           %hago que el codigo tenga energia unidad
c52=c52/longitud;
[S53,s]=generasenal(Nt,M,hiper);
C53=Hada(:,53);
I=eye(B);
c53=kron(I,C53); 
longitud=sqrt(length(c53));           %hago que el codigo tenga energia unidad
c53=c53/longitud;
[S54,s]=generasenal(Nt,M,hiper);
C54=Hada(:,54);
I=eye(B);
c54=kron(I,C54); 
longitud=sqrt(length(c54));           %hago que el codigo tenga energia unidad
c54=c54/longitud;
[S55,s]=generasenal(Nt,M,hiper);
C55=Hada(:,55);
I=eye(B);
c55=kron(I,C55); 
longitud=sqrt(length(c55));           %hago que el codigo tenga energia unidad
c55=c55/longitud;
[S56,s]=generasenal(Nt,M,hiper);
C56=Hada(:,56);
I=eye(B);
c56=kron(I,C56); 
longitud=sqrt(length(c56));           %hago que el codigo tenga energia unidad
c56=c56/longitud;





[S57,s]=generasenal(Nt,M,hiper);
C57=Hada(:,57);
I=eye(B);
c57=kron(I,C57); 
longitud=sqrt(length(c57));           %hago que el codigo tenga energia unidad
c57=c57/longitud;
[S58,s]=generasenal(Nt,M,hiper);
C58=Hada(:,58);
I=eye(B);
c58=kron(I,C58); 
longitud=sqrt(length(c58));           %hago que el codigo tenga energia unidad
c58=c58/longitud;
[S59,s]=generasenal(Nt,M,hiper);
C59=Hada(:,59);
I=eye(B);
c59=kron(I,C59); 
longitud=sqrt(length(c59));           %hago que el codigo tenga energia unidad
c59=c59/longitud;
[S60,s]=generasenal(Nt,M,hiper);
C60=Hada(:,60);
I=eye(B);
c60=kron(I,C60); 
longitud=sqrt(length(c60));           %hago que el codigo tenga energia unidad
c60=c60/longitud;
[S61,s]=generasenal(Nt,M,hiper);
C61=Hada(:,61);
I=eye(B);
c61=kron(I,C61); 
longitud=sqrt(length(c61));           %hago que el codigo tenga energia unidad
c61=c61/longitud;
[S62,s]=generasenal(Nt,M,hiper);
C62=Hada(:,62);
I=eye(B);
c62=kron(I,C62); 
longitud=sqrt(length(c62));           %hago que el codigo tenga energia unidad
c62=c62/longitud;
[S63,s]=generasenal(Nt,M,hiper);
C63=Hada(:,63);
I=eye(B);
c63=kron(I,C63); 
longitud=sqrt(length(c63));           %hago que el codigo tenga energia unidad
c63=c63/longitud;
[S64,s]=generasenal(Nt,M,hiper);
C64=Hada(:,64);
I=eye(B);
c64=kron(I,C64); 
longitud=sqrt(length(c64));           %hago que el codigo tenga energia unidad
c64=c64/longitud;

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

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


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

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





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

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






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

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





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

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





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

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





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

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




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

for a=1:Nt
    SS59(:,a)=c59*S59(1:B,a);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for b=1:Nt
    SS60(:,b)=c60*S60(1:B,b);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for c=1:Nt
    SS61(:,c)=c61*S61(1:B,c);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for d=1:Nt
    SS62(:,d)=c62*S62(1:B,d);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for f=1:Nt
    SS63(:,f)=c63*S63(1:B,f);
                    %genero una matriz con los simbolos codificados que voy a ttir
end
for z=1:Nt
    SS64(:,z)=c64*S64(1:B,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);
Ttido=S1(1:B,:);
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+SS10+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
            %ZF
            ZZ=pinv(H*T*F)*YY;
            CC=c1'*ZZ;                       %señal demodulada
            ber=calculaber(Ttido,CC);
            ejexZF(i)=snr;
            ejeyZF(i)=ber;
            %FAST
                DELTA=Fp'*H*Fp;
                V=Fp'*T*F;
                U=SS1;
                s=V*U;
                Y=Fp'*YY;
                %Y=DELTA*s+N;
                Rss=(s*s')/size(s,2);
                DELTA1=DELTA';
                Ryy=(Y*Y')/size(Y,2);
                Ryyinv=pinv(Ryy);
                Gmmse=Rss*DELTA1*Ryyinv;
                Sest=Gmmse*Y;
                Uest=pinv(V)*Sest;
                CC=c1'*Uest;
                ber=calculaber(Ttido,CC);
                ejexFAST(i)=snr;
                ejeyFAST(i)=ber;
             %OLA
             
             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=SS1;
                %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=c1'*Uest;
                ber=calculaber(Ttido,CC);
                ejexOLA(i)=snr;
                ejeyOLA(i)=ber;
             %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(Ttido,CC);
                ejexMMSE(i)=snr;
                ejeyMMSE(i)=ber;
            i=i+1;
           
        end
    
            ejex1ZF=ejex1ZF+ejexZF;
            ejey1ZF=ejey1ZF+ejeyZF;
            ejex1FAST=ejex1FAST+ejexFAST;
            ejey1FAST=ejey1FAST+ejeyFAST;
            ejex1OLA=ejex1OLA+ejexOLA;
            ejey1OLA=ejey1OLA+ejeyOLA;
            ejex1MMSE=ejex1MMSE+ejexMMSE;
            ejey1MMSE=ejey1MMSE+ejeyMMSE;
            i=1;
    end
    ejex1ZF=ejex1ZF/60;
    ejey1ZF=ejey1ZF/60;
    ejex2ZF=ejex2ZF+ejex1ZF;
    ejey2ZF=ejey2ZF+ejey1ZF;
    ejex1FAST=ejex1FAST/60;
    ejey1FAST=ejey1FAST/60;
    ejex2FAST=ejex2FAST+ejex1FAST;
    ejey2FAST=ejey2FAST+ejey1FAST;
    ejex1OLA=ejex1OLA/60;
    ejey1OLA=ejey1OLA/60;
    ejex2OLA=ejex2OLA+ejex1OLA;
    ejey2OLA=ejey2OLA+ejey1OLA;
    ejex1MMSE=ejex1MMSE/60;
    ejey1MMSE=ejey1MMSE/60;
    ejex2MMSE=ejex2MMSE+ejex1MMSE;
    ejey2MMSE=ejey2MMSE+ejey1MMSE;
end
    ejex2ZF=ejex2ZF/10
    ejey2ZF=ejey2ZF/10
    semilogy(ejex2ZF,ejey2ZF,'ro-')
    grid;
    xlabel('Es/No');
    ylabel('Ber');
    hold on;
    ejex2FAST=ejex2FAST/10
    ejey2FAST=ejey2FAST/10
    semilogy(ejex2FAST,ejey2FAST,'gh-')
    grid;
    xlabel('Es/No');
    ylabel('Ber');
    hold on;
    ejex2OLA=ejex2OLA/10
    ejey2OLA=ejey2OLA/10
    semilogy(ejex2OLA,ejey2OLA,'cp-')
    grid;
    xlabel('Es/No');
    ylabel('Ber');
    hold on;
    ejex2MMSE=ejex2MMSE/10
    ejey2MMSE=ejey2MMSE/10
    semilogy(ejex2MMSE,ejey2MMSE,'bd-')
    grid;
    xlabel('Es/No');
    ylabel('Ber');
    
    