Outils pour utilisateurs

Outils du site


tptns2018

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 [2018/03/16 11:52]
bvandepo
tptns2018 [2019/03/20 14:03] (Version actuelle)
bvandepo
Ligne 3: Ligne 3:
  
 <ifauth @prof> <ifauth @prof>
-Projet solution pour profs: http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TP_ARCHI_TNS2018_v06.zip+Projet solution pour profs, mis à jour automatiquement par le script **script-genere-projet-etu-et-update-etu-solution.sh**: http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TP_ARCHI_TNS.zip
 </​ifauth>​ </​ifauth>​
  
Ligne 94: Ligne 94:
 ====Approche objet==== ====Approche objet====
  
-Polycopié du cours de P.O.O. :  {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_qt/​coursPOO2015.pdf}}+Polycopié du cours de P.O.O. :  {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_qt/​cours_POO_intro9_2019.pdf}}
  
- +===Classe Filtre=== 
-Le code et les données pour le filtre sont rangés dans une classe Filtre. Les **membres** de la classe Filtre sont déclarés dans le fichier **filtre.h**. ​+Le code et les données pour le filtre sont rangés dans une classe Filtre. Les **membres** de la classe Filtre sont déclarés dans le fichier **filtre.h** et l'​implémentation des méthodes est réalisée dans le fichier **filtre.cpp**. 
  
 Les **attributs** de Filtre sont déclarés en **protected** afin de réaliser l'​encapsulation et ne seront donc accessibles que depuis les méthodes de Filtre (et dans la classe dérivée FiltreTrace). Les **attributs** de Filtre sont déclarés en **protected** afin de réaliser l'​encapsulation et ne seront donc accessibles que depuis les méthodes de Filtre (et dans la classe dérivée FiltreTrace).
Ligne 112: Ligne 112:
     Filtre(int nbInitB, coefficient_t *pBInit, int nbInitA, coefficient_t *pAInit,int nbMemoireVkInit=0,​ echantillon_t *memoireVkInit=NULL,​ int offsetEntreeInit=0,​ int offsetSortieInit=0,​ int valeurSortieMaxInit=10000,​ int valeurSortieMinInit=-10000);​     Filtre(int nbInitB, coefficient_t *pBInit, int nbInitA, coefficient_t *pAInit,int nbMemoireVkInit=0,​ echantillon_t *memoireVkInit=NULL,​ int offsetEntreeInit=0,​ int offsetSortieInit=0,​ int valeurSortieMaxInit=10000,​ int valeurSortieMinInit=-10000);​
     void ResetMemoireVk();​     void ResetMemoireVk();​
-    void ReponseEnLigne(echantillon_t * e, echantillon_t * s, int nbPts); 
     echantillon_t TraiteUnEchantillon(echantillon_t ek);     echantillon_t TraiteUnEchantillon(echantillon_t ek);
     void setADCDAC( ​   int offsetEntreeInit,​ int offsetSortieInit,​ int valeurSortieMaxInit,​ int valeurSortieMinInit){     void setADCDAC( ​   int offsetEntreeInit,​ int offsetSortieInit,​ int valeurSortieMaxInit,​ int valeurSortieMinInit){
Ligne 127: Ligne 126:
                               //le premier élément est a1                               //le premier élément est a1
                               //le tableau est de taille 1 pour un RIF                               //le tableau est de taille 1 pour un RIF
-    int nbMemoireVk; ​         //nombre de cases du buffer ​rotatif ​pour stocker les valeurs de vk +    int nbMemoireVk; ​         //nombre de cases du buffer ​circulaire ​pour stocker les valeurs de vk 
-    echantillon_t * memoireVk;//​buffer ​rotatif ​pour stocker les valeurs de vk+    echantillon_t * memoireVk;//​buffer ​circulaire ​pour stocker les valeurs de vk
     int indice_ecr; ​          //​indice d'​écriture dans le buffer rotatif memoireVk     int indice_ecr; ​          //​indice d'​écriture dans le buffer rotatif memoireVk
                               //​paramètres ADC/DAC                               //​paramètres ADC/DAC
Ligne 137: Ligne 136:
     };     };
 </​code>​ </​code>​
 +
 +===Classe FiltreTrace===
 +
 +La classe FiltreTrace est définie comme classe fille de la classe Filtre. Elle peut donc faire tout ce que Filtre peut faire mais contient également du code de test, d'​affichage etc... Alors que la classe Filtre contient du code ayant vocation a être compilé pour la cible microcontrôleur et est donc limité en termes d'​utilisation de librairie et de ressources matérielles,​ il n'y a pas de telles limitations pour la classe FiltreTrace.
 +Les **membres** de la classe FiltreTrace sont déclarés dans le fichier **filtretrace.h** et l'​implémentation des méthodes est réalisée dans le fichier **filtretrace.cpp**
 +
 +
 ===Paramètres par défaut=== ===Paramètres par défaut===
  
