Scicos Block
eng - fr


M-ary Phase Shift Keying demodulator Block

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

Contents

Palette

Description

This M-PSK demodulator takes in input two [I;Q] (respectively [u1;u2]) components (real values) and computes a symbol number (integer value) in accordance with the M-PSK modulator block. The phase is evaluated with the equation :

$\displaystyle \varphi_{demod}\,=\,\arctan\left(\frac{-u_{2}}{u_{1}}\right)
$

and the block computes the output integer value with the formula:

$\displaystyle y\,=\,(int)\frac{\varphi_{demod}M}{2\pi}
$

where M is the number of states.

Dialog box

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

Default properties

Interfacing function

DEMODPSK_f.sci

Computational function (type 4)


/* 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 "scicos_block.h"
#include "machine.h"
#include <math.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]);
 }
}

See also

Authors

IRCOM Group Alan Layec