{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "63399137",
   "metadata": {},
   "source": [
    "# Traitement du Signal - TP3 : Transformée de Fourier\n",
    "\n",
    "---\n",
    "\n",
    "Aujourd'hui, place à la transformée de Fourier. On va voir étape par étape comment faire une bonne transformée de Fourier, sa transformée inverse, tout ça sur des signaux réels et complexes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "84c09c3d",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb3248cb",
   "metadata": {},
   "source": [
    "## Exercice 1 : Signal réel\n",
    "\n",
    "On commence tranquillement, avec un signal simple réel : une sinusoïde. \n",
    "\n",
    "\\begin{equation*}\n",
    "    s(t) = A  \\sin(2 \\pi f_{0} t)\n",
    "\\end{equation*}\n",
    "\n",
    "Avec $A = 1$ et $f_{0} = 50 Hz$.\n",
    "\n",
    "Etant donné qu'on travaille en numérique, il nous faut un axe temporel. Le signal évoluera de 0 à 0.1 secondes avec une fréquence d'échantillonage $f_e = 5000 Hz$.\n",
    "\n",
    "Construisez l'axe temporel, le signal sinusoïdal et tracez tout ça."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6d7126e6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Création de l'axe temporel\n",
    "...\n",
    "\n",
    "# Création du signal sinuisoïdal\n",
    "...\n",
    "\n",
    "# Afficage du signal\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e4093a3d",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Avant de faire notre première FFT via NumPy, quelle est l'allure attendue du spectre d'amplitude de $S(f)$ ? Et celle du spectre de phase ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed2c509f",
   "metadata": {},
   "source": [
    "**_REPONSE :_** "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d3d2fe7c",
   "metadata": {},
   "source": [
    "Ok, il est l'heure de sauter le pas. On va enfin faire notre première FFT ! Je sais, l'excitation est palpable !\n",
    "\n",
    "Pour cela, nous allons nous appuyer sur la package *numpy.fft*, qui propose plein de fonctions pour réaliser facilement les transformées de Fourier et autre (oui, je ne vous fait pas coder la FFT de A à Z aujourd'hui, je ne suis pas taré non plus). \n",
    "\n",
    "La documentation du package du jour : https://numpy.org/doc/2.0/reference/routines.fft.html\n",
    "\n",
    "Notre signal étant réel, nous allons utiliser deux fonctions :\n",
    "- *rfft*\n",
    "- *rfftfreq*\n",
    "\n",
    "**_QUESTION :_** Que font ces deux fonctions ? Que prennent-elles en entrée et qu'est-ce qu'elles retournent ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e812f3b2",
   "metadata": {},
   "source": [
    "**_REPONSE :_** "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea925b95",
   "metadata": {},
   "source": [
    "Calculez la transformée de Fourier réelle $S(f)$ de notre signal $s(t)$, et son axe fréquentiel. Extrayez ensuite le spectre d'amplitude et le spectre de phase et tracez les résultats obtenus.\n",
    "\n",
    "*Note :* Pour tracez les spectres ici, évitez *plot* car le résultat théorique ne convient pas vraiment à ce type d'affichage. Préférez un affichage en barre avec *stem*."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "db216096",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Transformée de Fourier réelle du signal s(t)\n",
    "...\n",
    "\n",
    "# Extraction des spectres d'amplitude et de phase\n",
    "...\n",
    "\n",
    "# Affichage des spectres\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "619dd18e",
   "metadata": {},
   "source": [
    "Normalement, vous devriez avoir comme graphiques ceux de l'image *S_RFFT_avant_correction.png*. Cependant, le résultat n'est pas très satifaisant par rapport à la théorie :\n",
    "\n",
    "- Le spectre d'amplitude ressemble à ce qu'on devrait avoir, mais le pîc à $f_0$ est d'une amplitude trop grande (amplitude de 50 au lieu de $A=1$)\n",
    "- Dans le spectre de phase, on a beaucoup de pics, positifs comme négatifs. Le pic à $f_0$ est en revanche bien à $-\\frac{\\pi}{2}$\n",
    "\n",
    "Il y a en effet des corrections à apporter, c'est normal :\n",
    "- Pour le spectre d'amplitude, cela est dû au calcul de la RFFT qui n'est pas normalisé. Il faut pour cela multiplier par $2/N$ avec $N$ la longueur du signal.\n",
    "- Pour le spectre de phase, les nombreux pics sont calculés avec une amplitude nulle, donc il faut les ignorer (résultat pas pertinent). De ce fait, il ne faut garder uniquement les phases aux fréquences dont l'amplitude est supérieure à 1% de l'amplitude max obtenue.\n",
    "\n",
    "Corrigez vos deux graphes avec les indications données ci-dessus."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d540ee14",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Correction des graphes d'amplitudes et de phase de s(t)\n",
    "...\n",
    "\n",
    "# Affichage des spectres corrigés\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dafd549f",
   "metadata": {},
   "source": [
    "Si tout est ok, vous devriez avoir les mêmes graphes que ceux de l'image *S_RFFT_apres_correction.png*. Une dernière étape maintenant : on va faire une transformée de Fourier inverse de notre signal $S(f)$, afin de retrouver notre signal d'origine $s(t)$. Pour cela, trouvez la fonction à utiliser dans la documentation du package *numpy.fft*."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9509d540",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Transformée de Fourier inverse réelle du signal S(f)\n",
    "...\n",
    "\n",
    "# Affichage du signal s(t) d'origine et celui après transformée de Fourier inverse\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6bcd7e08",
   "metadata": {},
   "source": [
    "Normalement, vous devriez retrouver **exactement** le même signal que celui d'origine (à $1e^{-15}$ près). "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf59dd1e",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## Exercice 2 : Ca devient plus... complexe...\n",
    "\n",
    "On va refaire les mêmes opérations que durant le précédent exercice, mais cette fois avec un signal complexe:\n",
    "\n",
    "\\begin{equation*}\n",
    "    x(t) = A e^{j (2 \\pi f_0 t- \\frac{\\pi}{2})}\n",
    "\\end{equation*}\n",
    "\n",
    "Avec $A=1$, $f_0=50 Hz$. Le signal évoluera de 0 à 0.1 secondes avec une fréquence d'échantillonage $f_e = 1000 Hz$. \n",
    "\n",
    "Construisez le signal x avec son axe temporel, et sachant qu'il est complexe, tracez en deux sous-figures la partie réelle et la partie imaginaire."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4e5e328b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Création de l'axe temporel\n",
    "...\n",
    "\n",
    "# Création du signal complexe x\n",
    "...\n",
    "\n",
    "# Affichage du module et de la phase de x(t)\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "019acf5f",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Quelle est l'allure attendue du spectre d'amplitude de $X(f)$ ? Et celle du spectre de phase ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f24d4184",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0ab44f41",
   "metadata": {},
   "source": [
    "Pour réaliser une FFT avec un signal complexe, il faut utiliser d'autres fonctions que celles utilisées précédemment:\n",
    "- *fft*\n",
    "- *fftfreq*\n",
    "- *fftshift*\n",
    "\n",
    "**_QUESTION :_** Comme précédemment, décrivez le fonctionnement des fonctions citées ci-dessus, en les comparant avec leurs homologues réels."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1700f4c0",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "784ed411",
   "metadata": {},
   "source": [
    "A vous de faire la FFT sur x(t), avec les corrections à apporter pour replacer l'amplitude (avec un facteur de $1/N$ cette fois), et afficher uniquement les phases là où l'amplitude est supérieure à 1% du maximum. Tracez ensuite l'amplitude et la phase de X(f)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7fd3e4c5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Transformée de Fourier réelle du signal x(t)\n",
    "...\n",
    "\n",
    "# Extraction des spectres d'amplitude et de phase\n",
    "...\n",
    "\n",
    "# Affichage des spectres\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2fc6824a",
   "metadata": {},
   "source": [
    "Si vous avez bien calculé la FFT (*X_FFT.png* pour comparer vos graphes), vous devriez avoir des spectres d'amplitude et de phase similaires à... $S(f)$. Alors pourquoi ?\n",
    "\n",
    "Cela est dû à la différence entre la FFT réelle et la FFT classique : \n",
    "- Pour la FFT classique, on calcule et montre les spectres sur les fréquences positives et négatives.\n",
    "- Pour la FFT réelle, on calcule et montre les spectres **uniquement** sur les fréquences positives. Théoriquement, on a des pics dans les fréquences négatives (cf. les propriétés d'une transformée de Fourier pour un signal réel), mais dans le cadre de traitement de signaux réels, on les ignore, on n'en a pas besoin, car on souhaite avoir un résultat uniquement réel."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1e626910",
   "metadata": {},
   "source": [
    "Reprenez votre code en calculant cette fois la transformée de Fourier classique (via *fft*) avec votre signal $s(t)$ afin de voir les spectres d'amplitude et de phase dans les fréquences négatives."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6b9bbbc3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Transformée de Fourier réelle du signal s(t)\n",
    "...\n",
    "\n",
    "# Extraction des spectres d'amplitude et de phase\n",
    "...\n",
    "\n",
    "# Affichage des spectres\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "52deedd3",
   "metadata": {},
   "source": [
    "L'apartée sur le signal $s(t)$ est terminée. Vous pouvez comparez vos graphes avec l'image *S_FFT.png*.\n",
    "\n",
    "Il nous reste à faire la FFT inverse du signal $X(f)$ pour retrouver notre signal d'origine. Pour cela, vous allez utilisez les fonctions *ifft* et *ifftshift*. Comme précédemment, faites la FFT inverse de $X(f)$ et affichez $x(t)$ (partie réelle et partie imaginaire)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8ea61c1d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Transformée de Fourier inverse du signal X(f)\n",
    "...\n",
    "\n",
    "# Affichage du signal x(t) d'origine et celui après transformée de Fourier inverse\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6eb94d0a",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## Exercice 3 : Va falloir appeler un plombier je crois...\n",
    "\n",
    "Dans cet exercice très rapide, on va utiliser le signal $y(t)$, qui est le même signal que $x(t)$ avec cette fois une fréquence $f_0 = 51 Hz$. Construisez le signal, l'axe temporel et affichez-le signal (partie réelle et complexe)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2c2c089a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Création de l'axe temporel\n",
    "...\n",
    "\n",
    "# Création du signal complexe y\n",
    "...\n",
    "\n",
    "# Affichage du module et de la phase de y(t)\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f1533722",
   "metadata": {},
   "source": [
    "Calculez la FFT de $y(t)$, et affichez les spectres d'amplitude et de phase de $Y(f)$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2a0437a7",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Transformée de Fourier du signal y(t)\n",
    "...\n",
    "\n",
    "# Affichage des spectres\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2bb7b0cb",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Que constatez-vous ? Est-ce que le résultat est en raccord avec ce qu'on devrait avoir théoriquement ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b97cd755",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f9f75374",
   "metadata": {},
   "source": [
    "Ce cas illustre la problématique de **fuite spectrale** (vous verrez ça dans quelques semaines en CM). Cela est dû à la nature de la FFT : nous ne faisons pas une transformée de Fourier mais une **transformée de Fourier discrète (DFT)**. Cette opération a quelques limitations au niveau du calcul en fonction du signal d'entrée. L'idée ici ne va pas être de corriger (on verra ça plus tard potentiellement), mais d'identifier le soucis.\n",
    "\n",
    "**_QUESTION :_** Pour quelle raison avons-nous une fuite spectrale ici ? Quelle est la cause de cette fuite ?\n",
    "\n",
    "*Note : Un indice pour identifier le problème : avez-vous regardé en détail votre axe spectral ?*"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a1ec401",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4917cdf0",
   "metadata": {},
   "source": [
    "Appliquez la transformée de Fourier inverse sur $Y(f)$ pour repasser en temporel, et comparez le résultat avec le signal $y(t)$ d'origine en traçant les parties réelles et imaginaires sur un même graphe."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b4f53361",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Transformée de Fourier inverse du signal Y(f)\n",
    "...\n",
    "\n",
    "# Affichage du signal y(t) d'origine et celui après transformée de Fourier inverse\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7ca2d760",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Est-ce que la fuite spectrale a altéré le signal temporel après FFT inverse ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7df50e2",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aa65c487",
   "metadata": {},
   "source": [
    "---\n",
    "## Exercice 4 : Plein de sinus ! Pleinn de cosinus !\n",
    "\n",
    "Pour cet exercice, reprenez le signal s(t) de l'exercice 1, et son axe temporel. Effectuez une FFT réelle sur ce signal et affichez les spectres d'amplitude et de phase.\n",
    "\n",
    "\\begin{equation*}\n",
    "    s(t) = A  \\sin(2 \\pi f_{0} t)\n",
    "\\end{equation*}\n",
    "\n",
    "*Note : rien de compliqué là, c'est du CTRL+C CTRL+V de l'exercice 1...*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bf268125",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Création de l'axe temporel\n",
    "...\n",
    "\n",
    "# Création du signal sinuisoïdal\n",
    "...\n",
    "\n",
    "# Transformée de Fourier réelle du signal s(t)\n",
    "...\n",
    "\n",
    "# Extraction des spectres d'amplitude et de phase\n",
    "...\n",
    "\n",
    "# Affichage des spectres\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "902aa8a4",
   "metadata": {},
   "source": [
    "On va s'amuser à modifier les spectres de $S(F)$ pour créer un nouveau signal $s'(t)$ : \n",
    "\n",
    "\\begin{equation*}\n",
    "    s'(t) = A  \\sin(2 \\pi f_{0} t) + B \\cos(2 \\pi f_{1} t) + C \\cos(2 \\pi f_{2} t + \\frac{\\pi}{4})\n",
    "\\end{equation*}\n",
    "\n",
    "Avec $B=3$, $C=2$, $f_1 = 20Hz$ et $f_2=10Hz$  \n",
    "\n",
    "Modifiez les spectres d'amplitude et de phase pour correspondre au signal $s'(t)$, et affichez les nouveaux spectre.\n",
    "\n",
    "*Note : Attention aux corrections de visualisation qu'on faisait pour les spectres d'amplitude et de phase...*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "aafd8b39",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Modification des spectres pour avoir S'(f)\n",
    "...\n",
    "\n",
    "# Affichage des spectres de S'(f)\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "415a6913",
   "metadata": {},
   "source": [
    "Reconstruisez $S'(f)$ à partir de ces spectres d'amplitude et de phase. Pour rappel :\n",
    "\n",
    "\\begin{equation*}\n",
    "    S'(f) = A_{S'} \\times e^{\\phi_{S'}}\n",
    "\\end{equation*}\n",
    "\n",
    "Avec $A_{S'}$ et $\\phi_{S'}$ qui sont respectivement l'amplitude et la phase de $S'(f)$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3a9ec053",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Reconstruction de S'(f)\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bdfea3b1",
   "metadata": {},
   "source": [
    "Effectuez la FFT inverse réelle de $S'(f)$ pour obtenir $s'(t)$. Comparez le résultat en construisant temporellement le signal $s'(t)$ séparément (avec la formule originale) et vérifiez que vous obtenez le même résultat en les traçant sur une même figure."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "aeca42b2",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# FFT inverse réelle de S'(f)\n",
    "...\n",
    "\n",
    "# Construction de s'(t) à partir de la formule originale\n",
    "...\n",
    "\n",
    "# Tracé des deux signaux sur la même figure\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "21fefcb7",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## Exercice 5 : Oskour, mon audio est bruité !\n",
    "\n",
    "J'ai fait un enregistrement d'une chanson que j'aime bien, mais je ne sais pas ce qu'il s'est passé, il y a un bruit ultra désagréable. Ca doit être un problème de larsen sûrement. Vous pouvez m'aider ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ee57fe4e",
   "metadata": {},
   "source": [
    "Chargez le fichier *audio.wav*, et tracez le signal (avec le bon axe temporel hein !)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a1ac82b9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Chargement de l'extrait audio\n",
    "...\n",
    "\n",
    "# Reconstruction de l'axe temporel\n",
    "...\n",
    "\n",
    "# Tracé du signal audio\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "95521d42",
   "metadata": {},
   "source": [
    "**_QUESTION :_** A l'écoute de l'audio, que constatez-vous ? A quoi ressemble le bruit ? "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7c77f8dd",
   "metadata": {},
   "source": [
    "**_REPONSE :_** "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b34a644",
   "metadata": {},
   "source": [
    "Effectuez une FFT sur votre audio pour obtenir $A(f)$ et affichez uniquement l'amplitude fréquentielle. \n",
    "\n",
    "*Note : notre signal est réel, donc choisissez les bonnes fonctions...*\n",
    "\n",
    "*Note 2 : La fonction stem peut prendre beaucoup de temps. Vous pouvez la remplacer par plot pour être plus efficace*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b0499256",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Transformée de Fourier réelle du signal de l'audio\n",
    "...\n",
    "\n",
    "# Affichage du spectre d'amplitude de l'audio\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d8b376c9",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Que constatez-vous sur le spectre d'amplitude ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fac03f9b",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "192580fc",
   "metadata": {},
   "source": [
    "Récupérez la fréquence du bruit à partir des vecteurs créés (non, vous ne l'estimez pas tout seul à partir du graphique...)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bffc9d0a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Récupération de la fréquence du bruit\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e52d7ed8",
   "metadata": {},
   "source": [
    "Eliminez le bruit identifié en mettant les valeurs de $A(f)$ à zéro à l'endroit aux fréquences identifiées comme celles correspondant au bruit. Affichez de nouveau le spectre d'amplitude de $A(f)$ corrigé."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f3cb29d8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Mise à zéro de A(f) aux alentours du pic du bruit\n",
    "...\n",
    "\n",
    "# Affichage du spectre d'amplitude corrigé\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "adf798d0",
   "metadata": {},
   "source": [
    "Effectuez la transformée de Fourier inverse pour retrouver le signal temporel corrigé, et tracez le signal de l'audio corrigé."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7cf1b124",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Transformée de Fourier inverse réelle du signal A(f)\n",
    "...\n",
    "\n",
    "# Affichage du signal s(t) d'origine et celui après transformée de Fourier inverse\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "96dacea6",
   "metadata": {},
   "source": [
    "Dernière étape : exportez votre audio corrigé."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2d7b0e24",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Export du meilleur extrait en fichier WAV\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ff721624",
   "metadata": {},
   "source": [
    "**_QUESTION :_** A l'écoute, comment est l'audio corrigé ? Avez-vous résolu le problème ? Est-ce que l'audio principal est impacté ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "41b00321",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "deep",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
