Computational routine
eng


adc

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.
 */
 
/* adc Scicos Analog to Digital Converter block
 * Type 4 simulation function ver 1.0 - scilab-3.0
 * 3 Mars 2006 - INRIA - Author : A.Layec
 */

/* REVISION HISTORY :
 * $Log$
 */

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

/* Cette fonction de calcul réalise la convertion analogique numérique.
 * Les valeurs de sorties sont des valeurs entières signées ou non-signées.
 *
 * entrée régulière : u[0..nu-1] vecteur des entrées régulières à convertir
 * sortie régulière : y1[0..ny-1] vecteur des sorties converties
 *                    y2[0..ny-1] vecteur des sorties de bruit de quantification
 *
 * entrée évènementielle : Dates de déclenchement
 * sortie évènementeille : néant
 *
 * paramètre entier : ipar[0..nu-1]     : méthode de quantification
 *                                        0 - contre-marche
 *                                        1 - mi-marche
 *                   ipar[nu..2*nu-1]   : Nombre de bits de la valeur entière de sortie
 *                   ipar[2*nu..3*nu-1] : flag code complément à 2
 *                                        0 : nombre entier non signé
 *                                        1 : nombre entier signé
 *                   ipar[3*nu]         : flag calcul bruit de quantification
 *                                        0 : pas de calcul
 *                                        1 : calcul sur sortie régulière 2
 *
 * paramètre réel : rpar[0..nu-1]      : pas (ou quantum)
 *                  rpar[nu..2*nu-1]   : valeur minimale ou débute la conversion
 *                  rpar[2*nu..3*nu-1] : erreur d'offset
 *                  rpar[3*nu..4*nu-1] : erreur fsr
 */

/*prototype*/
void adc(scicos_block *block,int flag)
{
  /*Déclaration des variables*/
  double *u,*y1,*y2;

  int nu;

  int type;
  int nbit;
  int cc2;
  int qn;

  double q;
  double vmin;
  double of_er;
  double fsr_er;

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

  /*Récupération de la taille des ports*/
  nu=block->insz[0];

  /*Récupère le type de quantification*/
  type=block->ipar[0];
  /*Récupère le nombre de bit*/
  nbit=block->ipar[nu];
  /*Récupère le type de code*/
  cc2=block->ipar[2*nu];
  /*Récupère calcul de bruit de quantification*/
  qn=block->ipar[3*nu];

  /*Récupère adresse sortie régulière 2*/
  if (qn!=0) y2=(double *)block->outptr[1];

  /*Récupère le quantum*/
  q=block->rpar[0];
  /*Récupère la grandeur minimale d'entrée*/
  vmin=block->rpar[nu];
  /*Récupère l'erreur d'offset*/
  of_er=block->rpar[2*nu];
  /*Récupère l'erreur d'offset*/
  fsr_er=block->rpar[3*nu];

  /*Appel routine adcv_c*/
  adcv_c(&nu,&type,&nbit,&cc2,&qn,&q,&vmin,&of_er,&fsr_er,&u[0],&y1[0],&y2[0]);
}