Outils pour utilisateurs

Outils du site


tptns2018_2

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
tptns2018_2 [2019/03/18 20:47]
bvandepo
tptns2018_2 [2019/03/22 11:17] (Version actuelle)
bvandepo
Ligne 75: Ligne 75:
 </​file>​ </​file>​
  
-Une directive **#include "convertisseurs.h"** est présente dans le fichier filtretrace.h pour pouvoir appeler ces fonctions.+Une directive **#include "convertisseur.h"** est présente dans le fichier filtretrace.h pour pouvoir appeler ces fonctions.
  
  
Ligne 131: Ligne 131:
 === Visualisation de signaux quantifiés (45' max) === === Visualisation de signaux quantifiés (45' max) ===
  
-  - On souhaite visualiser sur une même fenêtre mais sur 2 axes différents (car les échelles sont différentes) l'​impulsion et l'​impulsion quantifiée pour 7 échantillons. Vous devez donc utiliser **simuADC()** pour quantifier échantillon par échantillon tout le signal impulsion et stocker le résultat dans un tableau impQuant. Simulez un CAN ayant une plage de conversion de 0/3,3V sur 4 bits (déclarez vmin, vmax, nbbits comme constantes globales).+  - On souhaite visualiser sur une même fenêtre mais sur 2 axes différents (car les échelles sont différentes) l'​impulsion et l'​impulsion quantifiée pour 7 échantillons. Vous devez donc utiliser **simuADC()** pour quantifier échantillon par échantillon tout le signal impulsion et stocker le résultat dans un tableau impQuant. Simulez un CAN ayant une plage de conversion de 0 à 3,3V sur 4 bits (déclarez vmin, vmax, nbbits comme constantes globales).
     - Créez une nouvelle fonction **void code_tparchi2(void)** dans le fichier tparchi1.cpp.     - Créez une nouvelle fonction **void code_tparchi2(void)** dans le fichier tparchi1.cpp.
     - Afficher alors les deux signaux demandés.     - Afficher alors les deux signaux demandés.
     - Faites de même ensuite pour l'​échelon et l'​échelon quantifié.     - Faites de même ensuite pour l'​échelon et l'​échelon quantifié.
   - Vous pouvez constater que l'​impulsion et l'​échelon sont à la limite de la dynamique du CAN. Comme lors de l'​utilisation de montage à AOp (souvenez-vous du télémètre !), il est préférable de centrer les signaux d'​entrée sur la tension $(vmax+vmin)/​2$ plutôt que sur 0V. Modifiez les signaux impulsion et echelon en conséquence. Quelle est la nouvelle valeur de repos des signaux quantifiés ?   - Vous pouvez constater que l'​impulsion et l'​échelon sont à la limite de la dynamique du CAN. Comme lors de l'​utilisation de montage à AOp (souvenez-vous du télémètre !), il est préférable de centrer les signaux d'​entrée sur la tension $(vmax+vmin)/​2$ plutôt que sur 0V. Modifiez les signaux impulsion et echelon en conséquence. Quelle est la nouvelle valeur de repos des signaux quantifiés ?
-  - Générez un signal sinusoïdal d'​amplitude 1,5V, de fréquence 1 kHz correctement centré. Dans une nouvelle fenêtre, visualisez ce signal, ce signal quantifié sur 4 bits et ce signal quantifié sur 8 bits (dynamique 0/3,3V).+  - Générez un signal sinusoïdal d'​amplitude 1,5V, de fréquence 1 kHz correctement centré. Dans une nouvelle fenêtre, visualisez ce signal, ce signal quantifié sur 4 bits et ce signal quantifié sur 8 bits (dynamique 0 à 3,3V).
   - Faites valider votre travail.   - Faites valider votre travail.
        
Ligne 146: Ligne 146:
 Comme cela a été dit en introduction de ce TP (relisez là si vous avez oublié...) il faut maintenant inclure les convertisseurs analogique<​->​numérique dans **ReponseEnLigne()**. Voici les opérations à effectuer: Comme cela a été dit en introduction de ce TP (relisez là si vous avez oublié...) il faut maintenant inclure les convertisseurs analogique<​->​numérique dans **ReponseEnLigne()**. Voici les opérations à effectuer:
  
