Académique Documents
Professionnel Documents
Culture Documents
Exercice n°l
a) Ecrire un programme avec la programmation mixte (.c et .asm) qui permet la lecture
et l'affichage d'une addition de deux entiers tout en tenant compte de gestion de
dépassement.
b) . Ecrire un programme avec la programmation assembleur (.asm) qui permet la
lecture la multiplication et l'accumulation de deux réels tout en tenant compte de gestion
de dépassement.
Exercice n°2
Ecrire un programme avec le langage C qui permet de calculer la transformée de
Fourier rapide (FFT) d'un signal a pour longueur N échantillons sur une carte DSP
BlackFin (BF) d'Analog Devices.
La fonction FFT est décrite par l'équation suivante :
Une fois le spectre est calculé, il faut localiser les pics spectraux.
Ensuite, il faut déterminer la fréquence fondamentale FO qui correspond
au premier pic spectral.
Pour ceci il faut:
- Déclarer les variables,
- Ecrire le programme principal qui contient :
1) Lecture du signal d'entrée,
2) Appel aux fonctions crées,
3) Sauvegarder le résultat qui sera sous forme d'un signal spectral dans un fichier,
4) Créer la fonction qui permet le calcul de la FFT de ce signal,
5) Créer la fonction qui permet de localiser les pics spectraux
6) Déterminer la F0 et ses harmoniques à l'aide d'un appel à la fonction précédente.
int main() {
int num1, num2, sum, overflow;
return 0;
}
add_with_overflow_check:
; Arguments : eax = a, ebx = b, ecx = résultat, edx = overfl
mov edx, 0 ; Initialiser le flag de dépassement à 0
; Effectuer l'addition
add eax, ebx
jo overflow_detected ; Si un dépassement est détecté, saute
overflow_detected:
; Mettre le flag de dépassement à 1
mov edx, 1
done:
ret
section .data
real1 dd 2.5 ; Premier réel
real2 dd 1.8 ; Deuxième réel
result dd 0.0 ; Résultat initialisé à 0.0
overflow dd 0 ; Flag de dépassement initialisé à 0
section .text
global main
; Accumulation du résultat
fadd dword [result]
; Vérification du dépassement
fstsw ax
sahf
jo overflow_detected
; Stockage du résultat
fstp dword [result]
; Affichage du résultat
mov eax, 1 ; Identificateur de fichier standard output
mov ebx, result ; Adresse du résultat
mov ecx, 4 ; Taille du résultat en octets
mov edx, 0 ; Position du curseur
mov eax, 4 ; Appel système pour écrire sur la sortie s
int 0x80
; Fin du programme
mov eax, 1 ; Code de sortie
int 0x80
overflow_detected:
; Mettre le flag de dépassement à 1
mov [overflow], 1
jmp end_program
end_program:
; Fin du programme
mov eax, 1 ; Code de sortie
#include <stdio.h>
#include <complex.h>
#include <math.h>// Déclaration des fonctions
int main() {
int N; // Longueur de l'échantillon
float sample_rate; // Taux d'échantillonnage
complex float* signal; // Tableau des échantillons
complex float* spectrum; // Tableau pour le résultat de la F
// 2. Calcul de la FFT
fft(signal, N);
// Libération de la mémoire
free(signal);
free(spectrum);
return 0;
// Fonction FFT
void fft(complex float* x, int N) {
// À implémenter en utilisant votre bibliothèque DSP BlackFi
}