270 likes | 428 Views
Examen final de pratique GPA787. Session Été 2014. Calcul d’une FFT à 8 points dans la bonne vieille TI92. Signal de 8 points. Notez le calcul de la somme. La FFT à 8 points approximée. Les amplitudes. Spectre en fréquence. Maximums à 20.81 et 145.69 Hertz. Amplitude. Fréquence en Hertz.
E N D
Examen final de pratique GPA787 Session Été 2014
Calcul d’une FFT à 8 points dans la bonne vieille TI92 Signal de 8 points
Spectre en fréquence Maximums à 20.81 et 145.69 Hertz Amplitude Fréquence en Hertz
Calcul d’une FFT inverse à 8 points dans la bonne vieille TI92 Spectre de 8 points Notez le calcul de la somme J’ai conservé n et wn du calcul de la FFT fait précédemment.
L’évolution du signal dans le temps Amplitude du signal Temps en seconde
Décodage entropique • (6):39…(1,3):7…(1,3):5…(6,4):10…(1,3):6 • (1,3):5…(15,0)…(1,1):1…(0,1):1…(2,2):3 • (4,1):1…(0,0) Erreur sur la figure Ton moyen de gris On passe de 64 x 8 bits à 66 bits, donc taux de compression d’environ 7.76
Collisions de la communication CANbus • La communication CAN gère les collisions de données avec un système de bits dominants et récessifs. Chaque message ayant un identifiant différent, tant que les bits des deux identifiants sont identiques, les deux émettent. Mais dès qu’un bit diffère, l’équipement ayant émis le bit récessif cesse de transmettre permettant à l’équipement ayant le bit dominant de transmettre son message.
Bits dominants et récessifs • La notion de bits dominants et récessifs vient du fait que si les deux sont présentés simultanément, le bit dominant l’emporte. Cela peut être obtenu par le câblage de transistors dont les collecteurs sont en parallèles. Dès qu’un transistor est en saturation, la tension du collecteur descend près de 0, en dépit de l’état des bases des autres transistors.
Codage entropique • Le codage entropique consiste au codage des amplitudes des coefficients quantifiés de la DCT 2D. • Ce codage est en deux parties: • un code de 8 bits contenant 4 bits pour indiquer le nombre de zéros à intercaler, 4 bits pour indiquer le nombre de bits de l’information. • L’amplitude exprimée en un certain nombre de bits (identifié dans le code mentionné précédemment). • L’élimination des 0 et la réduction du nombre de bits requis pour représenter l’amplitude permet de comprimer les données. Le codage de Hufmann augmentera ce taux de compression.
Routine d’interruption Bp1 • void ISR_Bp1(void) • { • staticunsignedintlastPress = 0; • if (!PIO_Get(&pinsBTN[0])) { • if ((timestamp - lastPress) > • DEBOUNCE_TIME) { • lastPress = timestamp; • if (hor<639) hor+=hor; • } • } • } Position horizontale du curseur
Routine d’interruption Bp3 • void ISR_Bp3(void) • { • staticunsignedintlastPress = 0; • if (!PIO_Get(&pinsBTN[0])) { • if ((timestamp - lastPress) > • DEBOUNCE_TIME) { • lastPress = timestamp; • if (hor>0) hor-=hor; • } • } • } Position horizontale du curseur
Configuration des interruptions • staticvoidConfigurePins() • { • PIO_InitializeInterrupts(AT91C_AIC_PRIOR_LOWEST); • PIO_ConfigureIt(&pinsBTN[0], (void (*)(const Pin *)) ISR_Bp1); • PIO_ConfigureIt(&pinsBTN[1], (void (*)(const Pin *)) ISR_Bp2); • PIO_ConfigureIt(&pinsBTN[2], (void (*)(const Pin *)) ISR_Bp3); • PIO_ConfigureIt(&pinsBTN[3], (void (*)(const Pin *)) ISR_Bp4); • PIO_EnableIt(&pinsBTN[0]); • PIO_EnableIt(&pinsBTN[1]); • PIO_EnableIt(&pinsBTN[2]); • PIO_EnableIt(&pinsBTN[3]); • }
Variables utilisées A définir dans Board.h • static const Pin pinsBTN[] = {PIN_PUSHBUTTON_1, PIN_PUSHBUTTON_2, PIN_PUSHBUTTON_3, PIN_PUSHBUTTON_4}; • PIO_Configure(pinsBTN, PIO_LISTSIZE(pinsBTN)); • volatile inthor = 0; /* Position horizontale */ • volatile int ver = 0; /* Position verticale */
Tentative d’interruptions aux 3 secondes • staticvoidConfigureTc(void) • { • unsignedinttcclks = 3; // Choix de l'horloge; • unsignedint div = 128; // Diviseur de la fréquence de l'horloge (133 MHz) • unsignedintfreqd = 16; // Paramètre pour le compteur (intervalles de 0.0625 sec) • // Enableperipheralclock • AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_TC0; • //TC_Configure(AT91C_BASE_TC0, tcclks | AT91C_TC_CPCTRG); • TC_Configure(AT91C_BASE_TC0, tcclks | AT91C_TC_CPCTRG); • AT91C_BASE_TC0->TC_RC = (BOARD_MCK / div) /(freqd) ; // timerFreq / desiredFreq • // Configure and enableinterrupt on RC compare • IRQ_ConfigureIT(AT91C_ID_TC0, AT91C_AIC_PRIOR_LOWEST, ISR_Tc0); • AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; • IRQ_EnableIT(AT91C_ID_TC0); • TC_Start(AT91C_BASE_TC0); • } C’est le plus long possible Prévoir un compteur dans la routine d’interruption. Si le compteur est égal à 48, on exécute l’interruption.
Fréquence de l’onde sinusoidale • La fréquence sera très lente, car la période sera 50 x 3 sec = 150 sec. • La fréquence sera de 1/500 Hz.
Pourquoi lire deux fois le CAN (ADC en anglais) • Parce que l’information sur 12 bits est envoyée en deux tranches. Les 3 premiers bits lors de la première lecture et les 9 derniers bits pour la seconde lecture.