Attention aux étudiants d'IMT Atlantique : Ce projet est destiné à des fins pédagogiques. Toute reproduction non autorisée constitue une infraction aux règles académiques et peut entraîner des sanctions. Utilisez-le uniquement comme référence pour votre apprentissage.
Simulation d'un système de chaîne de transmission analogique en Java
Accéder à la Javadoc
·
Accéder au dernier rapport
Table des matières
- Description du projet
- Paramètres
- TP6: Cas d'étude
- TP5: Transmission analogique avec un codage de canal
- TP4: Transmission analogique avec un canal bruité à trajets multiples
- TP3: Transmission analogique avec un bruit gaussien
- TP2: Transmission analogique non bruitée
- TP1: Transmission élémentaire back-to-back
L’objectif consiste à transmettre un message d’un point d’entrée à un point de sortie, via un canal de transmission (ou de communication). Le message d’entrée est émis par une source d’entrée. Les messages considérés dans cet atelier seront des suites de symboles binaires (0 ou 1) correspondant à des informations échantillonnées et quantifiées sur deux niveaux logiques. Le message de sortie sera – autant que faire se peut - semblable au message d’entrée. Ce dernier étant incapable de traverser le canal de propagation tel quel, on l’adaptera aux caractéristiques physiques du canal en le convertissant au moyen d’un transducteur en un « vecteur » adapté à la transmission, appelé signal. Ce dernier sera injecté dans le canal au moyen d’un émetteur. À l’autre extrémité du canal, il sera récupéré et traité par le récepteur et le transducteur de réception.
Les principaux canaux de transmission rencontrés dans la nature sont : le canal Hertzien (espace libre), le canal guidé électrique (câble), le canal guidé Optique (fibre), le canal acoustique aérien et le canal acoustique sous-marin. Chaque canal de propagation devant être utilisé à une fréquence bien particulière, le message est transposé autour de cette fréquence par l’opération de modulation. En outre, le canal sera une source de bruit pour les signaux qu’il transporte. Les principales sources de bruit rencontrées en pratique sont : la dispersion de trajets, la dispersion chromatique, le bruit de détection (grenaille), le bruit thermique et le bruit d’amplification. Par la suite, chaque composant du système de transmission entre la source et la destination sera dénommé transmetteur.
Schéma élémentaire d'une chaîne de transmissionLe simulateur accepte divers paramètres pour configurer la transmission :
-mess <m>
: Définit le message à transmettre ou sa longueur.- Si
m
comporte plus de 7 chiffres composés de 0 et de 1,m
est le message à transmettre. - Si
m
comporte moins de 7 chiffres et correspond à la représentation en base 10 d'un entier, cet entier est la longueur du message que le simulateur doit générer aléatoirement et transmettre. - Par défaut : 100 bits aléatoires.
- Si
-s
: Active les sondes pour visualiser les signaux intermédiaires.-seed <v>
: Définit une graine pour la génération aléatoire, permettant de rejouer une simulation.-form <f>
: Choix de la forme d'onde pour le signal analogique (NRZ
,NRZT
,RZ
). Par défaut :RZ
.-nbEch <ne>
: Nombre d'échantillons par bit pour le signal analogique. Par défaut : 30.-ampl <min> <max>
: Définit l'amplitude minimale et maximale du signal analogique. Par défaut :0.0
à1.0
.-snrpb <s>
: Rapport signal/bruit (Eb/N0) en dB pour ajouter du bruit gaussien.-ti <dt> <ar>
: Simule des trajets multiples (décalagedt
, amplitude relativear
). Maximum de 5 couples.-codeur
: Active le codage de canal pour améliorer la transmission.
- Utiliser le simulateur sur un cas d'étude précis (voir sujet).
plot_teb_comparaison.py
: Trace la courbe du TEB théorique et du TEB pratique pour la modulation NRZ.- Suppression des scripts
plot_teb_vs_snr.py
etplot_proba_erreur_vs_ebn0.py
.
- Ajout des classes
ExportCSVEnvironnement1
etExportCSVEnvironnement2
pour générer des valeurs en fonction de différents paramètres et trouver les combinaisons qui répondent aux attentes du cas d'étude.
- Ajouter la possibilité d'utiliser un codage de canal pour permettre de :
- Repérer et réparer des erreurs eventuelles lors de la transmission.
- Réduire le taux d'erreur binaire de la chaîne de transmission.
- Mesurer les améliorations.
-codeur
: Utilisation d'un codage de canal. Valeur par défaut : non utilisé.
- Modification du script
runTests
pour y ajouter une fonction permettant de shuffle les flags du CLI.
- Ajout des classes
Codeur
etDecodeur
pour utiliser un canal de codage. - Ajout de la classe
CodeurDecodeurTest
pour tester le comportement des classesCodeur
etDécodeur
. - Modification de la classe
Simulateur
pour prendre en compte le flag-codeur
. - Ajout de la classe
ExportCSVTEBComparaisonCodeur
pour comparer les performances avec et sans codeur.
- Ajouter la possibilité d'utiliser une transmission multi-trajets.
-ti <[int] [float]> <[int] [float]> ...
: Utilisation d'une transmission analogique multi-trajets. 5 couples de valeurs au maximum.dt
(int) précise le décalage temporel (en nombre d'échantillons)ar
(float) précise l'amplitude relative du signal du trajet indirect par rapport à celle du trajet direct.
plot_teb_multi_trajets.py
: Trace les courbes de la probabilité d'erreur binaire en fonction :- Du nombre de trajets indirects ajoutés.
- De l'amplitude des trajets indirects.
- Du décalage temporel des trajets indirects.
- Ajout de la classe
TransmetteurMultiTrajets
pour utiliser un canal de transmission à trajets multiples. - Ajout de la classe
TransmetteurMultiTrajetsTest
pour tester le comportement de la classeTransmetteurMultiTrajets
.
- Générer un bruit gaussien et l'ajouter lors de la transmission.
- Vérifier que le bruit suit bien une loi gaussienne en traçant un histogramme.
-snrpb [float]
: Choix du RSB par bit en dB. Valeur par défaut : 0.
Ce répertoire contient des scripts utiles au projet et aux tests visuels :
histogram_noise.py
: Trace l'histogramme des valeurs de bruit gaussien.plot_teb_vs_snr.py
: Trace la courbe du TEB en fonction du SNR pour les différentes modulations.plot_proba_erreur_vs_ebn0.py
: Trace la courbe de la probabilité d'erreur binaire en fonction du rapport Eb/N0 pour les différentes modulations.
- Ajout de la classe
TransmetteurGaussien
pour générer un signal analogique avec un bruit gaussien. - Ajout de la classe
TransmetteurGaussienTest
pour tester le comportement de la classeTransmetteurGaussien
- Modifications des classes
Simulateur
,Emetteur
etRecepteur
pour intégrer le transmetteur gaussien.
- Ajouter les modules d'émission et de réception (resp. Émetteur et Récepteur) pour prendre en compte la nature analogique du canal.
-form [string]
: Choix du form à utiliser. Valeur par défaut : RZ. Les options disponibles sont :NRZ
NRZT
RZ
-ampl [float] [float]
: Choix de l'amplitude, la première valeur est l'amplitude minimale et la seconde est l'amplitude maximale. Valeurs par défaut : 0 et 1.-nbEch [int]
: Choix du nombre d'échantillons par bit. Valeur par défaut : 30.
Ce répertoire contient un ensemble de fichiers .jar qui permettent d'importer des fonctionnalités déjà codées.
Il contient les fichiers suivant :
easymock-5.4.0.jar
: Permet de simuler le résultat de fonctions.junit-4.13.1.jar
: Permet de réaliser des tests unitaires pour tester le bon fonctionnement des méthodes.hamcrest-core-1.3.jar
: Dépendance pour JUnit.
- Mettre en place une chaîne de transmission simple avec un transmetteur logique "parfait".
bin/
: Répertoire contenant le form compilé.docs/
: Documentation générée automatiquement sous forme de Javadoc.src/
: Répertoire contenant le form source du projet.cleanAll
: Script Bash qui nettoie le projet en supprimant l'archive générée, les fichiers compilés et la documentation.compile
: Script Bash utilisé pour compiler le projet.genDoc
: Script Bash pour générer la documentation Javadoc à partir du form source.runTests
: Script Bash qui exécute les tests pour vérifier le bon fonctionnement du projet.README.md
: Fichier de documentation (ce fichier) qui détaille les composants et scripts du projet.