-  - Ajouter **#​include ​convertisseurs.h** dans filtretrace.h pour pouvoir appeler les fonctions de simulation de convertisseurs depuis filtretrace. +  - Ajouter **#​include ​"​convertisseur.h"** dans filtretrace.h pour pouvoir appeler les fonctions de simulation de convertisseurs depuis filtretrace. 
-  - Dans le fichier ​ filtretrace.cpp,​ intégrez dans la méthode **ReponseEnLigne** l'​appel de ces 2 fonctions (dynamique 0/3,3V , 12 bits) pour que la méthode **TraiteUnEchantillon** traite des échantillons quantifiés en entrée et en sortie:+  - Dans le fichier ​ filtretrace.cpp,​ intégrez dans la méthode **ReponseEnLigne** l'​appel de ces 2 fonctions (dynamique 0 à 3,3V , 12 bits) pour que la méthode **TraiteUnEchantillon** traite des échantillons quantifiés en entrée et en sortie:
     - appeler **simuADC** sur chaque échantillon du tableau **e[k]** et stocker sa valeur de retour dans une variable **ekquant** du bon type.     - appeler **simuADC** sur chaque échantillon du tableau **e[k]** et stocker sa valeur de retour dans une variable **ekquant** du bon type.
     - appeler **TraiteUnEchantillon** en lui fournissant en paramètre la variable précédemment calculée afin d'​obtenir l'​échantillon quantifié **skquant**.     - appeler **TraiteUnEchantillon** en lui fournissant en paramètre la variable précédemment calculée afin d'​obtenir l'​échantillon quantifié **skquant**.
     - appeler **simuDAC** en lui fournissant la valeur fournie par **TraiteUnEchantillon** et ranger la valeur de sortie de **simuDAC** dans le tableau **s[k]**.     - appeler **simuDAC** en lui fournissant la valeur fournie par **TraiteUnEchantillon** et ranger la valeur de sortie de **simuDAC** dans le tableau **s[k]**.
   - Vérifier le bon fonctionnement des 2 filtres du TP1. Expliquez l'​amplitude de la réponse impulsionnelle du filtre RIF.   - Vérifier le bon fonctionnement des 2 filtres du TP1. Expliquez l'​amplitude de la réponse impulsionnelle du filtre RIF.
 +
 +
 +{{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 ~/​TP_ARCHI_TNS_ETU
 +  git commit -a -m'​ADC/​DAC working'​
 +  gitk & 
 +  echo fini
 +  ​
 +
  
 === Prise en compte de l'​offset numérique des échantillons=== === Prise en compte de l'​offset numérique des échantillons===
 +  - Ajouter aux échantillons d'​entrée (pour les signaux impulsion et échelon définis dans le fichier **tparchi1.cpp**) un offset de 3,3V/2.
 +  - 
 +     - Calculer à la main la valeur de l'​échantillon de sortie du filtre à $k=3$ pour le RIF de l'​exercice 2 du TP1 pour le signal impulsion avec offset défini en 1) et comparer avec la valeur fournie par  **ReponseEnLigne()**. Interpréter les résultats.
 +     - Ce phénomène est provoqué par l'​offset numérique de **ek_quant** (sa valeur de repos est différente de 0). Modifiez **TraiteUnEchantillon()** pour respecter le schéma de la P11 du cours (en entrée __et__ en sortie !!). Pour cela, vous devrez calculer les bonnes valeurs pour les offsets. Ces offset seront accessibles dans la classe **Filtre** grâce aux attributs ​ suivants: ​ **offsetEntree** et **offsetSortie**.
 +     - Pour que ces deux attributs soient correctement initialisés,​ vous veillerez à ajouter les valeurs effectives pour les paramètres du constructeur de l'​objet filtre **offsetEntreeInit** et **offsetSortieInit**. Par exemple la ligne:
 +<file cpp cons1.cpp>  ​
 +  FiltreTrace filtre_echo_RIF(NB_COEFF_B,​coeffB,​NB_COEFF_A,​coeffA);​
 +</​file>  ​
 +devra être remplacée par:
 +<file cpp cons2.cpp>  ​
 +  FiltreTrace filtre_echo_RIF(NB_COEFF_B,​coeffB,​NB_COEFF_A,​coeffA,​0,​NULL,​valeur_pour_offsetEntreeInit,​valeur_pour_offsetSortieInit);​
 +</​file>​
 +  - Vérifiez ​ que les deux premiers filtres fournissent les mêmes réponses impulsionnelles qu'​avant ajout des convertisseurs (à la précision de la quantification près).
  
 +Remarque: C'est le même phénomène que lors de l'​utilisation de montage à AOp (souvenez-vous du télémètre !), où il a fallu centrer les signaux d'​entrée sur la tension $(vmax+vmin)/​2$ plutôt que sur 0V.
 +
 +<ifauth @prof>
 +Note bertrand:
 +réponse indicielle du filtre RIF deborde 1.65 + 1 + 1 =3.65V
 +</​ifauth>​
 +
 +
 +{{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 ~/​TP_ARCHI_TNS_ETU
 +  git commit -a -m'​offset working'​
 +  gitk & 
 +  echo fini
 +  ​
 +
 +
 +
 +<ifauth @prof>
 +
 +====Version 2018====
   - Tester à nouveau le fonctionnement de **ReponseEnLigne()** sur le filtre passe-bande du second ordre de paramètres H0=2, f0=1000, Q=0,7. Il a été numérisé par transformée bilinéaire avec  Fech=48000 : b[3]={0.1703 , 0.0000 , -0.1703}; ​ a[3]={1.0000 , -1.8140 , 0.8297};   - Tester à nouveau le fonctionnement de **ReponseEnLigne()** sur le filtre passe-bande du second ordre de paramètres H0=2, f0=1000, Q=0,7. Il a été numérisé par transformée bilinéaire avec  Fech=48000 : b[3]={0.1703 , 0.0000 , -0.1703}; ​ a[3]={1.0000 , -1.8140 , 0.8297};
     - Que constatez-vous ?     - Que constatez-vous ?
Ligne 160: Ligne 204:
     - Comme lors de l'​utilisation de montage à AOp (souvenez-vous du télémètre !), il est préférable de centrer les signaux d'​entrée sur la tension $(vmax+vmin)/​2$ plutôt que sur 0V. Modifiez les signaux impulsion et échelon en conséquence. Vérifiez que le fonctionnement du filtre est maintenant correct.     - Comme lors de l'​utilisation de montage à AOp (souvenez-vous du télémètre !), il est préférable de centrer les signaux d'​entrée sur la tension $(vmax+vmin)/​2$ plutôt que sur 0V. Modifiez les signaux impulsion et échelon en conséquence. Vérifiez que le fonctionnement du filtre est maintenant correct.
     - Vérifiez que les deux premiers filtres fournissent les mêmes réponses impulsionnelles et indicielles que précédemment.     - Vérifiez que les deux premiers filtres fournissent les mêmes réponses impulsionnelles et indicielles que précédemment.
 +</​ifauth>​
 === Saturation du calcul de l'​équation de récurrence=== === Saturation du calcul de l'​équation de récurrence===
  
   - Définissez le nouveau filtre $s_k=2e_k$   - Définissez le nouveau filtre $s_k=2e_k$
     - Tracez sa réponse indicielle. Quel problème constatez-vous ?     - Tracez sa réponse indicielle. Quel problème constatez-vous ?
-  - Pour corriger ce problème, vous devez saturer le résultat du calcul de l'​équation de récurrence avant de le retourner (donc avant la fin de **TraiteUnEchantillon()**) +  - Pour corriger ce problème, vous devez saturer le résultat du calcul de l'​équation de récurrence avant de le retourner (donc avant la fin de **TraiteUnEchantillon()**). Pour cela, vous utiliserez les attributs de la classe **Filtre** suivants: ​ **valeurSortieMax** et **valeurSortieMin**. ​ Pour que ces deux attributs soient correctement initialisés,​ vous veillerez à ajouter les valeurs effectives pour les paramètres du constructeur de l'​objet filtre **valeurSortieMaxInit** et **valeurSortieMinInit**. Par exemple la ligne: 
-    - Testez le bon fonctionnement de l'​ensemble sur la sinusoïde +<file cpp cons3.cpp> ​  
-   ​+  FiltreTrace filtre_echo_RIF(NB_COEFF_B,​coeffB,​NB_COEFF_A,​coeffA,​0,​NULL,​valeur_pour_offsetEntreeInit,​valeur_pour_offsetSortieInit);​  
 +</​file> ​  
 +devra être remplacée par: 
 +<file cpp cons4.cpp> ​  
 +  FiltreTrace filtre_echo_RIF(NB_COEFF_B,​coeffB,​NB_COEFF_A,​coeffA,​0,​NULL,​offsetEntreeInit,​offsetSortieInit,​valeur_pour_valeurSortieMaxInit,​valeur_pour_valeurSortieMinIit);​  
 +</​file>​ 
 +  - Testez le bon fonctionnement de l'​ensemble sur la sinusoïde 
 + 
 + 
 +{{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 ~/​TP_ARCHI_TNS_ETU 
 +  git commit -a -m'​saturation working'​ 
 +  gitk &  
 +  echo fini 
 +   
  
  
tptns2018_2.1552938459.txt.gz · Dernière modification: 2019/03/18 20:47 par bvandepo