Script de simulation Scilab
fr - eng


Estimation du TEB d'une chaine de transmission QPSK simple utilisateur


Contenu

Module

Diagramme(s) Scicos

\epsfig{file=qpsk_teb_sim.eps,width=400pt}
qpsk_teb_sim.cos

Fichier(s) contexte


scs_m.props.context=[
'Te=0.1;'
'Nu=16;'
'Nech=15;'
'N=Nu*Nech;'
'Nbit=2;'
'nb_coef=127;  '
'r=0.35; '
'fe=Nech; '
'gain_em=1; '
'gain_rec=1/Nech; '
'pulse=zeros(1,1); '
't_Ts=1/fe*(-nb_coef/2:nb_coef/2-1); '
'pulse = 4*r/%pi*(cos((1+r)*%pi*t_Ts) + (sin((1-r)*%pi*t_Ts)./(4*r*t_Ts)))./(1-(4*r*t_Ts).^2); '
'Nb_vec=2^11; '
'nb_event=3;'
'Tfin=Te*Nb_vec'
'sigma=0.6;'
];
qpsk_teb_sim_ctxt.sce

Blocs utilisés

Script(s) de simulation


//Define simulation name
sim_name='qpsk_teb_sim';
//Define simulation path
sim_path='qpsk_teb_sim';
//Load scicos diagram
load(MODNUMCOS+'/examples/simu/'+sim_path+'/'+sim_name+'.cos');

//Define context
exec(MODNUMCOS+'/examples/simu/'+sim_path+'/'+sim_name+'_ctxt.sce');
context=scs_m.props("context");execstr(context);
//Define Simulation end time
scs_m.props.tf=Tfin;
//Define other variables
//sig_log=-13:1:0; 
sig_log=-13:1:-2;
Eb=cos(%pi*(1/(2^Nbit)));
sig=[]; 
for i=1:size(sig_log,2)
 sig(i)=Eb/10^(sig_log(i)/10);
end
nb_r=size(sig,1);
nb_error_sav=zeros(nb_r,1);

//Open Log file
u_log=mopen(MODNUMCOS+'/examples/simu/'+sim_path+'/'+sim_name+'.log','a');
//Set flag (for display saved information in scilab window)
flag=0;
//Save inital state of simulation in Log file
wlog_init(u_log,flag);
//Save context in log file
wlog_ctxt(u_log,flag);
//Save and display util variable
wlog_sv(u_log,tlist(['sig_log'],sig_log),flag);
l=1;
nbit_tot=0;
cpu_tot=0;
//while %t
while l<3
 nb_error=zeros(nb_r,1);
 //Loop for iterative simulation
 for j=1:nb_r
  //Save and display begin simulation date j
  wlog_bst(u_log,j,flag);
  //substitue context variable to be sweep
  scs_m.props.context=subst_ctxt(scs_m,'sigma','sigma='+string(sig(j)));
  //Initialise Info and %scicos_context variable
  //if exists('Info')==0 then Info=list(); end
  Info=list();
  if exists('%scicos_context')==0 then %scicos_context=struct(); end
  //Do simulation with scicos_simulate
  timer();
  Info=scicos_simulate(scs_m,Info,%scicos_context,"nw");
  cpu_time=timer();
  nb_bit=Nu*Nbit*(Nb_vec-nb_event);
  //Load result
  myvar=return_state_block(Info,"teb2");
  nb_error(j)=myvar(1)(1);
  cpu_tot=cpu_tot+cpu_time;
  nbit_tot=nbit_tot+nb_bit;
  bit_s=nbit_tot/cpu_tot;
  printf("cpu_tot=%f,\t nbit_tot=%d,\t bit/s=%f\n",cpu_tot,nbit_tot,bit_s);
  //Save and display util variable
  wlog_sv(u_log,tlist(['nb_error'],nb_error(j)),flag);
  //Save and Disp final simulation date j
  wlog_fst(u_log,j,flag);
 end
 //post-processed result
 //nb_bit=Nu*Nbit*(Nb_vec-nb_event);
 nb_error_sav=nb_error_sav+nb_error;
 teb=nb_error_sav/(l*nb_bit);
 plot_teb(49,sig_log,teb,"1");
 //Save and display post-processed vector(matrix)
 wlog_psv(u_log,tlist(['nb_bit';'nb_error_sav';'teb';'l'],nb_bit,nb_error_sav,teb,l,1));
 //
 l=l+1;
end
//Close final state of simulation in Log file
wlog_final(u_log,flag);
//close log file
mclose(u_log);
qpsk_teb_sim.sce

Résultats des oscilloscopes

\begin{figure}\begin{center}
\epsfig{file=qpsk_teb_sim_scope_1.eps,width=300.00pt}
\end{center}\end{figure}
Figure : Taux d'erreur binaire en fonction de la puissance de bruit

Auteurs

A. Layec