{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c991cb53",
   "metadata": {},
   "source": [
    "# Traitement du Signal - TP6 : Voyage dans le monde numérique !\n",
    "\n",
    "Durant les derniers TP, nous avons exploré le traitement du signal en faisant le lien avec tout ce que vous avez vu en analogique. Aujourd'hui, nous allons découvrir le magnifique monde du numérique. Alors, oui, on faisait du numérique depuis le début. Mais on va reprendre la base du signal, et comprendre les effets de la numérisation. Enfin, durant les prochaines séances, on reverra une bonne partie de ce qu'on a vu précédemment en analysant plus précisément l'impact de la numérisation sur les résultats obtenus. Car oui, le numérique, c'est le monde réel. Et le monde réel, il ne fait pas de cadeau..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "524f6940",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Import des librairies\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "57cd0f1a",
   "metadata": {},
   "source": [
    "## Exercice 1 : Echantillonnage"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "79b65f93",
   "metadata": {},
   "source": [
    "Durant les précédents TPs, on a toujours parlé de fréquence et de temps d'échantillonnage. On sait globalement qu'une grande fréquence (ou un petit temps) signifie qu'on a plus de points. Super... Mais on va aller un petit peu plus loin."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c3aa03c4",
   "metadata": {},
   "source": [
    "Reprenez la fonction *somme_sinus* du TP précédent, et modifiez la pour prendre en entrée avec les paramètres des sinus, non pas un axe temporel, mais une fréquence d'échantillonnage $f_e$ et un temps maximum $T$ (le signal évoluant de 0 à $T$ secondes). La fonction renverra l'axe temporel et le signal $s(t)$ créé."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7587cc5f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Modification de la fonction somme_sinus\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e933a6b6",
   "metadata": {},
   "source": [
    "Créez le signal $s(t)$ suivant, évoluant de 0 à 1 secondes avec une fréquence d'échantillonnage de $2048$ Hz :\n",
    "\n",
    "\\begin{equation*}\n",
    "    s(t) = sin(2 \\pi f_0 t)\n",
    "\\end{equation*}\n",
    "\n",
    "Avec ici, $f_0 = 12$ Hz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9c2896bd",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Création et affichage de s(t)\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "94b2b633",
   "metadata": {},
   "source": [
    "**_QUESTION :_** En théorie, à partir de quelle valeur de fréquence d'échantillonnage le signal perdra de l'information ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "faf5add4",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f5d3aba",
   "metadata": {},
   "source": [
    "Maintenant, tracez plusieurs figures du même signal constuit, mais en divisant successivement la fréquence d'échantillonnage par 2, jusqu'à obtenir $f_e = 16$ Hz."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c9a61db9",
   "metadata": {},
   "source": [
    "**_QUESTIONS :_** \n",
    "- A partir de quel fréquence d'échantillonnage le signal est-il visuellement dégradé ?\n",
    "- A partir de quel fréquence d'échantillonnage le signal n'est plus reconnaissable ? C'est-à-dire, à quel moment le signal perd sa fréquence originale ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "81982959",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Visualisation de s(t) à différentes fréquences d'échantillonnage\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "05659b07",
   "metadata": {},
   "source": [
    "**_REPONSES :_** "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7084656",
   "metadata": {},
   "source": [
    "Reprenez le code précédent et affichez cette fois ci, pour chaque fréquence d'échantillonnage, le spectre d'amplitude de la transformée de Fourier du signal échantillonné. Affichez également la position des pics trouvés en fréquentiel (via *scipy.signal.find_peaks*, comme dans le TP3 partie 2).\n",
    "\n",
    "*Note : Attention, ici, je veux une transformée de Fourier classique, pas réelle*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3eb52cf0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Visualisation des spectres d'amplitude de s(t) à différentes fréquences d'échantillonnage\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b19a02d",
   "metadata": {},
   "source": [
    "Avant de passer à la suite, on va regarder bien en détail les différents résultats de FFT."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "26fa5220",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Quelle est la plage de fréquence analysée pour chaque fréquence d'échantillonnage ? A quoi cela correspond ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "55144369",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a4c9884",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Quelle est la précision spectrale pour chaque fréquence d'échantillonnage ? *(c'est-à-dire l'écart entre 2 fréquences analysées après Transformée de Fourier)*"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ccd92903",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60489c74",
   "metadata": {},
   "source": [
    "**_QUESTION :_** A partir de quelle fréquence d'échantillonnage la TF du signal ne correspond plus à l'original ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "109c5158",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "df5b3380",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Comment s'explique ce résultat ? *(cf. Exercice 5-d de TD)*"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7ed45c83",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1140d9bf",
   "metadata": {},
   "source": [
    "On va maintenant reconstruire les signaux échantillonnés à $f_e$ < 2048 Hz pour les replacer à une fréquence d'échantillonnage de 2048 Hz, afin d'améliorer leur qualité. Pour ce faire, on va faire un zero-padding de la transformée de Fourier (ce sera expliqué plus en détail lors du prochain TP). Votre TF de taille $N$ va être augmentée pour être de taille $N'$ en rajoutant des 0 à droite et à gauche."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e13b92c3",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Avec *s(t)* évoluant durant 1 seconde, quelle est la valeur de $N$, la taille du vecteur après transformée de Fourier, en fonction de la fréquence d'échantillonnage $f_e$ ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "08eda742",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d36b56d7",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Quelle doit être donc la taille $N'$ du vecteur augmenté pour qu'après transformée de Fourier inverse, le signal ait une fréquence d'échantillonnage $f_e'$ = 2048 Hz ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b5c022f6",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "518c385e",
   "metadata": {},
   "source": [
    "Reprenez votre code précédent, et modifiez le pour faire un zero-padding centré afin d'augmenter la taille de la TF, puis faites une transformée de Fourier inverse et affichez le résultat final pour chacun des signaux.\n",
    "\n",
    "*Note : Attention, le fait d'agrandir le vecteur fait qu'il faut corriger la normalisation de l'amplitude*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8629a60b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Reconstruction de s(t) à différentes fréquences d'échantillonnage pour obtenir fe' = 2048 Hz\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "57000130",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Que donne la reconstruction ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "50041048",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dca52877",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "**Commentaire sur l'exercice :**\n",
    "\n",
    "Ici, vous avez un exemple de reconstruction parfaite, pour montrer que cela est théoriquement possible. Les paramètres ont été vigoureusement choisi pour que cela soit faisable. En pratique, on obtient rarement une reconstruction parfaite, notamment en fonction de la transformée de Fourier effectuée. Donc oui, c'est théoriquement réalisable, mais ce n'est pas toujours le cas.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea4f11ac",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## Exercice 2 : Et 1, et 2, et 3 sinus !\n",
    "\n",
    "Un exercice dans la continuité du précédent, puisqu'on va reprendre le même principe mais avec des signaux étant des combinaisons linéaires de cosinusoïdes. L'exercice suit également l'exercice 5.d réalisé en TD, ce qui permet justement de visualiser les différents résultats du signal selon la fréquence d'échantillonnage $f_e$ et la fréquence de coupure $f_c$ d'un filtre passe-bas idéal faisant office de filtre passe-bas anti-repliement."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ce2888f0",
   "metadata": {},
   "source": [
    "Construisez le signal $x(t)$, la combinaison linéaire de signal cosinusoïdal de fréquence 300 Hz, 400 Hz, 1.3 kHz et 3.6 kHz. Chaque amplitude de signal est de 1, et $x(t)$ évoluera durant 1 seconde à une fréquence d'échantillonnage $f_e$ = 2 kHz.\n",
    "\n",
    "*Note : Attention, ce sont des cosinus ici, pas des sinus !*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ac9f08a6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Construction et affichage du signal x(t)\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "70d1e18a",
   "metadata": {},
   "source": [
    "Calculez maintenant la transformée de Fourier et affichez le spectre d'amplitude normalisé."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b96073af",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Transformée de Fourier de x(t) et affichage du spectre d'amplitude\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ab158a43",
   "metadata": {},
   "source": [
    "Détectez les différents pics obtenus sur la TF, ainsi que leur amplitude."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0d90704c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Détection des pics et de leur amplitude\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f2951fbd",
   "metadata": {},
   "source": [
    "Appliquez maintenant un filtre passe-bas anti-repliement sur votre TF avec une fréquence de coupure $f_c$ = 900 Hz, et affichez le spectre d'amplitude.\n",
    "\n",
    "*Note : Si vous reprenez les filtres faits durant le TP5, attention car c'était réalisé en TF réelle, ce qui n'est pas le cas ici...*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "28efc311",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Filtre passe-bas anti-repliement appliqué à x(t), affichage du spectre d'amplitude modifié et détection des pics (fréquence, amplitude)\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "48e670ac",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Est-ce que le résultat obtenu correspond à la théorie ? "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "531ad9a0",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "050bd6e1",
   "metadata": {},
   "source": [
    "Répétez maintenant toutes les opérations de cet exercice, mais avec :\n",
    "- $f_e$ = 2 kHz et $f_c$ = 1500 Hz\n",
    "- $f_e$ = 4 kHz et $f_c$ = 500 Hz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "787d49e3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Mêmes opérations mais avec fe = 2kHz et fc = 1500 Hz\n",
    "..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "81945202",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Mêmes opérations mais avec fe = 4kHz et fc = 500 Hz\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b6518a52",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Obtenez-vous le même résultat que ce que vous aviez trouvé en théorie ? Sinon pourquoi ?\n",
    "\n",
    "*Indice : est-ce qu'on a calculé la même transformée de Fourier entre l'exercice TD et ici ?*"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5834b146",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f46198ce",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## Exercice 3 : Quantification\n",
    "\n",
    "On va maintenant passer à la quantification d'un signal. Elle permet de discrétiser l'amplitude d'un signal (dans la même idée que l'échantillonnage discrétise le temps), afin de numériser un signal analogique. Plus concrètement, dans nos exemples précédents (les sinusoïdes), les valeurs sont des float, pouvant ainsi une très grande quantité de valeurs possibles. Cependant, dans un contexte physique, on ne peut stocker des valeurs floatantes, mais uniquement des entiers, qui plus est avec un nombre de bits précis (8, 16, 32, etc.), ce qui limite grandement le nombre de valeurs possibles. De plus, dans un contexte numérique, un signal floatant prend beaucoup plus de mémoire qu'un signal entier. L'objectif de la quantification est donc de représenter numériquement un signal analogique en minimisant la perte d’information pour un nombre de bits donné."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5fad2b71",
   "metadata": {},
   "source": [
    "Dans un premier temps, construisez le signal $a(t)$ et affichez-le :\n",
    "\n",
    "\\begin{equation*}\n",
    "    a(t) = 2 \\cdot sin(2 \\pi f_0 t - \\frac{\\pi}{2}) + sin(2 \\pi f_1 t + \\frac{\\pi}{3})\n",
    "\\end{equation*}\n",
    "\n",
    "Avec $f_0 = 5 Hz$, $f_1 = 20 Hz$. Le signal évoluera durant 5 secondes, avec une fréquence d'échantillonnage $f_e$ = 44100 Hz."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3dca74fb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Création et affichage de a(t)\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6fceb36e",
   "metadata": {},
   "source": [
    "La première étape de la quantification est tout simplement... la normalisation. En effet, il faut que notre signal soit contenu entre -1 et 1 en amplitude. Ici, nous n'avons pas de contexte nous disant quelle est l'amplitude maximum possible. On va donc tout simplement normaliser en divisant notre signal par l'amplitude maximum trouvée. A vous de jouer !"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2179b9e9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Normalisation de a(t) et affichage\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b0920f0",
   "metadata": {},
   "source": [
    "On va dans un premier temps faire une quantification 8 bits signé. Cela veut dire que toutes les valeurs de notre signal, comprises initialement entre -1 et 1, seront par la suite codées sur 8 bits, tout en conservant leurs signes initiaux."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e1a9fcf7",
   "metadata": {},
   "source": [
    "**_QUESTION :_** Quelle est la plage de valeurs possibles pour un entier codé sur 8 bits ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d43936b",
   "metadata": {},
   "source": [
    "**_REPONSE :_**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "feb00877",
   "metadata": {},
   "source": [
    "Quantifiez maintenant votre signal normalisé en 8 bits. Les valeurs d'amplitude du signal doivent être entières et comprises dans la plage de valeurs possibles définis précédemment.\n",
    "\n",
    "*Note : Quitte à ne pas exploiter l'entièreté de la plage, on préferera toujours garder les valeurs nulles du signal d'origine à 0*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "16a20906",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Quantification du signal normalisé en 8 bits et affichage du signal quantifié\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e7395464",
   "metadata": {},
   "source": [
    "Effectuez maintenant les étapes inverses à partir du signal quantifié pour retrouver un signal dans la même plage de valeurs que le signal original, et affichez les deux signaux sur la même figure."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "cd556528",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Modification du signal quantifié pour le comparer au signal d'origine\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f10541a4",
   "metadata": {},
   "source": [
    "A vu d'oeil, on ne remarque quasi aucune différence entre les deux signaux. Cependant, vous pouvez constater avec la fonction *np.unique* qu'il y a une différence significative dans le nombre de valeurs utilisées pour représenter les deux signaux"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b83e0641",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Calcul du nombre de valeurs \"uniques\" des signaux\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "89b2256f",
   "metadata": {},
   "source": [
    "Pour une meilleure comparaison entre les deux signaux, on va désormais calculer le rapport Signal sur Bruit (comme vu durant le TP3, partie 2). Ici, le bruit correspond à la différence entre le signal original et le signal quantifié."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c41487ed",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Calcul du rapport signal sur bruit entre les deux signaux\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e9bc9a4a",
   "metadata": {},
   "source": [
    "Développez maintenant une fonction générique qui quantifie un signal en $N$ bits, indiqué en paramètre en entrée. L'amplitude maximum possible du signal d'entrée sera aussi indiqué en paramètre de fonction. Appliquez votre fonction sur le signal a pour une quantification 4-bits."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3834b559",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Fonction de quantification N bits\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8a261812",
   "metadata": {},
   "source": [
    "De la même manière que précédemment, développez une fonction de \"dé-quantification\", pour transformer le signal quantifié afin de le replacer dans la même plage que le signal d'origine."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d309f343",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Fonction de déquantification du signal\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e37105f3",
   "metadata": {},
   "source": [
    "Calculez le rapport signal sur bruit du signal a(t) quantifié à différents N (variant de 2 à 16 bits) et tracez la courbe. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "98c98cb3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Quantification N bits de a(t) et affichage du rapport signal sur bruit en fonction de N\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c996cbfa",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## Exercice 4 : Ca donne quoi sur l'audio ?\n",
    "\n",
    "Pour finir ce TP, on va juste expérimenter les effets de l'échantillonnage et de la quantification sur un audio. Pour cela, vous avez deux audios WAV de haute qualité (24 bits signés, +80kHz). Votre objectif va être de modifier l'échantillonnage et la quantification de l'audio, et ainsi comparer le signal original et celui \"réduit\" de trois façons :\n",
    "- Comparaison numérique (calcul rapport S/B)\n",
    "- Comparaison qualitative (écoute de l'audio)\n",
    "- Comparaison de mémoire (taille en octet des audios)\n",
    "\n",
    "Les différents échantillonnages/quantifications à votre disposition pour le WAV :\n",
    "- Quantification : 8-bits non signé, 16 bits signé\n",
    "- Echantillonnage : 8kHz, 16 kHz, 32 kHz, 48 kHz\n",
    "\n",
    "*Attention, le format 8-bits signé n'a pas la même plage de valeurs que le format 8-bits non signé*\n",
    "\n",
    "Pour le ré-échantillonnage, je vous conseille d'utiliser la fonction *scipy.signal.resample*. Pour la quantification, utilisez votre fonction précédemment développée, avec peut-être quelques modifications.\n",
    "\n",
    "A vous de jouer, et bon courage !\n",
    "\n",
    "*Note 1 : la qualité auditive dépend énormément de votre matériel (carte son, casque audio/écouteurs). Il est donc normal de ne pas percevoir de différences entre certaines versions que vous allez créer*\n",
    "\n",
    "*Note 2 : l'exercice n'est pas obligatoire (comme tous les autres en réalité). Cependant, je vous invite si vous n'avez pas le temps de coder à tester l'impact de l'échantillonnage et de la quantification grâce à Audacity. C'est très simple à utiliser, et vous pouvez faire la partie analyse de l'exercice. De plus, le logiciel est gratuit, open-source et multi-plateforme*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ad8ba16d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Lecture de l'audio, et affichage de la fréquence d'échantillonnage et de la profondeur de quantification\n",
    "..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d4b114a5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# A COMPLETER\n",
    "# Ré-échantillonnage et quantification de l'audio HQ, et enregistrement dans différents fichiers WAV\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b230399d",
   "metadata": {},
   "source": [
    "**Analyse de l'impact de l'échantillonnage et de la quantification sur l'audio :**"
   ]
  }
 ],
 "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
}
