
function[n_ber]=sist_ofdm_alea(n_EbNo_dB,n_u0,N,n_max_sim,n_cod_tipo,v_canal)
Ng=((N-N*n_u0)/n_u0);
Ng=ceil(Ng);

load ENC4.mat

%TRANSMISOR
n_ldM=n_cod_tipo;
v_bits=randint(n_max_sim*N*n_ldM,1);
% Aleatorizador
%v_bits_alea=aleatorizador(v_bits);
%Interleaver
v_bits_inter=interleaver(v_bits, n_max_sim,N, n_cod_tipo);
%Modulador
[v_tx, n_ldM]= mapeador (v_bits_inter,n_cod_tipo);
m_tx=reshape(v_tx,N,n_max_sim);
m_tx_ofdm=sqrt(N).*ifft(m_tx,N);

%Inserción del Prefijo Cíclico
m_tx_ofdm_guard=inser_pc(m_tx_ofdm,N,Ng,n_max_sim);
v_ofdm_seq=m_tx_ofdm_guard(:);
energia=std(v_ofdm_seq);


%CANAL
n_sigma_sqr=10^(-n_EbNo_dB/10)*(N+Ng)/N/n_ldM;
v_eq=fft(v_canal,N);
v_ruido=sqrt(n_sigma_sqr/2)*(randn(size(v_ofdm_seq))+j*randn(size(v_ofdm_seq)));

%Aplico el canal al primer símbolo
v_ofdm_chan(1:N+Ng)=filter(v_canal,1,v_ofdm_seq(1:N+Ng))+v_ruido(1:N+Ng);
%Aplico el canal a los símbolos restantes uno a uno 
for i=2:1:n_max_sim
    v_ofdm_chan((((i-1)*(N+Ng))+1):(i*(N+Ng)))=filter(v_canal,1,v_ofdm_seq((((i-1)*(N+Ng))+1):(i*(N+Ng))))+v_ruido((((i-1)*(N+Ng))+1):(i*(N+Ng)));
end

%RECEPTOR
m_rx_ofdm=reshape(v_ofdm_chan,N+Ng,n_max_sim);

%Extracción del Prefijo Cíclico
m_rx_ofdm=extrac_pc(m_rx_ofdm,N,Ng,n_max_sim);
m_rx=1/sqrt(N)*fft(m_rx_ofdm);
%Matriz de ecualizacion
m_eq=repmat(v_eq(:),1,size(m_rx,2));
m_rx=m_rx./m_eq;
v_rx=m_rx(:);
%Demapeador
v_bits_rx=demapeador(v_rx,n_cod_tipo);
%Deinterleaver
v_bits_rx_deinter=deinterleaver(v_bits_rx,n_max_sim,N,n_cod_tipo);
%Desaleatorizador
%v_bits_rx_dalea=desaleatorizador(v_bits_rx_deinter);
%Cálculo de la ber
n_ber=mean(v_bits_rx_deinter(:)~=v_bits(:));



