 %%% 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=1;
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);
[S1,s]=generasenal(Nt,M,hiper);
c1=Hada(:,1);                         % genero el codigo
longitud1=sqrt(length(c1));           %hago que el codigo tenga energia unidad
c1=c1/longitud1;
[S2,s]=generasenal(Nt,M,hiper);
c2=Hada(:,2);                         % genero el codigo
longitud2=sqrt(length(c2));           %hago que el codigo tenga energia unidad
c2=c2/longitud2;
[S3,s]=generasenal(Nt,M,hiper);
c3=Hada(:,3);                         % genero el codigo
longitud3=sqrt(length(c3));           %hago que el codigo tenga energia unidad
c3=c3/longitud3;
[S4,s]=generasenal(Nt,M,hiper);
c4=Hada(:,4);                         % genero el codigo
longitud4=sqrt(length(c4));           %hago que el codigo tenga energia unidad
c4=c4/longitud4;
[S5,s]=generasenal(Nt,M,hiper);
c5=Hada(:,5);                         % genero el codigo
longitud5=sqrt(length(c5));           %hago que el codigo tenga energia unidad
c5=c5/longitud5;
[S6,s]=generasenal(Nt,M,hiper);
c6=Hada(:,6);                         % genero el codigo
longitud6=sqrt(length(c6));           %hago que el codigo tenga energia unidad
c6=c6/longitud6;
[S7,s]=generasenal(Nt,M,hiper);
c7=Hada(:,7);                         % genero el codigo
longitud7=sqrt(length(c7));           %hago que el codigo tenga energia unidad
c7=c7/longitud7;
[S8,s]=generasenal(Nt,M,hiper);
c8=Hada(:,8);                         % genero el codigo
longitud8=sqrt(length(c8));           %hago que el codigo tenga energia unidad
c8=c8/longitud8;








[S9,s]=generasenal(Nt,M,hiper);
c9=Hada(:,9);                         % genero el codigo
longitud9=sqrt(length(c9));           %hago que el codigo tenga energia unidad
c9=c9/longitud9;
[S10,s]=generasenal(Nt,M,hiper);
c10=Hada(:,10);                         % genero el codigo
longitud10=sqrt(length(c10));           %hago que el codigo tenga energia unidad
c10=c10/longitud10;
[S11,s]=generasenal(Nt,M,hiper);
c11=Hada(:,11);                         % genero el codigo
longitud11=sqrt(length(c11));           %hago que el codigo tenga energia unidad
c11=c11/longitud11;
[S12,s]=generasenal(Nt,M,hiper);
c12=Hada(:,12);                         % genero el codigo
longitud12=sqrt(length(c12));           %hago que el codigo tenga energia unidad
c12=c12/longitud12;
[S13,s]=generasenal(Nt,M,hiper);
c13=Hada(:,13);                         % genero el codigo
longitud13=sqrt(length(c13));           %hago que el codigo tenga energia unidad
c13=c13/longitud13;
[S14,s]=generasenal(Nt,M,hiper);
c14=Hada(:,14);                         % genero el codigo
longitud14=sqrt(length(c14));           %hago que el codigo tenga energia unidad
c14=c14/longitud14;
[S15,s]=generasenal(Nt,M,hiper);
c15=Hada(:,15);                         % genero el codigo
longitud15=sqrt(length(c15));           %hago que el codigo tenga energia unidad
c15=c15/longitud15;
[S16,s]=generasenal(Nt,M,hiper);
c16=Hada(:,16);                         % genero el codigo
longitud16=sqrt(length(c16));           %hago que el codigo tenga energia unidad
c16=c16/longitud16;








[S17,s]=generasenal(Nt,M,hiper);
c17=Hada(:,17);                         % genero el codigo
longitud17=sqrt(length(c17));           %hago que el codigo tenga energia unidad
c17=c17/longitud17;
[S18,s]=generasenal(Nt,M,hiper);
c18=Hada(:,18);                         % genero el codigo
longitud18=sqrt(length(c18));           %hago que el codigo tenga energia unidad
c18=c18/longitud18;
[S19,s]=generasenal(Nt,M,hiper);
c19=Hada(:,19);                         % genero el codigo
longitud19=sqrt(length(c19));           %hago que el codigo tenga energia unidad
c19=c19/longitud19;
[S20,s]=generasenal(Nt,M,hiper);
c20=Hada(:,20);                         % genero el codigo
longitud20=sqrt(length(c20));           %hago que el codigo tenga energia unidad
c20=c20/longitud20;
[S21,s]=generasenal(Nt,M,hiper);
c21=Hada(:,21);                         % genero el codigo
longitud21=sqrt(length(c21));           %hago que el codigo tenga energia unidad
c21=c21/longitud21;
[S22,s]=generasenal(Nt,M,hiper);
c22=Hada(:,22);                         % genero el codigo
longitud22=sqrt(length(c22));           %hago que el codigo tenga energia unidad
c22=c22/longitud22;
[S23,s]=generasenal(Nt,M,hiper);
c23=Hada(:,23);                         % genero el codigo
longitud23=sqrt(length(c23));           %hago que el codigo tenga energia unidad
c23=c23/longitud23;
[S24,s]=generasenal(Nt,M,hiper);
c24=Hada(:,24);                         % genero el codigo
longitud24=sqrt(length(c24));           %hago que el codigo tenga energia unidad
c24=c24/longitud24;








