{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "939328d0",
   "metadata": {},
   "source": [
    "# Noms :"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3bb0ca82",
   "metadata": {},
   "source": [
    "<h1 align=\"center\"> TP04 Filtrage numérique <br></h1>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b8bcc8f1",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import math as m"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b21942d9",
   "metadata": {},
   "source": [
    "## II. Filtrage numérique passe-bas  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9c605d96",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Détermination du nombre de points\n",
    "ue = open(\"TP04_u_sinus.txt\",'r')                    # Entrer le nom de votre fichier signal d'entrée\n",
    "\n",
    "Ne=0\n",
    "for line in ue:\n",
    "    Ne+=1\n",
    "ue.close()\n",
    "\n",
    "# Lecture et stockage des données dans les listes T et E\n",
    "ue = open(\"TP04_u_sinus.txt\",'r')                         # Entrer le nom de votre fichier signal d'entrée\n",
    "T=[0.]*Ne\n",
    "E=[0.]*Ne\n",
    "i=0\n",
    "for line in ue:\n",
    "    T[i],E[i]=map(float,line.split())\n",
    "    i+=1\n",
    "ue.close()\n",
    "\n",
    "plt.plot(T,E,color='r')        \n",
    "plt.xlabel('t(s)');plt.ylabel('u(V)')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ff1883da",
   "metadata": {},
   "outputs": [],
   "source": [
    "# période d'échantillonnage\n",
    "tmax=T[Ne-1] \n",
    "Te=tmax/Ne "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9218bbf9",
   "metadata": {},
   "source": [
    "Filtrage numérique passe-bas de fréquence de coupure 100 Hz :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "39c32dc0",
   "metadata": {},
   "outputs": [],
   "source": [
    "Fc =100                      # Entrer ici la fréquence de coupure en Hz\n",
    "S=[0.]*Ne\n",
    "a=2*m.pi*Fc*Te\n",
    "for i in range(1,Ne):\n",
    "    \n",
    "    # Entrer ci-dessous votre équation aux différences finies (ou relation de récurrence) \n",
    "    # pour un filtre passe-bas de fréquence de coupure Fc\n",
    "    \n",
    "    S[i]=\n",
    "\n",
    "    \n",
    "# Tracé :  \n",
    "plt.plot(T,E,color='r')      \n",
    "plt.plot(T,S,color='b')\n",
    "plt.title('Graphe des signaux d entrée en rouge et filtré à 100 Hz en bleu')\n",
    "plt.xlabel('t')\n",
    "plt.axis([tmax/4,tmax/2,-10,10])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "93005087",
   "metadata": {},
   "source": [
    "Ecriture d'un fichier texte pour le signal de sortie :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3e0aaf8b",
   "metadata": {},
   "outputs": [],
   "source": [
    "g=open('sinus_Fc_100Hz.txt','w')\n",
    "i=0\n",
    "for i in range(0,Ne):\n",
    "    g.write(str(T[i])+'\\t'+str(S[i])+'\\n')\n",
    "    i+=1\n",
    "g.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1227fa6f",
   "metadata": {},
   "source": [
    "Reprendre la démarche précédente pour filtrer le signal sinusoïdal avec une fréquence de coupure de 5000 Hz. Créer aussi le fichier \"Sinus_Fc_5000Hz.txt\".   \n",
    "Afficher les signaux de sortie pour ces deux fréquences de coupure et commenter."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "473e00c9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Programme ici :\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "663a47ad",
   "metadata": {},
   "outputs": [],
   "source": [
    "g=open('sinus_Fc_5000Hz.txt','w')\n",
    "i=0\n",
    "for i in range(0,Ne):\n",
    "    g.write(str(T[i])+'\\t'+str(S[i])+'\\n')\n",
    "    i+=1\n",
    "g.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0e5267a4",
   "metadata": {},
   "source": [
    "### 3)\t Filtrage de différents signaux\n",
    "\n",
    "Reprendre les mêmes étapes pour un signal d’entrée carré de même fréquence fe (1 kHz). \n",
    "Expliquer ce que vous observez pour différentes fréquences de coupure (100Hz, 5000Hz).\n",
    "Interpréter la forme des courbes observées (repérer un éventuel caractère intégrateur ou dérivateur du filtre).\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "02ab60cf",
   "metadata": {},
   "outputs": [],
   "source": [
    "ue = open(\"TP04_u_creneau.txt\",'r')                    # Entrer le nom de votre fichier signal d'entrée\n",
    "                     # Entrer le nom de votre fichier signal d'entrée\n",
    "T=[0.]*Ne\n",
    "E=[0.]*Ne\n",
    "i=0\n",
    "for line in ue:\n",
    "    T[i],E[i]=map(float,line.split())\n",
    "    i+=1\n",
    "ue.close()\n",
    "\n",
    "plt.plot(T,E,color='r')                \n",
    "plt.show()               # Entrer le nom de votre fichier signal d'entrée\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0ba0fa8b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Programme ici pour fc=100Hz:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2886e19e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Programme ici pour fc=5000Hz:"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7a45137b",
   "metadata": {},
   "source": [
    "## IV. Observation de l’effet de filtres passe-bas sur un signal bruité\n",
    "\n",
    "\n",
    "### Création d'un signal bruité   \n",
    "Charger la bibliothèque random sous le nom rd.\n",
    "Ecrire un programme qui ouvre le fichier du signal sinusoîdal et qui rajoute un bruit \"blanc\" d'amplitude maximale 1 V avec l'instruction rd.uniform.\n",
    "Afficher puis sauver ce nouveau signal sous le nom SinusBruitéBlanc.txt\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d8f138fc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Programme \"Signal bruité\" ici :\n",
    "import random as rd\n",
    "ue = open(\"TP04_u_sinus.txt\",'r') # Entrer le nom de votre fichier signal d'entrée\n",
    "T=[0.]*Ne\n",
    "E=[0.]*Ne\n",
    "\n",
    "g=open('SinusBruiteBlanc.txt','w')\n",
    "\n",
    "i=0\n",
    "for line in ue:\n",
    "    T[i],E[i]=map(float,line.split())\n",
    "    E[i]+=                              #à compléter\n",
    "    g.write(str(T[i])+'\\t'+str(E[i])+'\\n')\n",
    "    i+=1\n",
    "    \n",
    "ue.close()\n",
    "g.close()\n",
    "\n",
    "plt.plot(T,E,color='r')   \n",
    "plt.title('Graphe du signal bruité')\n",
    "plt.xlabel('t')\n",
    "plt.axis([tmax/16,tmax/8,-6,6])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b972447",
   "metadata": {},
   "source": [
    "### Lissage par moyenne glissante   \n",
    "Ecrire un nouveau programme Python qui réalise un lissage par la méthode de la moyenne glissante.   \n",
    "Tester ce programme sur le signal SinusBruitéBlanc.\n",
    "Tracer le signal bruité (en rouge), sa moyenne glissante (en bleu). Pour observer la différence entre les signaux, restreindre l'affichage à environ une période   \n",
    "Commenter."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1f848a92",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Programme \"Moyenne glissante\" ici :\n",
    "ue = open(\"SinusBruiteBlanc.txt\",'r')                    # Entrer le nom de votre fichier signal d'entrée\n",
    "Ne=0\n",
    "for line in ue:\n",
    "    Ne+=1\n",
    "\n",
    "ue = open(\"SinusBruiteBlanc.txt\",'r') \n",
    "T=[0.]*Ne\n",
    "E=[0.]*Ne\n",
    "i=0\n",
    "for line in ue:\n",
    "    T[i],E[i]=map(float,line.split())\n",
    "    i+=1\n",
    "ue.close()\n",
    "\n",
    "\n",
    "S=[0.]*Ne\n",
    "for i in range(1,Ne-1):\n",
    "    S[i]=                                            #à compléter\n",
    "    \n",
    "    \n",
    "# Tracé :  \n",
    "plt.plot(T,E,color='r')      \n",
    "plt.plot(T,S,color='b')\n",
    "plt.title('Graphe des signaux d entrée en rouge, moyenné en bleu')\n",
    "plt.xlabel('t')\n",
    "plt.axis([tmax/16,tmax/8,-6,6])\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c90cfbe0",
   "metadata": {},
   "source": [
    "### Comparer l'effet du filtre passe-bas et du lissage sur le signal bruité\n",
    "Tester aussi le filtrage passe-bas sur le signal bruité pour plusieurs fréquences de coupure. Tracer le signal bruité (en rouge), le signal lissé (en bleu) et le signal bruité filtré par le filtre passe-bas pour plusieurs fréquences de coupure. Commenter les courbes et conclure."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ea3e50cd",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Programme \"Comparaison\" ici :\n",
    "ue = open(\"SinusBruiteBlanc.txt\",'r')                    \n",
    "Ne=0\n",
    "for line in ue:\n",
    "    Ne+=1\n",
    "\n",
    "ue = open(\"SinusBruiteBlanc.txt\",'r') \n",
    "T=[0.]*Ne\n",
    "E=[0.]*Ne\n",
    "i=0\n",
    "for line in ue:\n",
    "    T[i],E[i]=map(float,line.split())\n",
    "    i+=1\n",
    "ue.close()\n",
    "\n",
    "# Lissage\n",
    "S=[0.]*Ne\n",
    "for i in range(1,Ne-1):\n",
    "    S[i]=                                            #à compléter\n",
    "\n",
    "# Filtrage passe-bas du premier ordre\n",
    "Fc =                   # fréquence de coupure en Hz\n",
    "S2=[0.]*Ne\n",
    "for i in range(1,Ne):\n",
    "    # équation aux différences finies pour un filtre passe-bas de fréquence de coupure Fc\n",
    "    S2[i]=                                           #à compléter\n",
    "    \n",
    "# Tracé :  \n",
    "plt.plot(T,E,color='r') \n",
    "plt.plot(T,S,color='b')\n",
    "plt.plot(T,S2,color='g')\n",
    "plt.title('Graphe des signaux d entrée en rouge, moyenné en bleu, Fc=10000Hz en vert')\n",
    "plt.xlabel('t')\n",
    "plt.axis([tmax/16,tmax/8,-6,6])\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a1bcd11a",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.9.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
