Bloc Scicos
eng - fr


Bloc générateur de séquence de Gold

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

Contenu

Palette

Description

Add here a paragraph of the function description.

Boîte de dialogue

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

Propriétés par défaut

Fonction d'interface

GENGOLD_f.sci

Fonction de calcul (type 4)


/* Gengold Scicos Gold Sequences Generator block
 * Type 4 simulation function ver 1.1 - scilab-3.0
 * 15 décembre 2004 - IRCOM GROUP - Author : A.Layec
 */
 
/* REVISION HISTORY :
 * $Log$
 */
  
#include "machine.h"
#include <stdio.h>
#include "scicos_block.h"

/* Cette fonction de simulation est un générateur de sequences de gold.
 * Les valeurs de sortie sont soit -1 soit 1 et dependent d'une combinaison linéaire
 * des valeurs des registres internes Z. Les opérations sont réalisées grâce à des
 * opérateurs de manipulations de bit, et les mots binaires sont stockés par leurs valeurs entières.
 * La fonction est capable de délivrer des vecteurs de nb_gen générateurs.
 */

/* Entrée régulière : néant
 * Sorties régulières : y[0..ny[0]-1]                              : sortie du générateur 1
 *                      y[ny[0]..ny[0]+ny[1]-1]                    : sortie du générateur 2
 *                      ...
 *                      y[ny[nb_gen-2]..ny[nb_gen-2]+ny[nb_gen-1]] : sortie du générateur nb_gen
 * 
 * Entrée évenementielle : période de déclenchement
 * Sortie évènementielle : néant.
 * 
 * Etats discrets : z[0..nb_gen-1]        : valeur des registres à décalage 1
 *                  z[nb_gen..2*nb_gen-1] : valeur des registres à décalage 2
 * 
 * paramètres entiers : ipar[0]                    : nb_gen nombre de générateurs
 *                      ipar[1..nb_gen]            : ny[0..nb_gen-1] longeur des vecteurs de sortie des géné
 *                      ipar[nb_gen+1..2*nb_gen]   : longueur des registres (nbre de bascules)
 *                      ipar[2*nb_gen+1..3*nb_gen] : valeurs des coefficients des registres 1
 *                      ipar[3*nb_gen+1..4*nb_gen] : valeurs des coeff des registres 2
 */

void gengold(scicos_block *block,int flag)
{
  /*déclaration des variables*/
  int ny;
  int nb_gen;
  int reg1,reg2,N;
  int coef1,coef2;
  int k;
  int n;
  int y_ptr;
  double *y;

  /*Récupération de l'adresse du port de sortie*/
  y=(double *)block->outptr[0];
  
  /*Récupération du nombre de générateurs*/
  nb_gen=block->ipar[0];
  
  /*Fait décalage initial*/
  if(flag==4)
  {
   /*Déclaration*/
   int m,decal;
   /*double y_trash[0];*/
   m=1;
   
   /*récupère le nombre de décalage initial*/
   decal=(int) block->rpar[0];
   
   for (k=0;k<nb_gen;k++)
   {
    /*Récupération de la longueur des registres*/
    N=block->ipar[nb_gen+1+k];
    
    /*Récupération de la valeur du registre 1 et 2*/
    reg1=(int) block->z[k];
    reg2=(int) block->z[nb_gen+k];
    
    /*Récupération de la valeur des coef*/
    coef1=block->ipar[2*nb_gen+1+k];
    coef2=block->ipar[3*nb_gen+1+k];
    
    for(n=0;n<decal;n++)
    {
     /*Appel routine gold_c*/   
     gold_c(&N,&m,&y[0],&reg1,&reg2,&coef1,&coef2);
    }
    /*Sauvegarde la valeur du registre1 dans z[0] et la valeur du reg 2 dans z[1]*/
    block->z[k]=reg1;
    block->z[nb_gen+k]=reg2;
   }
   
  }
  /*Seulement sur flag 1*/
  else if(flag==1)
  {
   for (k=0;k<nb_gen;k++)
   {
    /*Définition de l'adresse de départ de la sortie du géné k*/
    if(k!=0) y_ptr=y_ptr+block->ipar[k];
    else y_ptr=0;
     
    /*Récupération de la longueur du vecteur de sortie*/
    ny=block->ipar[1+k];
    
    /*Récupération de la longueur des registres*/
    N=block->ipar[nb_gen+1+k];
    
    /*Récupération de la valeur du registre 1 et 2*/
    reg1=(int) block->z[k];
    reg2=(int) block->z[nb_gen+k];
    
    /*Récupération de la valeur des coef*/
    coef1=block->ipar[2*nb_gen+1+k];
    coef2=block->ipar[3*nb_gen+1+k];
 
    /*Appel routine gold_c*/   
    gold_c(&N,&ny,&y[y_ptr],&reg1,&reg2,&coef1,&coef2);
 
    /*Sauvegarde la valeur du registre1 dans z[0] et la valeur du reg 2 dans z[1]*/
    block->z[k]=reg1;
    block->z[nb_gen+k]=reg2;
   }
  }
}

Auteurs

IRCOM Group Alan Layec