Outils pour utilisateurs

Outils du site


tptelecomnum

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tptelecomnum [2019/03/22 17:22]
bvandepo
tptelecomnum [2019/04/04 08:48] (Version actuelle)
bvandepo
Ligne 87: Ligne 87:
 <color #​FF0000>​**A faire uniquement à la première séance:​**</​color>​ <color #​FF0000>​**A faire uniquement à la première séance:​**</​color>​
  
-Copier et executer ​les instructions suivantes dans une console lxterm+Copier et exécuter ​les instructions suivantes dans une console lxterm
  
   echo commence   echo commence
Ligne 186: Ligne 186:
 </​ifauth>​ </​ifauth>​
  
- +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_gps/​TODO.jpg}}  ​Après avoir écrit votre code, vérifiez à l'​oscilloscope ​le signal ​généré en expliquant ​la fréquence du signal carré généré.
-Après avoir écrit votre code, vérifiez à l'​oscilloscope ​la visualisation du signal ​attendu (par contrôle de la fréquence du signal carré généré).+
  
  
Ligne 197: Ligne 196:
   echo fini   echo fini
   ​   ​
- 
-  
  
  
 -------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------
-=====Exercice ​2Génération du signal NRZ/BPSK sur la voie I===== +=====Exercice ​1bis: Pour Debugguer===== 
- + 
- +
-Dans cet exercice, vous allez générer un signal NRZ à partir de données stockées en mémoire ou calculées au fil du temps. Dans un premier temps, vous compléterez la fonction suivante, qui remplit le tableau ptr_i avec des valeurs 0 ou 1 dépendant de la donnée à coder src qui est sur size_src bits **en commençant par le bit de poids faible**. Cette fonction retourne le nombre de symboles générés dans les tableaux I et Q; +
-   +
-  int encode_bpsk(char src, char * ptr_i, unsigned char size_src) +
- +
- +
-{{ http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_telecomnum/​encode_bpsk.png?​400 }} +
-===Travail à faire=== ​  +
-Implémentez la fonction encode_bpsk en vous aidant des commentaires de celle-ci. Dans un deuxième temps, vous compléterez la fonction loop (en vous aidant du code de l'​exercice précédent) pour : +
- +
-  - générer une donnée à transmettre sur 8-bits (0x5A) +
-  - appeler la fonction encode_bpsk ​ et affecter la valeur retournée par cette fonction à la variable **data_size**. La fonction attend en argument un tableau pour stocker les symboles produits. Vous utiliserez donc le tableau déjà défini **i_buffer** +
-  - écrire le résultat du traitement (les **data_size** cases du tableaux **i_buffer**) dans la FIFO pour I uniquement (désactiver la fifo Q) en utilisant la fonction **write_fifo_I_Q** +
- +
-{{ http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_telecomnum/​bpsk_encoding_chain.png?​600 }} +
- +
- +
-Executer le même programme mais pour une donnée valant 0xB5. Comparer les signaux observés à l'​oscilloscope avec les signaux prévus et conclure. +
- +
-====Pour Debugguer==== +
 Arduino ne permet pas facilement l'​utilisation d'un débuggueur matériel. Il est donc pénible de détecter les erreurs dans un programme. Pour vous aider, la fonction **void displayBuffer(const char * name, char * tab, char tab_size)** est fournie. Cette fonction permet l'​affichage d'un tableau de valeur dont le nom est donné en chaine de caractères **name**, dont l'​adresse de départ en mémoire est donné par **tab** et dont le nombre de case est de **tab_size**. Le code de la fonction d'​affichage,​ à copier dans votre programme est donné ci dessous: Arduino ne permet pas facilement l'​utilisation d'un débuggueur matériel. Il est donc pénible de détecter les erreurs dans un programme. Pour vous aider, la fonction **void displayBuffer(const char * name, char * tab, char tab_size)** est fournie. Cette fonction permet l'​affichage d'un tableau de valeur dont le nom est donné en chaine de caractères **name**, dont l'​adresse de départ en mémoire est donné par **tab** et dont le nombre de case est de **tab_size**. Le code de la fonction d'​affichage,​ à copier dans votre programme est donné ci dessous:
  
 <file cpp debug.cpp>​ <file cpp debug.cpp>​
-//#DEFINE ​DEBUG+//#define ​DEBUG
 void displayBuffer(const char * name, char * tab, char tab_size) void displayBuffer(const char * name, char * tab, char tab_size)
 { {
Ligne 234: Ligne 210:
 Serial.print("​Etat du buffer "); Serial.print("​Etat du buffer ");
 Serial.print(name);​ Serial.print(name);​
-Serial.println(":​ ");+Serial.print("​ contenant "); 
 +Serial.print(tab_size,​DEC);​ 
 +Serial.println(" ​case(s) ​: ");
 for (int i=0;​i<​tab_size ;i++) for (int i=0;​i<​tab_size ;i++)
 { {
Ligne 250: Ligne 228:
   displayBuffer("​buffer_i",​ buffer_i,​8);​   displayBuffer("​buffer_i",​ buffer_i,​8);​
 L'​affichage se faisant sur la liaison série, il ralentie l'​exécution du programme, vous veillerez à ne l'​activer que lorsque cela sera nécessaire en utilisant: L'​affichage se faisant sur la liaison série, il ralentie l'​exécution du programme, vous veillerez à ne l'​activer que lorsque cela sera nécessaire en utilisant:
-  #DEFINE ​DEBUG+  #define ​DEBUG
 Vous veillerez à désactivez l'​affichage en commentant la ligne définissant le symbole **DEBUG** pour le test en temps réel dans lequel vous observez les signaux à l'​oscilloscope. Vous veillerez à désactivez l'​affichage en commentant la ligne définissant le symbole **DEBUG** pour le test en temps réel dans lequel vous observez les signaux à l'​oscilloscope.
 +
 +
 +Pour visualiser le contenu des tableaux dans la console série Arduino, vous veillerez à la configurer à 115200Bauds.
 +
 +
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_gps/​TODO.jpg}} ​ Appeler la fonction d'​affichage pour visualiser les données du tableau utilisé pour stocker les échantillons du signal carré généré à l'​exercice 1. Dans les exercices suivants, vous pourrez utiliser cette fonction pour visualiser le contenu des tableaux remplis par les différentes fonctions que vous implémenterez.
 +
 +
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}} Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console:
 +  echo commence
 +  cd ~/​Arduino/​telecom_num_a_trou_2
 +  git commit -a -m'​debugger'​
 +  gitk & 
 +  echo fini
 +
 +--------------------------------------------------------------------------------------------------------
 +=====Exercice 2: Génération du signal NRZ/BPSK sur la voie I=====
 +
 +
 +Dans cet exercice, vous allez générer un signal NRZ à partir de données stockées en mémoire ou calculées au fil du temps. Dans un premier temps, vous compléterez la fonction suivante, qui remplit le tableau ptr_i avec des valeurs 0 ou 1 dépendant de la donnée à coder src qui est sur size_src bits **en commençant par le bit de poids faible**. Cette fonction retourne le nombre de symboles générés dans les tableaux I et Q;
 +  ​
 +  int encode_bpsk(char src, char * ptr_i, unsigned char size_src)
 +
 +
 +{{ http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_telecomnum/​encode_bpsk.png?​400 }}
 +
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_gps/​TODO.jpg}} ​ Implémentez la fonction encode_bpsk en vous aidant des commentaires de celle-ci. Dans un deuxième temps, vous compléterez la fonction loop (en vous aidant du code de l'​exercice précédent) pour :
 +
 +  - générer une donnée à transmettre sur 8-bits (0x5A)
 +  - appeler la fonction encode_bpsk ​ et affecter la valeur retournée par cette fonction à la variable **data_size**. La fonction attend en argument un tableau pour stocker les symboles produits. Vous utiliserez donc le tableau déjà défini **i_buffer**
 +  - écrire le résultat du traitement (les **data_size** cases du tableaux **i_buffer**) dans la FIFO pour I uniquement (désactiver la fifo Q) en utilisant la fonction **write_fifo_I_Q**
 +
 +{{ http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_telecomnum/​bpsk_encoding_chain.png?​600 }}
 +
 +
 +Exécuter le même programme mais pour une donnée valant 0xB5. Comparer les signaux observés à l'​oscilloscope avec les signaux prévus et conclure.
  
  
Ligne 311: Ligne 325:
 Dans cet exercice, nous allons ajouter une étape au codage NRZ afin de coder les bits de données au format Manchester. Dans cet exercice, nous allons ajouter une étape au codage NRZ afin de coder les bits de données au format Manchester.
  
-===Travail à faire=== +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_gps/​TODO.jpg}}  ​Complétez dans un premier temps la fonction **manchester_as_xor** (l'​opérateur **XOR** est défini au début du fichier). **Attention,​ dans le tableau de symboles généré par encode_bpsk,​ les symboles sont stockés en partant du bit de poids faible.**
-Complétez dans un premier temps la fonction **manchester_as_xor** (l'​opérateur **XOR** est défini au début du fichier). **Attention,​ dans le tableau de symboles généré par encode_bpsk,​ les symboles sont stockés en partant du bit de poids faible.**+
  
 {{ http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_telecomnum/​manchester.png?​400 }} {{ http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_telecomnum/​manchester.png?​400 }}
Ligne 321: Ligne 334:
  
 Une fois le programme compilé et chargé, vérifiez à l'​oscilloscope le signal généré. Une fois le programme compilé et chargé, vérifiez à l'​oscilloscope le signal généré.
 +
 +
 +Exécuter le même programme mais pour une donnée valant 0xB5. Comparer les signaux observés à l'​oscilloscope avec les signaux prévus et conclure.
 +
  
  
Ligne 375: Ligne 392:
  
    
- +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_gps/​TODO.jpg}}  ​Complétez la fonction **dsss_as_table** ​ en utilisant une clé de codage sur 8 bits définie dans le tableau **const char dsss_key2[8] = {0,​0,​0,​0,​0,​0,​0,​0};​**. La fonction **dsss_as_table** devra, pour chacun des bits qu'​elle doit traiter, générer la séquence correspondant à la clef si le bit est à 0 et la séquence complémentaire si le bit est à 1 (utilisation du XOR). 
-Complétez la fonction **dsss_as_table** ​ en utilisant une clé de codage sur 8 bits définie dans le tableau **const char dsss_key2[8] = {0,​0,​0,​0,​0,​0,​0,​0};​**. La fonction **dsss_as_table** devra, pour chacun des bits qu'​elle doit traiter, générer la séquence correspondant à la clef si le bit est à 0 et la séquence complémentaire si le bit est à 1 (utilisation du XOR). +
  
 Testez votre programme de la même manière que pour les exercices précédents. Avec la clef fournie, vous devez obtenir le même signal que pour l'​encodage BPSK mais avec une durée de bit huit fois plus longue. Testez votre programme de la même manière que pour les exercices précédents. Avec la clef fournie, vous devez obtenir le même signal que pour l'​encodage BPSK mais avec une durée de bit huit fois plus longue.
