{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "# TD Matlab/octave\n", "--- \n", "\n", "\n", "| Revenir à la [page déroulement](Readme.md) |\n", "|-------------|\n", "\n", "\n", "Initiation aux logiciels de calcul interprétés Matlab/Octave pour le signal\n", "\n", "Les supports :\n", "- Le [sujet standard sur moodle](https://moodle.insa-toulouse.fr/mod/resource/view.php?id=24759) \n", "- Un notebook de ce Github sur [pourquoi Octave/Matlab](https://github.com/balaise31/Signal/blob/tds/continu/tps/pourquoi_octave.ipynb) \n", "- Un notebook de ce Github sur [une intro à octave](https://github.com/balaise31/Signal/blob/tds/continu/tps/initiation_octave/prise_en_main.ipynb)\n", "\n", "Après les deux séances, il faudra aller sur le [ici sur moodle](https://moodle.insa-toulouse.fr/mod/quiz/view.php?id=24772) faire le test qui consiste à :\n", " - donner les noms du binôme\n", " - prendre connaissance de la valeur moyenne à calculer (elle est tirée au hasard comme, par exemple, $\\int\\limits_{t=0}^{\\pi}tcos(2t)dt$)\n", " - modifier votre script pour qu'il calcule cette intégrale, renseigner la valeur moyenne calculée par le script et le déposer sur le site.\n", "\n", " Des indications et aides sur la manière d'approcher la valeur moyenne d'un signal sont donnée dans la fin de ce document." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Installer ou travailler en ligne avec Matlab/Octave\n", "---\n", "\n", "## 0 Utiliser la version en ligne des Jupyter notebook avec Binder\n", "\n", "Par exemple en cliquant sur ce badge\n", "\n", "[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/balaise31/Signal/HEAD?labpath=continu%2Ftds%2Fintro_octave.ipynb) \n", "\n", "Vous pouvez exécuter ce Notebook sur votre navigateur.\n", "\n", "Sélectionnez une **cellule de code Matblab**, modifiez-la et ensuite faite **Shift + Entrée** pour exécuter la cellule et voir le résultat.\n", "\n", "## 1 Méthode installer sur Linux : d'avenir mais lourde\n", "\n", "- Si vous n'avez pas Linux installé, et une machine avec au moins 2/4G de ram) faites-le sur une machine virtuelle, car vous aurez à utiliser Linux au second semestre en ADA et système d'exploitation et plus tard dans maintes matières (filtrage numérique, programmation C, Réseau etc.)\n", " * installer un virtualiseur tel que virtualbox : [indications détaillées sur open-classroom](https://openclassrooms.com/fr/courses/2035806-virtualisez-votre-architecture-et-vos-environnements-de-travail/6313946-installez-virtualbox)\n", " * récupérer une image disque (fichier .iso) d'un CD d'install de Linux (je vous conseille Ubuntu comme en TP)\n", " * installez linux sur une machine virtuelle (choisissez un disque dur de taille variable et de grosse taille !, ce n'est qu'une simulation et vous ne prendrez pas plus de place sur votre disque)\n", "- installer octave dans Linux en ouvrant un terminal (CTRL+ALT+T) et en tapant la commande `sudo apt install octave` (vous donnerez le mot de passe de l'utilisateur avec droits que vous avez créé lors de l'installation de Linux)\n", "- en option : récupérez ce site Git et installez jupyter et les notebook octave/python en suivant les 5 instructions données sur [ce site](https://github.com/balaise31/Signal/blob/discret/installation/README.md)\n", "\n", "Pour utiliser le lanceur linux, appuyez sur la touche META (Touche Windows) et taper `octa`, il suffit de sélectionner octave qui doit apparaître dans la recherche.\n", "\n", "\n", "## 2 Méthode installer sur Windows/Mac\n", "\n", "Installez octave en local sur votre machine en suivant ce site et lien [Octave MacOs](https://wiki.octave.org/Octave_for_macOS) ou [Octave Windows (325 Mo)](https://www.gnu.org/software/octave/download#ms-windows).\n", "\n", "Vous avez l'équivalent (sans Simulink !) de Matlab mais en gratuit et libre.\n", "\n", "## 3 En ligne avec MonTp.Insa\n", "\n", "Il faut être vue dans le réseau INSA (résidence Insa ou wifi Insa), sinon vous devez utiliser votre VPN pour être vue comme si vous étiez à l'INSA.\n", "\n", "Pour installer le [VPN c'est ici](https://telechargement.insa-toulouse.fr/dl_vpn.html)\n", "\n", "**Indispensable en cas de confinement ou distanciel !!**\n", "\n", "Allez ensuite sur le site [monTp.insa](https://montp.insa-toulouse.fr), choisissez une **salle de TP virtuelle Windows** et lancez Matlab. (Octave n'est installé ni sur Linux, ni sur windows cette année...)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Séance 1 (équivalent exos 1 à 3 du sujet standard)\n", "---\n", "\n", "Une séance plutôt passive où :\n", "- je présente le pourquoi de ces nouveaux langages (vs Ada) avec [pourquoi Octave/Matlab](https://github.com/balaise31/Signal/blob/tds/continu/tps/pourquoi_octave ;\n", "- je fais une intro à Matlab dans le style [une intro à octave](https://github.com/balaise31/Signal/blob/tds/continu/tps/initiation_octave/prise_en_main.ipynb).\n", "\n", "À l'issue de cette intro les concepts de :\n", "- langage interprété ;\n", "- débugueur ;\n", "- le polymorphisme et la manipulation de variable matricielle ;\n", "- la fonction d'affichage plot ;\n", "- la représentation d'un signal par un tableau de temps \"t\" et un tableau de valeur ;\n", "- l'écriture d'une fonction dans un fichier (exemple de l'échelon avec u.m) ;\n", "- l'écriture d'une fonction en ligne avec ''' f =@(t) sin(2*....) ''' ;\n", "- la **vectorisation** des fonction et calcul : appliquer une fonction à des matrices et scalaires ;\n", "- la nuance entre opérateurs par défaut qui sont matriciels (A*B avec A:(n x m) et B : (m x p) donne du (n x p) ) et les opérateurs élément par élément de matrices (A .* B qui pour deux matrices (n x m) donne la matrice de même taille).\n", "\n", "On arrive au script octave permettant de tracer le produit de deux fonctions :\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%% Fait le ménage\n", "clear all % les variables\n", "close all % ferme les fenêtres\n", "clc % efface la console (fenêtre de commandes)\n", "\n", "%% Fonctions usuelles vectorisées\n", "u = @(x) x>0 ; % fonction échelon (astuce vrai = 1)\n", "constante = @(x) x./x ;% fonction constante t --> 1 (astuce division élément par élément donne 1.)\n", "porte = @(x,a,b) u(x-a) - u(x-b) ;% fonction porte vaut 1 de a à b et 0 sinon\n", "\n", "\n", "%% définition de paramètres et constantes\n", "Te = 0.01; % période d'échantillonnage [s]\n", "t=-1:Te:8 ; % vecteur temps \n", "\n", "\n", "%% définition des signaux\n", "A = 3; % amplitude du signal [V]\n", "F = 0.5; % fréquence du signal [Hz]\n", "f= @(t,F) u(t) .* sin(2*pi*F*t) * A;\n", "% ^ \n", "% /|\\\n", "% |\n", "% !! produit élément par élément ici !!\n", "\n", "\n", "% Attention si on change A, la fonction f utilisera\n", "% la valeur de A au moment de la déclaration (ici 3) \n", "% en revanche F est un paramètre qu'il faudra donner et pouvant donc changer\n", "% Appel de f avec f(1:0.1:3 , 30 ) marche\n", "\n", "\n", "\n", "%% Affichage\n", "plot(t, u(t),'r'); % trait rouge\n", "hold on; % ne pas effacer le graphique précédent pour supperposer\n", "plot(t, f(t,F), 'g.'); % que des points verts\n", "xlabel(\"temps [s]\");\n", "ylabel(\"signaux [v]\");\n", "legend([\"l'echelon\"; \"le sinus causal\"])\n", "title(\"Le sinus causal\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Produit de signaux = élément par élément\n", "\n", "Comprenez bien que l'on a dû multiplier deux signaux entre eux avec le produit .* élément par élément.\n", "> `f= @(t,F) u(t) .* sin(2*pi*F*t) * A;`\n", "\n", "Car \n", "- l'opérande de gauche `u(t)` est un vecteur ligne (1 x n)\n", "- l'opérande de droite `sin(2*pi*F*t) * A` est de même (1 x n)\n", "\n", "Donc le produit matriciel est mal défini car (1 x n) * (1 x n) ne fonctionne pas\n", " " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "error: operator *: nonconformant arguments (op1 is 1x901, op2 is 1x901)\n" ] } ], "source": [ "gauche = u(t);\n", "droite = sin(2*pi*F*t) * A;\n", "gauche * droite" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On demande alors un produit élément par élément entre ces deux vecteurs ** qui doivent être de même taille ! **\n", "\n", "L'équivalent d'une boucle for en ada \n", "```ADA\n", "for I in 1..901 loop\n", " mult(I) = gauche(I) * droite(I)\n", "end loop;\n", "```\n", "Ce fait en demandant la version \"élément par élément\" de l'opérateur *\n", "\n", "Ce qui donne en utilisant subplot pour faire trois graphiques superposés :\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "% subplot divise la fenêtre en plusieurs rangées et colonne sde graphiques\n", "subplot(311) % 3 rangées, 1 colone, on se met dans le graphique 1 (en haut)\n", "plot(t,gauche,'*');\n", "text(0,-0.25, \" X multiplie par\")\n", "subplot(312) % 3 rangées, 1 colone, on se met dans le graphique 2 (au milieu)\n", "plot(t,droite,'.');\n", "text(0,-4.5, \" = egale\")\n", "subplot(313) % 3 rangées, 1 colone, on se met dans le graphique 3 (en bas)\n", "plot(t,gauche.*droite);\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "# Séance 2 : équivalent exo 4 du sujet standard\n", "---\n", "\n", "- Afficher une somme de signaux correspondant à une série de Fourier\n", "- Calculer numériquement une intégrale (valeur moyenne) : **Test moodle**\n", "\n", "## Choses à faire pour cette séance\n", "---\n", "\n", "- installer octave sur son PC et apporter son PC si possible ;\n", "- (en option) installer anaconda (distribution de python) utile pour les notebooks ;\n", "- Reprendre mon script en un script au format GroupeA_NOM1_NOM2.m pour tracer la somme de la composante continue (utiliser la fonction `constante` de mon script) ajoutée à la fondamentale ajoutée au premier harmonique d'une des séries des [Exos 1.3 des SdF](https://moodle.insa-toulouse.fr/mod/resource/view.php?id=24741#section.5.9) et de l'[exo 7 des SdF](https://moodle.insa-toulouse.fr/mod/resource/view.php?id=24741#section.5.9)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Réfléchir à un programme ADA capable de calculer l'intégrale d'un signal représenté par un tableau valeurs : intégrale de Rieman\n", "\n", "\n", "\n", "![](integrale_Riemann.png)\n", "\n", "Ne pas confondre \n", " * la primitive $F$ d'une fonction $f$ qui dépend d'une borne $F : a \\mapsto \\int_{0}^{a}f(t)d(t)$ : Il s'agit ici de la primitive qui s'annule en 0 (prisée des traiteuses du signal et des automaticiennes, car on considère des signaux causaux). Une manière d'obtenir cette fonction primitive dans le cas discret (on ne dispose que d'échantillons de valeurs à des instants donnés : ce sont donc des suites numériques) est donnée dans l' [exercice 2.1 page 23 du poly de filtrage numérique](https://github.com/balaise31/Signal/blob/master/discret/poly/main.pdf#page=23)\n", "* une intégrale qui est un nombre réel (lorsqu'elle converge) :\n", "$\\int_a^b f(t) dt = F(a) - F(b) = \\lim_{dx\\to 0}\\sum_{k=0}^N f(k.dx).dx$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Calculez l'intégrale demandée\n", "---\n", "\n", "Il faudra déposer votre fichier matlab capable de calculer une intégrale (par exemple $\\int\\limits_{t=0}^{\\pi}tcos(2t)dt$ ) [ici sur moodle](https://moodle.insa-toulouse.fr/mod/quiz/view.php?id=24772) contenant votre travail précédent (affichage des composantes) et ce calcul. Même si cela est sous la forme d'un QCM, il s'agit d'un dépôt de réponse et de fichier.\n", "\n", "Créez la fonction `f` à intégrer, sous la forme d'une fonction en ligne, en vous demandant si le produit entre `t` et `cos(2*t)` doit être matriciel `*` ou élément par élément `.*` :" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "f =\n", "\n", "@(t) cos (2 * t) * t\n", "\n" ] } ], "source": [ "f = @(t) cos(2*t) * t" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tester si cette fonction est bien vectorisée en calculant `f` pour tout les instants contenus dans le vecteur `t`. Stockez-le dans un vecteur `sig_f`.\n", "\n", "La commande `sig_f = f(t)` doit donc fonctionner et vous devez observer dans le ***workspace*** un vecteur de valeurs.\n", "\n", "Le but est maintenant de calculer la somme des valeurs de `sig_f` et de multiplier par $T_e$ pour avoir $\\sum_{k=0}^N f(k.dx).dx$ avec $dx=T_e$. Vous pouvez utiliser une boucle for et une variable de cumulation `somme`, ou simplement appeler la fonction `sum` de matlab." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Les exemples suivants peuvent vous inspirer et vous aider\n", "--- \n", "\n", "Vous pouvez utiliser la commande `help` pour voir comment utiliser une fonction et avoir des exemples :\n", "``` octave\n", " help for\n", "\n", " help sum\n", "```\n", "En complément voici des exemples proches de ce qu'il faut faire " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exemple d'utilisation de `sum` : la somme partielle d'une suite géométrique\n", "\n", "Rappelons que la formule de répétition causale $f_r$ d'un signal impulsion $f$ répété N fois avec une période $T_0$ donnant la transformée de Laplace est :\n", "\n", "$F_r(p) = F(p) . (e^{-0.Te.p} + \\ldots + e^{-N.Te.p})$\n", "\n", "où l'on voit que la somme des retards est une suite géométrique de raison $r=e^{-T_e.p}\\in\\mathrm{C}$.\n", "\n", "Cette **série** géométrique (on parle donc de la suite des sommes partielles) peut converger vers $S_N=\\frac{r^{N+1}-r^0}{r-1}\\underset{N\\to+\\infty}{\\rightarrow}\\frac{1}{1-r}$ ssi $|r|<1$ ce qui impose certaines choses sur la valeur de p.\n", "\n", "Ce qui donne pour une répétition infinie :\n", "\n", "$F_r(p) = F(p) . \\frac{1}{1 - e^{-Te.p}}$\n", "\n", "\n", "Le programme si dessous calcule une somme partielle pour une valeur de $p$ et $T_0$ donnée :" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tau =\n", "\n", " 0 1 2 3\n", "\n", "Laplace =\n", "\n", " Columns 1 through 3:\n", "\n", " 1.00000 - 0.00000i 0.19877 - 0.30956i -0.05632 - 0.12306i\n", "\n", " Column 4:\n", "\n", " -0.04929 - 0.00703i\n", "\n", "Somme = 1.09316 - 0.43965i\n", "ans = 1.09316 - 0.43965i\n" ] } ], "source": [ "% exemple de l'utilisation de sum pour calculer une somme partielle de suite géométrique\n", "Te=1;\n", "Tau = 0:Te:3*Te % les retards\n", "p = 1+i; % une variable des valeurs possible de la variable de Laplace\n", "Laplace = exp(-Tau*p) % Laplace des retards pour une valeur de p\n", "Somme = sum(Laplace) % Laplace de la somme des retards\n", "% on vérifie avec la formule de somme partielle\n", "(exp(-4*p)-exp(0*p))/(exp(-p)-1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exemple d'utilisation de `for` : calcul de factorielle\n", "\n", "Programme un peu stupide pour calculer la factorielle : on stocke dans un tableau `v` les valeurs de 1 à 4 et ensuite on multiplie chaque élément de ce tableau. " ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "v =\n", "\n", " 1 2 3 4\n", "\n", "factorielle = 24\n" ] } ], "source": [ "% exemple de boucle dans un tableau pour calculer une factorielle\n", "v=1:4\n", "factorielle = 1 ;\n", "% exemple pour boucler dans un tableau\n", "for indice = 1:length(v)\n", " factorielle = factorielle * v(indice) ;\n", "end\n", "\n", "factorielle % sans ; pour afficher" ] } ], "metadata": { "kernelspec": { "display_name": "Octave", "language": "octave", "name": "octave" }, "language_info": { "file_extension": ".m", "help_links": [ { "text": "GNU Octave", "url": "https://www.gnu.org/software/octave/support.html" }, { "text": "Octave Kernel", "url": "https://github.com/Calysto/octave_kernel" }, { "text": "MetaKernel Magics", "url": "https://metakernel.readthedocs.io/en/latest/source/README.html" } ], "mimetype": "text/x-octave", "name": "octave", "version": "4.2.2" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false } }, "nbformat": 4, "nbformat_minor": 4 }