Bloc Scicos
eng - fr


Bloc démodulateur de Modulation d'Amplitude en Quadrature

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

Contenu

Palette

Description

Le bloc démodulateur M-QAM fonctionne de paire avec le bloc modulateur M-QAM. Pour fonctionner correctement, les valeurs en entrée de ce bloc doivent être entières, comme définies à la sortie du bloc modulateur. Le paramètre 'Number of states' de la boîte de dialogue, qui définit le nombre d'états de la modulation, doit être calculé avec la formule :

$\displaystyle M=2^{k}
$

avec k un nombre entier pair.

Boîte de dialogue

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

Propriétés par défaut

Fonction d'interface

DEMODQAM_f.sci

Fonction de calcul (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]);
 }
}

Voir aussi

Auteurs

IRCOM Group Alan Layec