Ligne 461: Ligne 477:
 {{ http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_telecomnum/​encode_qpsk.png?​400 }} {{ http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_telecomnum/​encode_qpsk.png?​400 }}
  
-Afin de construire ce tableau, complétez le diagramme de constellation fourni avec :+ 
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_gps/​TODO.jpg}}  ​Afin de construire ce tableau, complétez le diagramme de constellation fourni avec :
   * les positions des combinaisons I/Q sur la constellation   * les positions des combinaisons I/Q sur la constellation
   * le tableau associant pour chaque position les tensions (+V/-V) à générer sur les voies I et Q   * le tableau associant pour chaque position les tensions (+V/-V) à générer sur les voies I et Q
Ligne 470: Ligne 487:
  
 Testez la fonction **encode_qpsk** comme dans les exercices précédents (attention pour cette exercice il faut penser à mettre le enable de la fifo Q à '​1'​ lors de l'​appel de la fonction **write_fifo_I_Q**). Testez la fonction **encode_qpsk** comme dans les exercices précédents (attention pour cette exercice il faut penser à mettre le enable de la fifo Q à '​1'​ lors de l'​appel de la fonction **write_fifo_I_Q**).
 +
 +
 +
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}} Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console:
 +  echo commence
 +  cd ~/​Arduino/​telecom_num_a_trou_2
 +  git commit -a -m'​QPSK'​
 +  gitk & 
 +  echo fini
 +  ​
 +
 +
 +
  
 <ifauth @prof> <ifauth @prof>
