Scicos Block
eng - fr


Integer modulo function block

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

Contents

Palette

Description

This block realizes the non-linear function modulo where the input and output are treated with integer values. In accord to the parameters 'Nbit', the input are tronqued at this integer value witch are defined by using the 2's complement arithmetic. By definition,the value of the output are comprise between $ \left[-2^{Nbit-1};2^{Nbit-1}-1\right]$ and this function acts as a Nbit quantitizer. The output are negative, positive or zero.

\begin{figure}\centering
\scalebox{0.4}{%
\input{imodulo_function.pstex_t}}
\end{figure}
Figure : Integer modulo function

Dialog box

\begin{figure}\begin{center}
\epsfig{file=IMODULO_f_gui.eps,width=270pt}
\end{center}\end{figure}

Default properties

Interfacing function

IMODULO_f.sci

Computational function (type 2)


/* imodulo Scicos integer modulo function block
 * Type 2 simulation function - scilab-2.6&2.7&3.0
 * IRCOM GROUP - Author : A.Layec
 */

/* REVISION HISTORY :
 * $Log$
 */

#include "machine.h"
#include <stdio.h>

/* Cette fonction de simulation propose de réaliser la fonction
 * modulo rencontrée dans les systèmes numériques traitant les opérations
 * sur entier en code complément à 2.
 * entrées régulières : u[0..nu-1]
 * sorties régulières : y[0..nu-1] = mod[u[0..nu-1]]
 * paramètres entiers : ipar[0..nu-1] : nombre de bits des mots entiers.
 *
 *Rmq : l'entrée de type double est tronquée à sa valeur entière.
 *          la sortie est soit négative soit positive
 */

/*Prototype*/
void
imodulo(flag,nevprt,t,xd,x,nx,z,nz,tvec,ntvec,rpar,nrpar,
        ipar,nipar,inptr,insz,nin,outptr,outsz,nout)
integer *flag,*nevprt,*nx,*nz,*ntvec,*nrpar,ipar[],*nipar,insz[],*nin,outsz[],*nout;
double x[],xd[],z[],tvec[],rpar[];
double *inptr[],*outptr[],*t;
{
    /*Déclaration des variables*/
    int i,nu;
    double *y;
    double *u;
    long ent; /*Déclaration d'un entier de type long*/

    /*Récupération des adresses des ports réguliers*/
    y=(double *)outptr[0];
    u=(double *)inptr[0];

    /*Récupération de la taille du port d'entrée*/
    nu=insz[0];

    for (i=0;i<nu;i++)
    {
     /*Récupération de la valeur d'entrée*/
     ent = (long) u[i];

     /*Réalisation du tronquage code complément à 2*/
     ent -= 2<<(ipar[i]-2);
     ent &= (2<<(ipar[i]-1)) - 1;
     ent -= 2<<(ipar[i]-2);

     /*Place valeur tronquée dans le registre de sortie*/
     y[i] = ent;
   }
}

See also

Authors

IRCOM Group Alan Layec