/* modpsk Scicos Mary Phase Shift Keying modulator block * Type 4 simulation function ver 1.0 - scilab-3.0 * 21 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 codeur MPSK. * Les sorties y1 et y2 correspondent aux valeurs de I et de Q * codées en fonction du nombre d'états et du numéro symbole * présent à l'entrée u[] aux dates de déclanchements. * La fonction calcule : * I=cos(%pi*(2*u+1)/m) * Q=-sin(%pi*(2*u+1)/m) * où u est l'entrée et m le nombre d'états. * * entrées régulières : u[0..insz[0]-1] : vecteur des numéros symboles * sorties régulières : y1[0..insz[0]-1] : vecteur des composantes I * y2[0..insz[0]-1] : vecteur des composantes Q * entrée évènementielles : instants de déclenchement. * sortie évènementielle : néant * paramètres entiers : ipar[0..insz[0]-1]:m vecteur des nombre d'états */ /* modpskv_c routine de calcul des composantes I et Q en fonction * d'un numéro symbole codé par états de phase (psk) * * Entrées : * n : longueur des vecteurs (scalaire) * m : nombre d'état Attention - ici vecteur * u : numéro symbole (vecteur d'entrée) * Sorties : * i_c : valeur de la composante i (vecteur de sortie 1) * q_c : valeur de la composante q (vecteur de sorite 2) * * Dépendances : * math.h */ void modpskv_c(int *n,int *m,double *u,double *i_c, double *q_c) { /*Déclaration des variables compteurs*/ int i; for(i=0;i<(*n);i++) { i_c[i]=cos(M_PI*(2*u[i]+1)/m[i]); q_c[i]=-sin(M_PI*(2*u[i]+1)/m[i]); } return; } /*prototype*/ void modpsk(scicos_block *block,int flag) { /*Déclaration des variables*/ double *y1,*y2; double *u; /*Récupération des adresses des ports réguliers*/ y1=(double *)block->outptr[0]; y2=(double *)block->outptr[1]; u=(double *)block->inptr[0]; /* Le flag 1 calcule la valeur de I et de Q en fonction du numéro symbole u[] et du nombre du nombre d'état m */ if(flag==1||flag==6) { /*Appel routine modpsk*/ modpskv_c(&block->insz[0],&block->ipar[0],&u[0],&y1[0],&y2[0]); } }