 %%% 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);

ejex1FAST=zeros(1,9);
ejey1FAST=zeros(1,9);
ejex2FAST=zeros(1,9);
ejey2FAST=zeros(1,9);

load('C:\Documents and Settings\Juan Pablo\Escritorio\pfdc\pfdc OFDM\PRUEBA\canales.mat')
[S,s]=generasenal(Nt,M,hiper);
Hada=Hadamard(M);
c=Hada(:,2);                         % 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
            
            %FAST
                %FAST
                DELTA=Fp'*H*Fp;
                V=Fp'*T*F;
                U=SS;
                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=DELTA1*inv(DELTA*DELTA1);
                Sest=Gmmse*Y;
                Uest=pinv(V)*Sest;
                CC=c'*Uest;
                ber=calculaber(S(1,:),CC);
                ejexFAST(i)=snr;
                ejeyFAST(i)=ber;
            
            i=i+1;
           
        end
    
          
            ejex1FAST=ejex1FAST+ejexFAST;
            ejey1FAST=ejey1FAST+ejeyFAST;
          
            i=1;
    end

    ejex1FAST=ejex1FAST/60;
    ejey1FAST=ejey1FAST/60;
    ejex2FAST=ejex2FAST+ejex1FAST;
    ejey2FAST=ejey2FAST+ejey1FAST;
   

end
    
    ejex2FAST=ejex2FAST/10
    ejey2FAST=ejey2FAST/10
    semilogy(ejex2FAST,ejey2FAST,'gh-')
    grid;
    xlabel('Es/No');
    ylabel('Ber');
   
    
    