IFORMATIQUE APPLIQUEE TD1 Dans le cadre de ces TD, nous procédons à la simulation d'un système de télécommunication numérique. Cette opération va nous permettre d'étudier la performance du système sous test. Le critère le plus important pour décrire la performance d'un système de transmission numérique est celui du taux d'erreur binaire (TEB). Le système présenté ci-dessous est un exemple typique d'une chaîne de communication. La source binaire fournit des symboles binaires indépendants. Le modulateur transforme un nombre défini de bits (M pour une modulation M-aire) en un symbole. Ce symbole est choisi dans un ensemble qui forme une constellation sur le plan complexe. Par exemple, pour le cas M4, nous utilisons souvent une constellation MDP4. Le canal de transmission peut varier suivant l'application réelle à simuler. Un canal additif gaussien est un modèle réaliste pour une liaison mono-trajet (communication par satellite par exemple). Côté récepteur, le démodulateur effectue l'opération inverse faite dans le modulateur pour fournir les bits les plus vraisemblables à partir des symboles reçus. Et à la fin, on comptabilise le nombre d'erreurs commises pour quantifier la performance du système global et ensuite le comparer avec d'autres systèmes éventuellement proposés. Supposons que nous allons simuler le système présenté ci-dessous. Source binaire Modulateur Canal AWG Démodulateur Calcul de TEB Simulation flux continu La première méthode est une simulation temporelle. Les bits se produisent au fur et à mesure. Dès qu il y a deux bits disponibles, le modulateur les code en MDP4, qui est en fait une valeur complexe. Le canal va ajouter à cette valeur, un bruit blanc gaussien. La sortie du canal sera démodulée pour donner deux bits détectés. Ces derniers sont comparés avec les deux bits envoyés et on compte le nombre d erreurs éventuelles dans cette transaction. En répétant cette procédure pour un grand nombre de bits, le taux d'erreur obtenu s'approche à la probabilité d'erreur du système. Traitement par paquet Autre façon de faire, est de générer une séquence de symboles et appeler les fonctions C++ pour traiter la séquence complète. Cette méthode est très souvent bien plus rapide que la méthode précédente car à chaque appel à une fonction, un paquet de données est traité. 27-28 1
Travail demandé ous allons écrire des fonctions pour des tâches souvent utilisées dans une chaîne de communication numérique. 1- Pour générer une séquence binaire aléatoire, nous utiliserons la fonction "FillRandomBit( )" déjà développée. Ainsi, la ligne suivante va remplir le vecteur "bit" par des données binaires et aléatoires. DVector bit(1); bit.fillrandombit(); 2- Ecrire une fonction qui retourne une vecteur complexe qui est le résultat d'une modulation MDP4 suivant le codage de Gray. ZVector sym; sym bit._mod(); 1 Im Re Remarque1 : utilisez la loi Gray pour coder les bits en symbole comme présentée sur la constellation. Remarque2 : la taille du vecteur "sym" est la moitié de la taille du vecteur "bit". 11 1 3- On s'occupe maintenant au canal AWG (Additive White Gaussian oise). Vous trouverez à l'annexe un programme en C qui génère une variable aléatoire gaussienne. Utiliser ce programme pour écrire une fonction qui remplira un vecteur complexe par des données gaussiennes avec la moyenne et la variance données en argument. Ainsi, les lignes ci-dessous devront fonctionner correctement. ZVector bruit(5); Bruit.FillGaussien(moyenne (de type complexe), variance(de type double)); Remarque : La variance de chaque partie réelle ou imaginaire est la variance passée en argument divisée par deux. Remarque : Pour obtenir des information sur la fonction de génération du bruit gaussien, allez visiter le site http://www.library.cornell.edu/nr/bookcpdf.html où vous trouverez des infos au paragraphe 7-2 de cette page. 4- Additionner le bruit complexe au signal modulé en MDP4 : ZVector sig_rec(5); sig_rec bruit + sym; 5- Ecrire une fonction pour démoduler la séquence des symboles MDP4 reçue et retourner une séquence binaire. Utiliser le codage de Gray pour démoduler les symboles reçus. Bit_hat sig_rec._demod(); 6- Ecrire une fonction pour comparer deux vecteurs et retourner le nombre de fois où les deux séquences sont différente. int error compare(bit, bit_hat); 27-28 2
7- Ecrire le programme principal pour simuler le système ci-dessus et calculer le taux d erreur binaire. On effectue la simulation pour 1 paquet de taille 1 bits. ous fixons, moyennant des constantes, les valeurs suivantes : le rapport énergie binaire sur la densité spectrale monolatérale de bruit égal à 3 db (E b / 3dB) Lancer la simulation pour calculer le taux d erreur binaire pour plusieurs valeurs de E b / allant de db à 6 db. Remarque : La courbe théorique est la suivante : AEXE Programme générant une variable aléatoire gaussienne. double n_gaussien( double moy, double var ) // LOI GAUSSIEE // retourne un evenement suivant une loi gaussienne de moyenne moy // et de variance var { static long iset; static double gset; double fac,rsq,v1,v2; const double RAD_MAX_22./RAD_MAX; } if (iset){ do{ v1rand()*rad_max_2-1.; v2rand()*rad_max_2-1.; rsqv1*v1+v2*v2; } while (rsq > 1. rsq.); facsqrt(-2.*log(rsq)/rsq); gsetv1*fac; iset1; return v2*fac*sqrt(var)+moy; } else { iset; return gset*sqrt(var)+moy; } 27-28 3
IFORMATIQUE APPLIQUEE TD2 ous allons utiliser un code cyclique pour protéger les informations. Le diagramme en bloc du système est présenté sur la figure suivante. Source binaire Codeur cyclique Entrelaceur modulateur Canal AWG Calcul de TEB Décodeur cyclique Désentrelaceur Démodulateur Le circuit d un codeur cyclique est donné ci-dessous : porte g g 1 g 2 g 3 g m-1 D D D D D b n c k Le polynôme générateur d un codeur en bloc g(x) x m + g n-1 x m-1 + + g 1 x + g. Si les coefficients g i sont connus, le codeur est parfaitement identifié et le circuit ci-dessus est donc connu. Le message est un paquet de k bits qui entre dans le circuit à raison de 1 bits par cycle d horloge. La porte à ce moment là laisse passer les bits vers les registres. En même temps, l interrupteur est en état haut, ce qui veut dire que les données sortent en même temps en sortie pour construire la partie systématique. Une fois k bits sont arrivés, l interrupteur se bascule en bas et la porte se ferme (zéro en sortie). Le circuit se transforme alors en un registre à décalage et les contenus des registres sortent un par un en sortie. Ce qui veut dire que m bits de parité s ajoutent à la fin de k bits d information. ous avons donc une séquence de nk+m bits en sortie pour une séquence de k bits en entrée. Travail demandé 1. Faire une fonction pour coder un vecteur de bits d information et retourner un vecteur de bits codés. On suppose les données suivantes : k4, n7 et le polynôme générateur g(x)x 3 +x+1 (13 en octal). DVector DVector::cod_cyc_13() ; Remarque : la taille du vecteur bits est un multiple de 4, disons 4m. La taille du vecteur retourné est donc 7m. 27-28 4
2. Faire une fonction pour entrelacer un vecteur et retourner le même vecteur mais dans désordres. Pour cette opération, elle écrit les données dans une matrice ligne par ligne et elle les sort colonne par colonne. On donne en argument le nombre de lignes et de colonnes. DVector DVector::entrelaceur(int ligne ; int col) ; 3. Faire une fonction de décodage pour décoder un vecteur de bits codés reçu et retourner le vecteur corrigé. On suppose les mêmes caractéristiques que le codeur. DVector DVector::decod_cyc_13() ; 4. Effectuer une simulation pour 4. de bits et tracer la courbe de taux d erreur binaire en fonction de E b / allant de à 6 db. Y a-t-il une amélioration? Remarque : Dans le calcul de E b il faut tenir compte du fait que pour chaque bit d'information, n/k bits codés sont envoyés. E (inf) Eb ( code) * 7 / 4 Es / 2 * 7/ 4 1/ 2 * 7 / 4 b 7/8 2 On en déduit donc la variance de bruit à ajouter au signal : var σ 7 Eb / 1 Si E b / est donné en db (Eb) : var 1 8 7/8 E / 5. Faites afficher le taux d erreur sur les bits d information et sur les bits codés. Qu est que vous en déduisez? b 27-28 5