Pseudo Noide Generator block
- Vector of Size of outputs :
Type 'vec' of size -1. The length of sequences.
- Vector of Length of register :
Type 'vec' of size -1. The length of register(s).
- Vector of Initial condition register :
Type 'vec' of size -1. The initial state of register(s) in integer value.
- Vector of coefficients register :
Type 'vec' of size -1. The coefficients of register(s) in integer value.
- always active: no
- direct-feedthrough: no
- zero-crossing: no
- mode: no
- number/sizes of inputs: 0 /
- number/sizes of outputs: 1 / 31
- number/sizes of activation inputs: 1 / 1
- number/sizes of activation outputs: 0 /
- continuous-time state: no
- discrete-time state: yes
- name of computational function: genmllsrs
GENMLLSRS_f.sci
/* Genmllsrs Scicos Maximal Length Linear feddback Shift Regiter 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 pseudoaléatoires
* à longueur maximale.
* 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
*
* 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
*/
void genmllsrs(scicos_block *block,int flag)
{
/*déclaration des variables*/
int ny;
int nb_gen;
int coef;
int reg,N;
int i,j,k,l;
int y_ptr;
double *y;
/*Récupération des adresses des ports réguliers*/
y=(double *)block->outptr[0];
/*Récupération du nombre de générateurs*/
nb_gen=block->ipar[0];
/*Seulement sur flag 1*/
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 du registre*/
N=block->ipar[nb_gen+1+k];
/*Récupération de la valeur du registre*/
reg=(int) block->z[k];
/*Récupération de la valeur des coef*/
coef=block->ipar[2*nb_gen+1+k];
/*Appel routine mllsrs_c*/
mllsrs_c(&N,&ny,&y[y_ptr],®,&coef);
/*Sauvegarde la valeur du registre dans z[0]*/
block->z[k] = reg;
}
}
}
IRCOM Group
Alan Layec