%% Este archivo genera las matrices necesarias para la generacion del
%% receptor MMSE ZP normal en el caso en el que
%%% ttimos bloques de B simbolos simultaneamente con B=8 M=64
% usando codigos aleatorios
%parametros



%parametros
B=1;
hiper=0;
Nt=1000;
L=16;
M=64;
flag=1;
recep=0;
w=[0 2 4 6 8 10 12 14 16 18];
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;  
% Empezamos
Es=1;
K=length(w);
ejex1=zeros(1,9);
ejey1=zeros(1,9);
[S,s]=generasenal(Nt,M,hiper);
Hada=Hadamard(M/B);
C=Hada(:,2);                 % 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,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
tamanoX=size(XX)
for g=0:100
    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);
            %empiezo a generar la Gmmse
            A=H*T*F;
            U=SS;
            R=A*U+N;
            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);
            ejex(i)=snr
            ejey(i)=ber
            i=i+1;
           
    end
    ejex1=ejex1+ejex;
     ejey1=ejey1+ejey;
     i=1;
end
 ejex1=ejex1/100;
 ejey1=ejey1/100;
 semilogy(ejex,ejey,'bd-')
 grid;
 xlabel('Es/No');
 ylabel('Ber');

            
            
            
            
            
            
            