[S25,s]=generasenal(Nt,M,hiper);
c25=Hada(:,25);                         % genero el codigo
longitud25=sqrt(length(c25));           %hago que el codigo tenga energia unidad
c25=c25/longitud25;
[S26,s]=generasenal(Nt,M,hiper);
c26=Hada(:,26);                         % genero el codigo
longitud26=sqrt(length(c26));           %hago que el codigo tenga energia unidad
c26=c26/longitud26;
[S27,s]=generasenal(Nt,M,hiper);
c27=Hada(:,27);                         % genero el codigo
longitud27=sqrt(length(c27));           %hago que el codigo tenga energia unidad
c27=c27/longitud27;
[S28,s]=generasenal(Nt,M,hiper);
c28=Hada(:,28);                         % genero el codigo
longitud28=sqrt(length(c28));           %hago que el codigo tenga energia unidad
c28=c28/longitud28;
[S29,s]=generasenal(Nt,M,hiper);
c29=Hada(:,29);                         % genero el codigo
longitud29=sqrt(length(c29));           %hago que el codigo tenga energia unidad
c29=c29/longitud29;
[S30,s]=generasenal(Nt,M,hiper);
c30=Hada(:,30);                         % genero el codigo
longitud30=sqrt(length(c30));           %hago que el codigo tenga energia unidad
c30=c30/longitud30;
[S31,s]=generasenal(Nt,M,hiper);
c31=Hada(:,31);                         % genero el codigo
longitud31=sqrt(length(c31));           %hago que el codigo tenga energia unidad
c31=c31/longitud31;
[S32,s]=generasenal(Nt,M,hiper);
c32=Hada(:,32);                         % genero el codigo
longitud32=sqrt(length(c32));           %hago que el codigo tenga energia unidad
c32=c32/longitud32;







[S33,s]=generasenal(Nt,M,hiper);
c33=Hada(:,33);                         % genero el codigo
longitud33=sqrt(length(c33));           %hago que el codigo tenga energia unidad
c33=c33/longitud33;
[S34,s]=generasenal(Nt,M,hiper);
c34=Hada(:,34);                         % genero el codigo
longitud34=sqrt(length(c34));           %hago que el codigo tenga energia unidad
c34=c34/longitud34;
[S35,s]=generasenal(Nt,M,hiper);
c35=Hada(:,35);                         % genero el codigo
longitud35=sqrt(length(c35));           %hago que el codigo tenga energia unidad
c35=c35/longitud35;
[S36,s]=generasenal(Nt,M,hiper);
c36=Hada(:,36);                         % genero el codigo
longitud36=sqrt(length(c36));           %hago que el codigo tenga energia unidad
c36=c36/longitud36;
[S37,s]=generasenal(Nt,M,hiper);
c37=Hada(:,37);                         % genero el codigo
longitud37=sqrt(length(c37));           %hago que el codigo tenga energia unidad
c37=c37/longitud37;
[S38,s]=generasenal(Nt,M,hiper);
c38=Hada(:,38);                         % genero el codigo
longitud38=sqrt(length(c38));           %hago que el codigo tenga energia unidad
c38=c38/longitud38;
[S39,s]=generasenal(Nt,M,hiper);
c39=Hada(:,39);                         % genero el codigo
longitud39=sqrt(length(c39));           %hago que el codigo tenga energia unidad
c39=c39/longitud39;
[S40,s]=generasenal(Nt,M,hiper);
c40=Hada(:,40);                         % genero el codigo
longitud40=sqrt(length(c40));           %hago que el codigo tenga energia unidad
c40=c40/longitud40;








