 %%% Este seria el sistema para OFDM-CDMA usando ZP en el caso en el que
%%% ttimos bloques de B simbolos simultaneamente con B=16 M=64 
% usando codigos aleatorios

%parametros

Nt=1000;
L=16;
M=64;
w=[0 2 4 6 8 10 12 14 16 18];
B=16;
hiper=0;
Channel=1;
FrameLength=1;
v=0;
[variances,Lc]=CIRpowers(Channel);
hfr=[];
for ih=1:Lc+1
  hfr=[hfr;genh(FrameLength,v)];
end
    hfr=diag(variances.^0.5)*hfr;     
    h=hfr;  
    
%ahora empezamos

Es=1;
K=length(w);
[S,s]=generasenal(Nt,M,hiper);
C=sign(randn(M/B,1));                 % genero el codigo
I=eye(B);
c=kron(I,C); 
longitud=sqrt(length(c));           %hago que el codigo tenga energia unidad
c=c/longitud;
for k=1:Nt
    SS(:,k)=c*S(1:B,k);                %genero una matriz con los simbolos codificados que voy a ttir
end
i=1;
F=matrizifft(L,M);
T=matrizTzp(L,M);
H=matrizcanalzp(h,L,M);
XX=H*T*F*SS;                            %señal que ttito

    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);
            YY=XX+N;                        %señal que recibo
            ZZ=pinv(H*T*F)*YY;
            CC=c'*ZZ;                      %señal demodulada
            ber=calculaber(S(1:B,:),CC);
            ejex(i)=snr
            ejey(i)=ber
            i=i+1;
           
    end
 semilogy(ejex,ejey,'co-')
 grid;
 xlabel('Es/No');
 ylabel('Ber');