%%% 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') [S1,s]=generasenal(Nt,M,hiper); Hada=Hadamard(M); 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; 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 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); %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'); e-REdING. Biblioteca de la Escuela Superior de Ingenieros de Sevilla.


ESTUDIO DE UN SISTEMA OFDM-CDMA

: Gallardo Moreno, Juan Pablo
: Ingeniería Telecomunicación
Contenido del proyecto: