Bloc Scicos
eng - fr


Bloc Détecteur phase/fréquence trois états

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

Contenu

Palette

Description

Add here a paragraph of the function description.

Modèle équivalent en Super Bloc

\epsfig{file=PFD_f_sblock_equiv.eps,width=400.00pt}

Boîte de dialogue

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

Propriétés par défaut

Fonction d'interface

PFD_f.sci

Fonction de calcul (type 4)


/* pfd Scicos Phase Frequency Detector block including
 * D Flip/Flop Tristate Phase/Frequency comparator and charge Pump 
 * Type 4 simulation function ver 1.0 - scilab-3.0
 * 13 janvier 2004 - IRCOM GROUP - Author : A.Layec
 */
 
/* REVISION HISTORY :
 * $Log$
 */
 
#include "scicos_block.h"
#include <stdio.h>

/* entrées régulières      : néant
 * sorties : y[0..ny-1]    : vecteur de sortie du courant de la pompe de charge
 * entrées évènementielles : nev = 1 : entrée d'horloge de mise à jour du cpf
 *                           nev = 2 : entrée d'horloge du diviseur de retour
 * sortie évènementielles  :
 * paramètres entiers : outsz[0] : taille du vecteur (ny)
 *                     ipar[0..ny] : type de bruit de la pompe de charge (typ_leak)
 *                             0: pas de fuite
 *                             1: fuite constante
 *                             2: fuite bruit normal
 * paramètres réels   : rpar[0..ny-1]      : courant max de la pompe de charge
 *                      rpar[ny..2ny-1]    : courant de fuite moyen de la pompe de charge
 *                      rpar[2*ny..3*ny-1] : deviation du courant de fuite 
 * Etats discrets : z[0],z[ny] : etats mémoires des bascules
 * Etats discrets dynamiques : up et down valeur de sortie du CPF
 */

/*prototype*/
void pfd(scicos_block *block,int flag)
{
 /*déclaration*/
 int ny;
 int nev;
 double *y;
 double *z__;
 double *up,*down;
 int typ_leak;
 double *Io,*Ileak_d,*Ileak_m;
 
 /*récupération des adresses*/
 y=(double *)block->outptr[0];
 nev=block->nevprt;
 
 /*Récupération des paramètres*/
 ny=block->outsz[0];
 typ_leak=block->ipar[0];
 Io=&block->rpar[0];
 Ileak_m=&block->rpar[ny];
 Ileak_d=&block->rpar[2*ny];
 
 if(flag==1)
 {
 /*Allocation de 2 vecteurs de taille ny*/
 if ((*block->work=scicos_malloc(sizeof(double)*(2*ny)))== NULL)
 {
  set_block_error(-16);
  return;
 }
 /*Récupération de l'adresse de départ du vecteur alloué*/
 z__=*block->work;

 /*Déclaration de pointeurs auxiliaires*/
 up=&(z__[0]);down=&(z__[ny]);   /*vecteur up et down*/
   
 /*Appel cpf_c*/ 
 cpf_c(&ny,&nev,&block->z[0],&block->z[ny],&up[0],&down[0]);
  
 /*Appel chargepump_c*/
 chargepump_c(&ny,&up[0],&down[0],&Io[0],&typ_leak,&Ileak_m[0],&Ileak_d[0],&y[0]);
 
 /*Libère mémoire allouée*/
 scicos_free(*block->work);
 }
}

Auteurs

IRCOM Group Alan Layec