Vous êtes sur la page 1sur 4

Question 1 : Déclaration des variables

C
#include <stdio.h>
#include <math.h>

// Déclaration des variables globales


int N; // Longueur du signal
int k; // Indice de la FFT
double x[N]; // Signal d'entrée
double X[N]; // Spectre

// Déclaration des variables locales

Question 2 : Programme principal

C
int main(void) {

// Initialisation des variables


N = 1024;
for (k = 0; k < N; k++) {
x[k] = sin(2 * M_PI * k / N);
}

// Lecture du signal d'entrée


// ...

// Appel aux fonctions crées


FFT(x, X, N);
LocaliserPicsSpectraux(X, N);
DeterminerFOFond(X, N);

// Sauvegarde du résultat
// ...

return 0;
}

Question 3 : Lecture du signal d'entrée


C
// Lecture du signal d'entrée

// Ouvrir le fichier
FILE *fp = fopen("signal.bin", "rb");

// Lire le signal
for (k = 0; k < N; k++) {
x[k] = fgetc(fp);
}

// Fermer le fichier
fclose(fp);

Question 4 : Fonction FFT

C
void FFT(double x[], double X[], int N) {

// Récursivité
if (N == 1) {
X[0] = x[0];
} else {
FFT(x, X, N / 2);
FFT(x + N / 2, X + N / 2, N / 2);

for (k = 0; k < N / 2; k++) {


double t = X[k] + exp(-2 * M_PI * I * k / N) * X[k + N / 2];
X[k + N / 2] = X[k] - exp(-2 * M_PI * I * k / N) * X[k + N /
2];
X[k] = t;
}
}
}

Question 5 : Fonction LocaliserPicsSpectraux

C
void LocaliserPicsSpectraux(double X[], int N) {
// Initialisation des variables
int i;
double seuil = 0.1;

// Parcours du spectre
for (i = 0; i < N; i++) {

// Si le pic est significatif


if (fabs(X[i]) > seuil) {

// Affichage du pic
printf("Pic spectral à la fréquence %d Hz\n", i);
}
}
}

Question 6 : Fonction DeterminerFOFond

C
void DeterminerFOFond(double X[], int N) {

// Détermination de la fréquence fondamentale


double FO = X[0] / N;

// Affichage de la fréquence fondamentale


printf("Fréquence fondamentale = %f Hz\n", FO);
}

Exemple de programme complet

C
#include <stdio.h>
#include <math.h>

// Déclaration des variables globales


int N; // Longueur du signal
int k; // Indice de la FFT
double x[N]; // Signal d'entrée
double X[N]; // Spectre

// Déclaration des variables locales

int main(void) {
// Initialisation des variables
N = 1024;
for (k = 0; k < N; k++) {
x[k] = sin(2 * M_PI * k / N);
}

// Lecture du signal d'entrée


FILE *fp = fopen("signal.bin", "rb");

for (k = 0; k < N; k++) {


x[k] = fgetc(fp);
}

Vous aimerez peut-être aussi