Computational routine
eng


modgen

File content


/* Modnumlib Scicos interfacing function
 * Copyright (C) 2009-2011 Alan Layec
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */
 
/* modgen Scicos Generic symbol modulator block
 * Type 4 simulation function ver 1.0 - scilab-4.1
 * 25 mars 2007 - INRIA - Author : A.Layec
 */

/* REVISION HISTORY :
 * $Log$
 */

#include <scicos/scicos_block.h>
#include "modnum_lib.h"

/* Cette fonction de simulation réalise un
 * modulateur symbole générique.
 *
 * Les valeurs I/Q sont données en paramètres.
 * A chaque entrée de valeurs 0 à m-1, une
 * valeur symbole est associée, avec m
 * le nombre d'états.
 *
 * entrées régulières
 *    u[0..insz[0]-1]  : vecteur des numéros symboles
 *
 * sorties régulières
 *    y1[0..insz[0]-1] : vecteur des composantes I
 *    y2[0..insz[0]-1] : vecteur des composantes Q
 *
 * entrée évènementielle : instants de déclenchement.
 * sortie évènementielle : néant
 *
 * paramètres entiers
 *    ipar[0] : m nombre d'états
 *
 * paramètres réels
 *    rpar[0..ipar[0]-1] :
 *       vecteur des parties réelles des valeurs symbole
 *    rpar[ipar[0]..2*ipar[0]-1] :
 *      vecteur des parties imaginaires des valeurs symbole
 */

/*prototype*/
void modgen(scicos_block *block,int flag)
{
 /*Déclaration des variables*/
 double *y1,*y2;
 double *u;
 int nu; /*taille du vecteur d'entrée*/
 double *u_r,*u_i;
 int m; /*nombre d'états*/
 int i;

 /*Récupération des adresses des ports réguliers*/
 u=(double *)block->inptr[0];
 y1=(double *)block->outptr[0];
 y2=(double *)block->outptr[1];

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

 /*Récupération du nombre d'états*/
 m=block->ipar[0];

 /*Récupération des valeurs réelles et imaginaires du symbole*/
 u_r=(double *)&block->rpar[0];
 u_i=(double *)&block->rpar[m];

 /*
  * Le flag 1 calcule la valeur de I et de Q en fonction
  * du numéro symbole u[] et du nombre d'état m
 */
 if(flag==1||flag==6) {
  /*pour chaque éléments du vecteur d'entrée*/
  for (i=0;i<nu;i++) {
    /*vérification de la valeur de l'entrée*/
    if ((u[i]<0)||(u[i]>(double)(m-1))) {
      set_block_error(-1);
      return;
    }
    else {
      /*Appel routine modgen*/
      modgen_c(&nu,&m,&u[0],&u_r[0],&u_i[0],&y1[0],&y2[0]);
    }
  }
 }
}