Scicos Block
eng - fr


Quadrature Amplitude Modulation demodulator Block

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

Contents

Palette

Description

The M-QAM demodulator block is the pair block of the M-QAM modulator block. The input values of this block must be integers, as defined at the output of the modulator block, in order to properly work. The dialogue parameter 'Number of states', which defines the number of states of the modulation must be a value computed with the formula :

$\displaystyle M=2^{k}
$

with k an even integer number.

Dialog box

\begin{figure}\begin{center}
\epsfig{file=DEMODQAM_f_gui.eps,width=290pt}
\end{center}\end{figure}

Default properties

Interfacing function

DEMODQAM_f.sci

Computational function (type 4)


/* demodqam Scicos demodulator QAM block
 * Type 4 simulation function ver 1.0 - scilab-3.0
 * 5 janvier 2005 - IRCOM GROUP - Author : A.Layec
 */
 
/* REVISION HISTORY :
 * $Log$
 */
  
#include "machine.h"
#include <stdio.h>
#include "scicos_block.h"

/* Cette fonction de simulation réalise un decodage QAM défini par la fonction 
 * modqam.c. Les signaux I et Q reçu en entrée sont converti aux valeurs des
 * bits de poids fort et des bits de poids faibles du numéro symbole.
 * Les valeurs converties sont ensuite additionnées et la somme est placée
 * dans le registre de sortie y[].
 *
 * Entrées régulières : u1[0..insz[0]-1]: vecteur des signaux I
 *                      u2[0..insz[0]-1]: vecteur des signaux Q
 * Sortie régulière :   u[0..insz[0]-1] : vecteur des numéros symboles
 * Entrée évènementielle : instants de décision
 * Sortie évènementielle : néant
 * Paramètres entiers : ipar[0..insz[0]-1] : vecteur des nombres de bits.
 *
 * nb : ne fonctionne que pour des modulations avec un nombre de valeurs
 *     identiques pour chaque axes I et Q(16QAM, 64QAM, 256QAM, ...)
 */

/* demodqamv_c routine de calcul d'un démodulataur mQAM
 *
 * Entrées :
 * n :longueur des vecteurs d'entrées
 * m :longueurs des mots binaires en nombre de bits (vecteur)
 * i_c :adresse de départ du vecteur de la composante I
 * q_c :adresse de départ du vecteur de la composante Q
 *
 * Sortie :
 * y : adresse de départ du vecteur du symbole
 *
 * Dépendances:
 */
void demodqamv_c(int *n,int *m,double *i_c,double *q_c,double *y)
{
 /*déclaration des variables*/
 int i,j;
 int ng,nd;
 int d,g;
 
 for(i=0;i<(*n);i++)
 {
  /*Récupération du nombre d'états*/
  /*n=block->ipar[i];*/
  
  /*Calcul des sélecteurs binaires (c'est maladroit!!)*/
  nd=(1<<(m[i])/2)-1;
  ng=(1<<(m[i]))-1-nd;
  /*fprintf(stderr,"nd=%d, ng=%d\n", nd,ng);*/

  /*récupération des valeurs d'entrée*/
  d=(int)i_c[i];
  g=(int)q_c[i];

  /*Calcul les nombres binaires droit et gauche*/
  d=(d+nd)/2;
  g=((g+nd)/2)<<((m[i])/2);

  /*Calcul du registre de sortie y[]*/
  y[i]=d+g;
 }
 return;
}

/*prototype*/
void demodqam(scicos_block *block,int flag)
{
 /*déclaration des variables*/
 double *y;
 double *u1,*u2;
 int i,n;
 int nu;
 int nd,ng;
 int d,g;

 /*Récupération des adresses des ports réguliers*/
 y=(double *)block->outptr[0];
 u1=(double *)block->inptr[0];
 u2=(double *)block->inptr[1];

 /*récupération de la taille des ports d'entrées*/
 nu=block->insz[0];
 
 /*Le flag 1 calcule le numéro symbole*/
 if(flag==1)
 {
  /*Appel demoqamv_c*/
  demodqamv_c(&nu,&block->ipar[0],&u1[0],&u2[0],&y[0]);
 }
}

See also

Authors

IRCOM Group Alan Layec