[S41,s]=generasenal(Nt,M,hiper);
c41=Hada(:,41);                         % genero el codigo
longitud41=sqrt(length(c41));           %hago que el codigo tenga energia unidad
c41=c41/longitud41;
[S42,s]=generasenal(Nt,M,hiper);
c42=Hada(:,42);                         % genero el codigo
longitud42=sqrt(length(c42));           %hago que el codigo tenga energia unidad
c42=c42/longitud42;
[S43,s]=generasenal(Nt,M,hiper);
c43=Hada(:,43);                         % genero el codigo
longitud43=sqrt(length(c43));           %hago que el codigo tenga energia unidad
c43=c43/longitud43;
[S44,s]=generasenal(Nt,M,hiper);
c44=Hada(:,44);                         % genero el codigo
longitud44=sqrt(length(c44));           %hago que el codigo tenga energia unidad
c44=c44/longitud44;
[S45,s]=generasenal(Nt,M,hiper);
c45=Hada(:,45);                         % genero el codigo
longitud45=sqrt(length(c45));           %hago que el codigo tenga energia unidad
c45=c45/longitud45;
[S46,s]=generasenal(Nt,M,hiper);
c46=Hada(:,46);                         % genero el codigo
longitud46=sqrt(length(c46));           %hago que el codigo tenga energia unidad
c46=c46/longitud46;
[S47,s]=generasenal(Nt,M,hiper);
c47=Hada(:,47);                         % genero el codigo
longitud47=sqrt(length(c47));           %hago que el codigo tenga energia unidad
c47=c47/longitud47;
[S48,s]=generasenal(Nt,M,hiper);
c48=Hada(:,48);                         % genero el codigo
longitud48=sqrt(length(c48));           %hago que el codigo tenga energia unidad
c48=c48/longitud48;








[S49,s]=generasenal(Nt,M,hiper);
c49=Hada(:,49);                         % genero el codigo
longitud49=sqrt(length(c49));           %hago que el codigo tenga energia unidad
c49=c49/longitud49;
[S50,s]=generasenal(Nt,M,hiper);
c50=Hada(:,50);                         % genero el codigo
longitud50=sqrt(length(c50));           %hago que el codigo tenga energia unidad
c50=c50/longitud50;
[S51,s]=generasenal(Nt,M,hiper);
c51=Hada(:,51);                         % genero el codigo
longitud51=sqrt(length(c51));           %hago que el codigo tenga energia unidad
c51=c51/longitud51;
[S52,s]=generasenal(Nt,M,hiper);
c52=Hada(:,52);                         % genero el codigo
longitud52=sqrt(length(c52));           %hago que el codigo tenga energia unidad
c52=c52/longitud52;
[S53,s]=generasenal(Nt,M,hiper);
c53=Hada(:,53);                         % genero el codigo
longitud53=sqrt(length(c53));           %hago que el codigo tenga energia unidad
c53=c53/longitud53;
[S54,s]=generasenal(Nt,M,hiper);
c54=Hada(:,54);                         % genero el codigo
longitud54=sqrt(length(c54));           %hago que el codigo tenga energia unidad
c54=c54/longitud54;
[S55,s]=generasenal(Nt,M,hiper);
c55=Hada(:,55);                         % genero el codigo
longitud55=sqrt(length(c55));           %hago que el codigo tenga energia unidad
c55=c55/longitud55;
[S56,s]=generasenal(Nt,M,hiper);
c56=Hada(:,56);                         % genero el codigo
longitud56=sqrt(length(c56));           %hago que el codigo tenga energia unidad
c56=c56/longitud56;








[S57,s]=generasenal(Nt,M,hiper);
c57=Hada(:,57);                         % genero el codigo
longitud57=sqrt(length(c57));           %hago que el codigo tenga energia unidad
c57=c57/longitud57;
[S58,s]=generasenal(Nt,M,hiper);
c58=Hada(:,58);                         % genero el codigo
longitud58=sqrt(length(c58));           %hago que el codigo tenga energia unidad
c58=c58/longitud58;
[S59,s]=generasenal(Nt,M,hiper);
c59=Hada(:,59);                         % genero el codigo
longitud59=sqrt(length(c59));           %hago que el codigo tenga energia unidad
c59=c59/longitud59;
[S60,s]=generasenal(Nt,M,hiper);
c60=Hada(:,60);                         % genero el codigo
longitud60=sqrt(length(c60));           %hago que el codigo tenga energia unidad
c60=c60/longitud60;
[S61,s]=generasenal(Nt,M,hiper);
c61=Hada(:,61);                         % genero el codigo
longitud61=sqrt(length(c61));           %hago que el codigo tenga energia unidad
c61=c61/longitud61;
[S62,s]=generasenal(Nt,M,hiper);
c62=Hada(:,62);                         % genero el codigo
longitud62=sqrt(length(c62));           %hago que el codigo tenga energia unidad
c62=c62/longitud62;
[S63,s]=generasenal(Nt,M,hiper);
c63=Hada(:,63);                         % genero el codigo
longitud63=sqrt(length(c63));           %hago que el codigo tenga energia unidad
c63=c63/longitud63;
[S64,s]=generasenal(Nt,M,hiper);
c64=Hada(:,64);                         % genero el codigo
longitud64=sqrt(length(c64));           %hago que el codigo tenga energia unidad
c=c64/longitud64;

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
            %ZF
            ZZ=pinv(H*T*F)*YY;
            CC=c1'*ZZ;                       %señal demodulada
            ber=calculaber(S1(1,:),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(S1(1,:),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(S1(1,:),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(S1(1,:),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');
    
    