Ligne 516: Ligne 546:
    
  
-  +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_gps/​TODO.jpg}} ​ ​Complétez la fonction **encode_qpsk_gray**. Cette fonction est presque identique à la fonction **encode_qpsk** mais définit une association différente entre les duplets et les symboles I et Q. Complétez le diagramme de constellation fourni puis construisez la table associative. Enfing, codez vos tableaux associatifs dans les variables **qpsk_i_chan_gray** et **qpsk_q_chan_gray**.
-  +
-Complétez la fonction **encode_qpsk_gray**. Cette fonction est presque identique à la fonction **encode_qpsk** mais définit une association différente entre les duplets et les symboles I et Q. Complétez le diagramme de constellation fourni puis construisez la table associative. Enfing, codez vos tableaux associatifs dans les variables **qpsk_i_chan_gray** et **qpsk_q_chan_gray**.+
  
  
Ligne 538: Ligne 566:
  
    
- +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_gps/​TODO.jpg}}  ​Sauvez le sketch arduino sous un nouveau nom pour garder une version du code écrit précédemment dans un fichier.
-Sauvez le sketch arduino sous un nouveau nom pour garder une version du code écrit précédemment dans un fichier.+
  
 Il vous faut maintenant adapter le programme pour piloter le DAC avec des valeurs autres que 0x000 et 0x3FF. En 16 QAM, les données sont découpées en mots de 4 bits. 2 bits sont envoyés sur le canal I et 2 bits sont envoyés sur le canal Q simultanément. Les voies du DAC doivent donc être pilotées avec des valeurs permettant de représenter 4 niveaux distincts. ​ Il vous faut maintenant adapter le programme pour piloter le DAC avec des valeurs autres que 0x000 et 0x3FF. En 16 QAM, les données sont découpées en mots de 4 bits. 2 bits sont envoyés sur le canal I et 2 bits sont envoyés sur le canal Q simultanément. Les voies du DAC doivent donc être pilotées avec des valeurs permettant de représenter 4 niveaux distincts. ​
