Scicos Block
eng - fr


Random Integer Generator block

\epsfig{file=GENINT_f.eps,width=90.00pt}

Contents

Palette

Description

Generate random integers and binary numbers. This blocks is able to generate multiple vectors of integers or binary numbers and also multiple sequential data stream. These functions are enable with the dialogue parameters.

Dialog box

\begin{figure}\begin{center}
\epsfig{file=GENINT_f_gui.eps,width=300pt}
\end{center}\end{figure}

Example

- Generation of a single sequential data-stream NRZ binary number :
Number of bits per Integer : [1]
Type : [0]
- Generation of double sequential data-stream RZ binary number :
Number of bits per Integer : [1;1]
Type : [1;1]
- Generation of three vectors of size 4 each of signed integers with 8-bits length :
Number of bits per Integer : [8;8;8;8 ; 8;8;8;8 ; 8;8;8;8]
Type : [2;2;2;2 ; 2;2;2;2 ; 2;2;2;2]
- Generation of two vectors, one NRZ binary number of size 256, one unsigned integers with 5-bits lenght of size 11 :
Number of bits per Integer : [ones(256,1);5*ones(11,1)]
Type : [zeros(256,1);ones(11,1)]
...
Don't forget to use Mux block to see multi-sequential datas in the CMSCOPE.
Use vectorial scopes VECTORSCOPE, VECTOMEMOSCOPE,... to directly see the vectorial datas.

Default properties

Interfacing function

GENINT_f.sci

Computational function (type 4)


/* genint Scicos Random Integer Generator block
 * Type 4 simulation function ver 1.0 - scilab-3.0
 * 3 janvier 2005 - IRCOM GROUP - Author : A.Layec
 */
 
/* REVISION HISTORY :
 * $Log$
 */
 
#include "machine.h"
#include <math.h>
#include "scicos_block.h"

/* Ce bloc est générateur de nombre entier aléatoire. Il peut générer des trains binaires
 * type RZ ou NRZ ou bien des nombres entiers de longueurs déterminées, signés ou non signés
 *
 * entrées régulières : néant
 * sorties régulières : sortie du générateur
 * entrée évènementielle : détermine la cadence de génération
 *
 * paramètres entiers : ipar[0..outsz[0]-1] : vecteur du nombre de bit du mot de sortie
 *                      ipar[outsz[0]..2*outsz[0]-1]: vecteur du type de générateur
 *
 * nb : Type 0: génére 1 seul bit codé NRZ
 *           1: génère 1 seul bit codé RZ, ou un mot non signé
 *           2: génère un mot codé code complément à 2
 */

/* genintv_c routine de calcul de mots entiers aléatoires
 *
 * Entrées :
 * n   : taille du  vecteur de sortie (scalaire)
 * m   : longueur des mots binaires des éléments du vecteur de sorties (vecteur)
 * typ : type des générateurs binaires (vecteur)
 * (typ=0: génére 1 seul bit codé NRZ
 *    =1: génère 1 seul bit codé RZ, ou un mot non signé
 *    =2: génère un mot codé code complément à 2)
 * Sorties :
 * y : vecteur de sortie
 *
 * dépendances
 * math.h
 */
void genintv_c(int *n,int *m,int *typ,double *y)
{
 /*déclaration des variables compteurs*/
 int k,i,j;
 
 for(i=0;i<(*n);i++)
 {
  switch (typ[i])
  {
   /*Type 0 -> dédié signal NRZ*/
   case 0:
   {
    y[i]=(int)((rand()&1)*2-1);
    break;
   }
   /*Type 1 -> entier non signé*/
   case 1 :
   {
    k=1;
    k=k<<m[i];
    j=rand();
    y[i]=(j&(k-1));
    break;
   }
   /*Type 2 -> entier code complémént à 2*/
   case 2 :
   {
    j=rand();
    j -= 2<<(m[i]-2);
    j &= (2<<(m[i]-1)) - 1;
    j -= 2<<(m[i]-2);
    y[i]=j;
    break;
   }
   break;
  }
 }
 return;
}

/*prototype*/
void genint(scicos_block *block,int flag)
{
    /*Déclaration des variables*/
    double *y;
    int i,j,k;
    int ny;
    
    /*Récupération de l'adresse du port de sortie régulier*/
    y=(double *)block->outptr[0];

    /*Récupération de la taille du vecteur de sortie*/
    ny=block->outsz[0];
    
    /*Le flag 1 recopie le vecteur Z dans le vecteur Y*/
    if (flag==1||flag==6)
    {
        k=1;
        F2C(dcopy)(&ny,&block->z[0],&k,&y[0],&k);
    }
    /*Le flag 2 calcul les valeurs ou mots binaires dans Z*/
    else if(flag==2||flag==4)
    {
     /*Appel binv_c*/
     genintv_c(&ny,&block->ipar[0],&block->ipar[ny],&block->z[0]);
    }
}

Authors

IRCOM Group Alan Layec