/* demodpsk Scicos demodulator MPSK block * Type 4 simulation function ver 1.0 - scilab-3.0 * 22 décembre 2004 - IRCOM GROUP - Author : A.Layec */ /* REVISION HISTORY : * $Log$ */ #include <math.h> #include "scicos_block.h" #define M_PI 3.14159265358979323846 /* Cette fonction de simulation réalise un démodulateur MPSK. * A chaque instant de déclenchement les valeurs de I et Q sont * lues en entrée et la fonction calcule dans un premier temps * arctang[-Q/I] pour récupérer la valeur de la phase. Ensuite * elle calcule la valeur du numéro symbole par la formule * y=(int)((phi*n)/(2*%pi)) avec n le nombre d'états et phi la valeur * de arctang[-Q/I]. * * entrées régulières: u1[0..insz[0]-1] vecteur des signaux I * u2[0..insz[0]-1] vecteur des signaux Q * sorties régulières : y[0..insz[0]-1] vecteur des numéros symboles * entrée évènementielles : instants de déclenchement * sorties évènementielles : néant * paramatres entiers : ipar[0..insz[0]-1] : vecteur du nombre d'état */ /* demodpskv_c routine de calcul de démodulation PSK * * Entrées : * n : taille des vecteur originaux * m : nombre d'états (vecteur) * i_c : vecteur de la composante I * q_c : vecteur de la composante Q * Sorties : * y : vecteur du numéro symbole * * dépendance : * math.h */ void demodpskv_c(int *n,int *m,double *i_c,double *i_q,double*y) { /*Déclaration des variables*/ int i; double phi; for(i=0;i<(*n);i++) { /*Calcul de la phase*/ phi=atan2(-i_q[i],i_c[i]); if(phi<0) phi = phi + 2*M_PI; /*Calcul du numéro symbole*/ y[i]=(int)(phi*m[i]/(2*M_PI)); } return; } /*Prototype*/ void demodpsk(scicos_block *block,int flag) { /*Déclaration des variables*/ double *y; double *u1,*u2; /*Récupération des adresses des ports réguliers*/ y=(double *)block->outptr[0]; u1=(double *)block->inptr[0]; u2=(double *)block->inptr[1]; /*Le flag 1 calcule le numéro symbole*/ if(flag==1) { /*Appel routine demodpsk_c*/ demodpskv_c(&block->insz[0],&block->ipar[0],&u1[0],&u2[0],&y[0]); } }