Ligne 556: Ligne 583:
 Le remplissage des fifos sera réalisé par la fonction **int codage16QAM(char src, unsigned int size_src, char * pf_i, char * pf_q)** que vous devez coder. Les données stockées dans chacune des 2 fifos seront des valeurs 0,1,2 ou 3. Le remplissage des fifos sera réalisé par la fonction **int codage16QAM(char src, unsigned int size_src, char * pf_i, char * pf_q)** que vous devez coder. Les données stockées dans chacune des 2 fifos seront des valeurs 0,1,2 ou 3.
  
-===== Envoi d'un message =====+ 
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}} Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console: 
 +  echo commence 
 +  cd ~/​Arduino/​telecom_num_a_trou_2 
 +  git commit -a -m'​16QAM'​ 
 +  gitk &  
 +  echo fini 
 +   
 + 
 + 
 +=====Exercice 8:Envoi d'un message ===== 
 + 
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_gps/​TODO.jpg}} ​
  
 Ajoutez à votre code la déclaration du message suivant. Ajoutez à votre code la déclaration du message suivant.
Ligne 577: Ligne 616:
   //#​ENABLE_QAM ​   //#​ENABLE_QAM ​
   ​   ​
- 
-<ifauth @prof> 
- 
  
 {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}} Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console: {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}} Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console:
   echo commence   echo commence
   cd ~/​Arduino/​telecom_num_a_trou_2   cd ~/​Arduino/​telecom_num_a_trou_2
-  git commit -a -m'16 QAM'+  git commit -a -m'Message 16QAM'
   gitk &    gitk & 
-  echo fini+  echo fini   
 + 
 +<ifauth @prof> 
 + 
 + 
   ​   ​
  
tptelecomnum.1553271735.txt.gz · Dernière modification: 2019/03/22 17:22 par bvandepo