
%========================================================================
% El usuario selecciona por teclado una simulación de entre ocho opciones
% posibles.
%=======================================================================

close all;
clear;
clc;
i = 1 ;    % Indica el número de iteraciones transcurridas

fprintf('************* Bienvenido al simulador de sistema OFDMA/SCFDMA. Por favor, seleccione una de las siguientes opciones: ********************\n\n')
fprintf('.............1.Dibujar Señal OFDMA en tiempo y frecuencia\n')
fprintf('.............2.Dibujar constelación e histograma de la señal OFDMA a la salida del SSPA en función de la IBO \n')
fprintf('.............3.Dibujar Señal OFDMA a la salida del SSPA en tiempo y frecuencia\n')
fprintf('.............4.Dibujar Señal SCFDMA en tiempo y frecuencia\n')
fprintf('.............5.Dibujar constelación e histograma de la señal SCFDMA a la salida del SSPA en función de la IBO \n')
fprintf('.............6.Dibujar Señal SCFDMA a la salida del SSPA en tiempo y frecuencia\n')
fprintf('.............7.Simulación CCDF del PAPR para OFDMA y SCFDMA \n')
fprintf('.............8.Dibujar función de transferencia SSPA \n')
fprintf('.............Pulse cualquier otra tecla para salir del programa \n\n')
flag=input('.................. ');

%%%%%%%%%%%%%% 1.Dibujar Señal OFDMA en tiempo y frecuencia  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

if(flag == 1)
    SYS=parametros(flag);
    [s_n,simbolos,PAPR]=transmisor(SYS);
    s_n_SSPA = sspa(s_n,SYS,i);
    [rkl,MER] = receptor(s_n,SYS,simbolos);
    grafica(s_n,SYS,simbolos,rkl,i,flag);
end


%%%%%%%%%%%% 2.Dibujar constelación e histograma de la señal OFDMA tras el SSPA en función de la IBO  %%%%%%%%%%%%%%%%%%%%%%%%

if(flag == 2)
    SYS=parametros(flag);
    SYS.simulaciones=3;
    [s_n,simbolos,PAPR]=transmisor(SYS);
    j=1;
    while (j<=2)
        figure();
        for i=1:SYS.simulaciones
            s_n_SSPA = sspa(s_n,SYS,i);
            [rkl,MER] = receptor(s_n_SSPA,SYS,simbolos);
            grafica(s_n,SYS,simbolos,rkl,i,flag,s_n_SSPA);
            SYS.IBO(i+1)=SYS.IBO(i)+3;
        end
        j=j+1;
        SYS.p=256;
    end
end


%%%%%%%%%%%% 3 y 6. Dibujar OFDMA/SCFDMA tras el SSPA en tiempo y frecuencia  %%%%%%%%%%%%%%%%%%%%%%%%

if(flag==3)||(flag==6)
    SYS = parametros(flag);
    SYS.simulaciones=3;
    j=1;
    if(flag==3)
        [s_n,simbolos,PAPR] = transmisor(SYS);
    else
        [s_n,simbolos,PAPR] = transmisor_scfdma(SYS);
    end
    
    while (j<=2)
        for i=1:SYS.simulaciones
            s_n_SSPA = sspa(s_n,SYS,i);
            if(flag==3)
                [rkl,MER] = receptor(s_n_SSPA,SYS,simbolos);
            else
                rkl = receptor_scfdma(SYS,s_n_SSPA,simbolos);
            end
            grafica(s_n,SYS,simbolos,rkl,i,flag,s_n_SSPA);
        end
        j=j+1;
        SYS.p=256;
    end
    
end



%%%%%%%%%%%%%% 4.Dibujar Señal SC-FDMA en tiempo y frecuencia %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

if (flag==4)
    SYS = parametros(flag);
    [s_n,simbolos,PAPR] = transmisor_scfdma(SYS);
    [rkl,MER] = receptor_scfdma(SYS,s_n,simbolos);
    grafica(s_n,SYS,simbolos,rkl,i,flag)
end

%%%%%%%%%%%% 5.Dibujar constelación e histograma de la señal SCFDMA a la salida del SSPA en función de la IBO  %%%%%%%%%%%%%%%%%%%%%%%%

if(flag == 5)
    SYS=parametros(flag);
    SYS.simulaciones=3;
    [s_n,simbolos,PAPR] = transmisor_scfdma(SYS);
    j=1;
    while (j<=2)
        figure();
        for i=1:SYS.simulaciones
            s_n_SSPA = sspa(s_n,SYS,i);
            rkl = receptor_scfdma(SYS,s_n_SSPA,simbolos);
            grafica(s_n,SYS,simbolos,rkl,i,flag,s_n_SSPA);
            SYS.IBO(i+1)=SYS.IBO(i)+3;
        end
        j=j+1;
        SYS.p=256;
    end
end

%%%%%%%%%%%% 7.Simulación CCDF del PAPR para OFDMA y SCFDMA %%%%%%%%%%%%

if(flag == 7)
    simulaciones=10^3;
    vector_PAPR=zeros(simulaciones,1);
    SYS=parametros(flag);
    for i=1:simulaciones
        [s_n,simbolos,PAPR]=transmisor(SYS);
        vector_PAPR(i,1)=PAPR;
    end
    [ccdf1,rango1]=calcular_ccdf(vector_PAPR);
    
    flag=8;
    SYS=parametros(flag);
    for i=1:simulaciones
        [s_n,simbolos,PAPR]=transmisor_scfdma(SYS);
        vector_PAPR(i,1)=PAPR;
    end
    [ccdf2,rango2]=calcular_ccdf(vector_PAPR);
    
    flag=9;
    SYS=parametros(flag);
    for i=1:simulaciones
        [s_n,simbolos,PAPR]=transmisor_scfdma(SYS);
        vector_PAPR(i,1)=PAPR;
    end
    [ccdf3,rango3]=calcular_ccdf(vector_PAPR);
    figure(1)
    semilogy(rango1,ccdf1,rango2,ccdf2,rango3,ccdf3)
    grid on;
    legend('OFDMA','DFDMA','LFDMA',3);
    title({' CCDF de la PAPR con esquema de modulación y número de portadoras por usuario' SYS.N})
    xlabel('PAPR (dB)')
    ylabel('P(PAPR>x)')
    ylim([10^-4 10^0])
end

%%%%%%%%%%%% 10.Dibujar función de transferencia SSPA %%%%%%%%%%%%

if (flag==8)
    amplificador();
end