Ligne 146: Ligne 152:
 -------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------
 =====Exercice 1: Implémentation pour un exemple simple===== =====Exercice 1: Implémentation pour un exemple simple=====
-Jusqu'​à ce TP, vous avez utilisé la fonction ​**void ​calculReponseFiltre(sFiltre * pFiltre, ​double * ek, double * sk, int nbPts)** pour appliquer le calcul de la réponse d'un filtre. Pour réaliser un filtre capable de traiter des échantillons en ligne, il faut que le processeur effectue le calcul de l'​équation de récurrence échantillon par échantillon. La première partie du TP consiste donc à implémenter la méthode ​ **echantillon_t Filtre::​TraiteUnEchantillon(echantillon_t ek)** qui réalise le calcul de cette équation de récurrence. ​+Jusqu'​à ce TP, vous avez utilisé la méthode ​**void ​FiltreTrace::​Reponse(double * ek, double * sk, int nbPts)** pour appliquer le calcul de la réponse d'un filtre. Pour réaliser un filtre capable de traiter des échantillons en ligne, il faut que le processeur effectue le calcul de l'​équation de récurrence échantillon par échantillon. La première partie du TP consiste donc à implémenter la méthode ​ **echantillon_t Filtre::​TraiteUnEchantillon(echantillon_t ek)** qui réalise le calcul de cette équation de récurrence. ​
  
-Afin de pouvoir tester cette fonction, la méthode **void ​Filtre::​ReponseEnLigne(echantillon_t * e, echantillon_t * s, int nbPts)** doit : +Afin de pouvoir tester cette méthode, la méthode **void ​FiltreTrace::​ReponseEnLigne(echantillon_t * e, echantillon_t * s, int nbPts)** doit : 
   - invoquer la méthode **void Filtre::​ResetMemoireVk()**   - invoquer la méthode **void Filtre::​ResetMemoireVk()**
   - traiter tous les échantillons du tableau e (pour $k\in[0,​nbPts-1]$) à l'aide de la méthode **echantillon_t Filtre::​TraiteUnEchantillon(echantillon_t ek)** et ranger le résultat dans le tableau s   - traiter tous les échantillons du tableau e (pour $k\in[0,​nbPts-1]$) à l'aide de la méthode **echantillon_t Filtre::​TraiteUnEchantillon(echantillon_t ek)** et ranger le résultat dans le tableau s
 +
 +Le code d'une version simplifiée de la méthode **void FiltreTrace::​ReponseEnLigne(echantillon_t * e, echantillon_t * s, int nbPts)** est montré ci dessous (Vous n'avez pas à changer le code présent dans le fichier filtretrace.cpp):​
 +
 <code c> <code c>
