Computational routine
eng


demodgen

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.
 */
 
/* demodgen Scicos Generic symbol demodulator block
 * Type 4 simulation function ver 1.0 - scilab-4.1
 * 25 mars 2007 - INRIA - Author : A.Layec
 */

/* REVISION HISTORY :
 * $Log$
 */

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

/* Cette fonction de simulation réalise un
 * démodulateur symbole générique.
 *
 * Les valeurs I/Q sont données en paramètres.
 * A chaque instant de déclenchement, on cherche les
 * valeurs données en entrée dans le tableau de paramètre
 * de taille m et l'on retourne l'indexe associé en sortie
 * (compris entre 0 et m-1)
 *
 * entrées régulières
 *    u1[0..insz[0]-1] : vecteur des composantes I
 *    u2[0..insz[0]-1] : vecteur des composantes Q
 *
 * sorties régulières
 *    y[0..insz[0]-1]  : vecteur des numéros symboles
 *
 * 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 points de la constellation
 *    rpar[ipar[0]..2*ipar[0]-1] :
 *      vecteur des parties imaginaires des points de la constellation
 */

/*prototype*/
void demodgen(scicos_block *block,int flag)
{
 /*Déclaration des variables*/
 double *u1,*u2;
 double *y;
 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*/
 u1 = (double *)block->inptr[0];
 u2 = (double *)block->inptr[1];
 y  = (double *)block->outptr[0];

 /*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 le numéro symbole y[] à partir
  * des valeurs de u1 et u2
  */
 if(flag==1||flag==6) {
  /*pour chaque éléments du vecteur d'entrée*/
  for (i=0;i<nu;i++) {
     /*Appel routine demodgen*/
     demodgen_c(&nu,&m,&u1[0],&u2[0],&u_r[0],&u_i[0],&y[0]);
  }
 }
}