-void Filtre::​ReponseEnLigne(echantillon_t * e, echantillon_t * s, int nbPts)+void FiltreTrace::​ReponseEnLigne(echantillon_t * e, echantillon_t * s, int nbPts)
 { {
     ResetMemoireVk();​     ResetMemoireVk();​
Ligne 162: Ligne 171:
  
  
-{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Lire le code de la méthode **void ​Filtre::​ReponseEnLigne** et répondez aux questions suivantes sur le compte rendu : +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Lire le code de la méthode **void ​FiltreTrace::​ReponseEnLigne** et répondez aux questions suivantes sur le compte rendu : 
-  - que représentent e et s ? (indice : la même chose que pour la fonction ​**calculReponseFiltre()** )+  - que représentent e et s ? (indice : la même chose que pour la méthode ​**calculReponseFiltre()** )
   - que représentent e[0] et s[0] ?   - que représentent e[0] et s[0] ?
   - que faut-il ranger dans la case s[k] ?   - que faut-il ranger dans la case s[k] ?
Ligne 199: Ligne 208:
  
  
-{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Tester votre fonction ​à l'aide du filtre dont les coefficients sont définis dans le tableau **coeffB** du fichier **tparchi1.cpp**.+{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Tester votre méthode ​à l'aide du filtre dont les coefficients sont définis dans le tableau **coeffB** du fichier **tparchi1.cpp**.
  
 {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Vérifier l'​exactitude des réponses impulsionnelles et indicielles pour le filtre fourni jusque $k=7$ en comparant les échantillons en sortie du filtre avec les valeurs que vous calculerez sur votre compte-rendu. Conclure. {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Vérifier l'​exactitude des réponses impulsionnelles et indicielles pour le filtre fourni jusque $k=7$ en comparant les échantillons en sortie du filtre avec les valeurs que vous calculerez sur votre compte-rendu. Conclure.
Ligne 230: Ligne 239:
   ​   ​
  
-{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Tester l'​implémentation de la fonction ​de calcul sur le filtre graĉe à un filtre simple de votre choix (voir les TP de TNS si vous êtes en panne d'​inspiration)+{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Tester l'​implémentation de la méthode ​de calcul sur le filtre graĉe à un filtre simple de votre choix (voir les TP de TNS si vous êtes en panne d'​inspiration)
  
 {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Déclarer les variables nécessaires pour ajouter un second filtre d'​équation de récurrence:​ $ s_k=e_k+0.3s_{k-7} $ {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Déclarer les variables nécessaires pour ajouter un second filtre d'​équation de récurrence:​ $ s_k=e_k+0.3s_{k-7} $
  
-{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Calculer les réponses impulsionnelles et indicielles en utilisant la méthode **Filtre::​ReponseEnLigne(echantillon_t * ek, echantillon_t * sk, int nbPts)** et ajouter le code permettant de les afficher. ​Superposer ​l'​affichage du module de la fonction de transfert de ce filtre ​à l'​affichage précédent. Vérifier l'​exactitude des réponses obtenues grâce à une des deux méthodes expliquées à l'​exercice 2.+{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Calculer les réponses impulsionnelles et indicielles en utilisant la méthode **Filtre::​ReponseEnLigne(echantillon_t * ek, echantillon_t * sk, int nbPts)** et ajouter le code permettant de les afficher. ​Activer ​l'​affichage du module de la fonction de transfert de ce filtre ​en supprimant dans le fichier tparchi1.cpp la ligne **if(0)** avant le commentaire:​  
 +  //SUPPRIMER LA LIGNE SUIVANTE POUR POUVOIR OBSERVER LES RÉPONSES FRÉQUENTIELLES À PARTIR DE L'​EXERCICE 2 
 +     
 +Vérifier l'​exactitude des réponses obtenues grâce à une des deux méthodes expliquées à l'​exercice 2 jusqu'​à l'​échantillon 15.
  
  
tptns2018.1521197543.txt.gz · Dernière modification: 2018/03/16 11:52 par bvandepo