{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "# TP2 overtone : Effet overtone en temps réel\n", "---\n", "| [Readme du TP](../README.ipynb) | Sujet | Corrigé |\n", "|--------|-------|---------|\n", "|Python | [sujet python](./tp2_overtone_python.ipynb) | [corrigé python](./tp2_overtone_python_corr.ipynb) |\n", "|Octave | [sujet octave](./tp2_overtone.ipynb) | [corrigé octave](./tp2_overtone_corr.ipynb) |\n", "\n", "\n", "On désire appliquer ce filtre pour effecteur le même effet d'overtone que la chanteuse Ana Maria Hefele. Regardez l'explication sur \n", "[![](https://i.pinimg.com/originals/fa/fe/6d/fafe6d300d6fa568aed43b31fd3bc67d.jpg)](https://www.youtube.com/watch?v=UHTF1-IhuC0)\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "# 1 - Un peu de solfège\n", "---\n", "\n", "Nous avons besoin de faire le lien entre les fréquences et les notes (regardez le piano de la vidéo et l'échellen des fréquences). Les Anglais ont remplacé notre DO-RE-MI par les lettres de l'alphabet A-B-C en commençant avec A pour le LA ! Ce serait trop simple autrement...\n", "\n", "\n", " ...| DO| RE| MI| FA|SOL| LA| SI| DO| ...\n", ":-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:\n", " ...| C | D | E | F | G | A | B | C | ... \n", "\n", "### Octave\n", "\n", "En solfège, une octave correspond à une miltiplication par 2 de la fréquence et au fait de passer d'un DO au DO suivant par exemple. Donc tous les multiples de fréquence en puissance de 2 sonneront en harmonie et donneront la même note mais à des octaves différentes.\n", "\n", "### Notes harmoniques\n", "\n", "Les fréquences multiples qui ne sont pas en puissance de deux apparaissent naturellement (périodicité et séries de Fourier) et les premièrs harmoniques qui ne sont pas des puissances de deux donnent des notes qui sonnent différemment de la note de départ.\n", "\n", "### Demi-ton et gamme tempérée\n", "\n", "Les musiciens occidentaux ont convergés vers \"la gammme tempérée\" qui décompose une octave (multiplication par deux) en 12 demi-tons qui correspondent ainsi chacun à une multiplication par : \n", "demi-ton $\\quad \\leftrightarrow \\quad \\times\\; 2^{\\frac{1}{12}}\\approx \\times\\; 1.0595 \\equiv +5.95 \\% \\approx +\\frac{3}{12}\\text{dB}= + 0.25$ dB. \n", "\n", "On obtient ainsi **une échelle de fréquence logarithmique** qui décompose en 12 demi-tons le passage à l'octave (doublement de fréquence). Un barreau de référrence de cette échelle est le **LA de la 4ᵉ octave noté \"LA 4\" officiellement à 440 Hz**.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "vscode": { "languageId": "json" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "demiton = 1.0900\n", "demiton_dB = 0.25000\n", "LA4diese = 440\n", "SI4 = 440\n", "DO5 = 440\n", "DO3 = 440\n", "DO7 = 440\n" ] } ], "source": [ "clear all; close all; clc;\n", "LA4 = 440;\n", "\n", "%% VOTRE CODE demiton= ..., demiton_dB... et quart_de_ton\n", "% multiplier par demiton doit augmenter d'un demi-ton\n", "% ^ permet de calculer une puissance non entière\n", "demiton = 1.09\n", "demiton_dB = 0.25\n", "demiton_log2 = 1/12;\n", "% multiplier deux fois par quart_de_ton\n", "% doit faire un demiton...\n", "quart_de_ton = demiton ; \n", " \n", "\n", "%% VOTRE CODE LA4diese=... etc.\n", "% LA + 1demiton = LA#\n", "LA4diese = LA4 % * quoi ? donne 466.16 Hz\n", "% LA + 2demiton = SI\n", "SI4 = LA4 % *quoi ? donne 493.88 Hz\n", "% Et oui! \n", "%SI +1demiton = DO (de l'octave au dessus)\n", "DO5 = LA4 % donne 523.25 Hz\n", "% Descendez le DO5 de 2 octaves \n", "DO3 = DO5 % donne 130.81 Hz\n", "DO7 = DO5 % donne 2093 Hz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Attention aux dB !\n", "\n", "On rappelle que +3dB correspondent environ à une octave soit $\\times\\;2$ (car $10 \\log{3}\\approx 2$) et que 10dB exactement à x10. \n", "\n", "> **20dB sont x100 et non pas x10 ne vous trompez pas !** \n", "\n", "Lorsque l'on dit qu'un gain x10 fait 20dB on sous-entend **+20dB de ratio de puissance.** Comme x100 en puissance font x10 en amplitude puisque $P=U^2/R$ l'embrouille est vite venue...\n", "\n", "> Attention `log` est en base 2 avec octave/matlab : il n'y pas de \"ln\" ! \n", "> Préférez utiliser explicitement `log10` et ̀`log2`. \n", "> De manière indépendante du langage, on peut toujours choisir sa base en faisant `log(x)/log(B)` où B est la base choisie.\n", "\n", "Ici les dB expriment un ratio entre les fréquences des différentes notes. Comme l'échelle de fréquence des notes est logarithlique, augmenter d'un demi-ton sera toujours une augmentation de fréquence de +0.25dB. \n", "\n", "### dB acoustiques\n", "Ne pas confondre avec les dB exprimant le ratio de puissance acoustique. Il exprime le rapport **de puissance** acoustique (on parle d'intensité sonore) avec une référence qui est l'intensité à la limite du seuil audible : \n", "> $0\\text{dB} \\leftrightarrow 1\\text{pW}/m^2$ d'intensité acoustique \n", "> $\\leftrightarrow 20 \\mu P $ de pression acoustique \n", "> $\\leftrightarrow$ \"Bruissement de la brise dans les champs de blé\" \n", "\n", "Comme l'oreille humaine est plus ou moins sensible à différentes fréquences (très sensible autour de 1KHz) un facteur de correction peut être apporté en fonction de la fréquence. C'est donc bien un filtre qui est apporté au spectre d'intensité pour se rapprocher de la notion \"d'intensité ressentie\". Le standard donne 3 filtres de A à C et l'unité de mesure associée est communément notée dBA, dBB, dBC. " ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Les harmoniques qui sonnent bien : tierce et quinte\n", "\n", "Lorsque l'on chante (un DO 4 par exemple) le signal de la voix est quasi-périodique à la fréquence DO4 et comporte naturellement des multiples (Séries de Fourier oblige !). On distingue :\n", " - $F_0$ (ici DO4) : La **fondamentale** (ou harmonique de rang 1) \n", " - $F_1 = 2 . F_0$ (ici DO5) : Le **premier harmonique** (rang 2) donne la même note à l'octave supérieure\n", " - $F_2 = 3 . F_0$ (ici SOL5) : Le deuxième harmonique (rang 3) **quinte juste** est ici un SOL qui \"sonne\" dans l'octave supérieure différemment du DO. \n", " - $F_3 = 4 . F_0$ (ici DO 6) : Le troisième harmonique (rang 4) même note deux octaves au-dessus\n", " - $F_4 = 5 . F_0$ (ici MI 6) : Le quatrième harmonique (rang 5) **tierce** est ici un MI qui sonne différemment du DO deux octaves au-dessus\n", " \n", "### Gamme de notes et degrés\n", "\n", "La fondamentale n'est pas toujours un DO et on peut vouloir décaler les tons d'une chanson en partant d'une autre note. On parle plutôt en **degrés** où la note de degré I est la fondamentale et les autres degrés sont relatifs à cette note. On répartit ainsi 7 degrés de I à VII dans une octave.\n", "\n", "On peut monter la gamme majeure de DO en partant du DO et en faisant des écarts de 2 demi-tons et **parfois un seul demi-ton !** :\n", "\n", "\n", "Degrés | I | | II | | III | IV | | V | | VI | | VII| I | ...\n", ":----------:|:-:|-|:--:|-|-----:|:---|-|:----:|:-:|:--:|--|---:|:----|:---:\n", "Demitons | 0 |1| 2 |3| 4 | 5 |6| 7 | 8 | 9 |10| 11 | 12=0| 13=1\n", "Gamme DO maj| DO| | RE | | MI | FA | | SOL | | LA | | SI | DO | ...\n", "Gamme FA maj| FA| | SOL| | LA | LA#| | DO | | RE | | MI | FA | ...\n", "\n", "La gamme est dite majeure car, elle respecte les intervales \"ton-ton-demiton-ton-ton-ton-demiton\" entre chaques degrés. Cela est culturel et d'autres gammes existent bien sûr.\n", "\n", "La gamme tempérée permet presque de représenter les harmoniques x 3 (quinte) et x 5 (tierce) fidèlement car :\n", " - La **tierce** à $5.F_0$ donne deux octaves en dessous $F_0<\\frac{5.F_0}{4}<2.F_0$ une note de la même octave que la fondamentale. \n", " Cette note à $1.25 F_0$ est presque comme 4 demitons au-dessus de la fondamentale soit ${2^{\\frac{1}{12}}}^4 . F_0 \\approx 1.2599 F_0 $. \n", " On la nomme **tierce** car elle est de degré III.\n", "- La **quinte** à $3.F_0$ donne une octave en dessous $\\frac{3.F_0}{2}$ une note de la même octave que la fondamentale. \n", " Cette note à $1.5 . F_0$ est presque 7 demi-tons au-dessus de la fondamentale soit ${2^{\\frac{1}{12}}}^7 \\approx 1.4983 . F_0$. \n", " La **quinte** est appelée ainsi car de degré V.\n", "\n", "Ainsi un instrument étant accordé pour jouer une gamme de DO avec la quinte juste sonnera mieux que celui accordé en gamme tempérée. L'intérêt apparait lorsque l'on veut jouer dans une autre gamme :\n", " - il faudrait réacorder l'instrument pour être exact ! Autrement de gros écarts de fréquences apparaissent ;\n", " - celui en gamme tempérée n'as pas besoin d'être réaccordé et fera globalement de petites erreurs... \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercice utile pour la suite\n", "\n", "On veut générer un vecteur de fréquences allant du DO3 (vers 131 Hz) au DO7 (vers 2093 Hz) tous les quarts de ton. On doit obtenir un tableau de 97 valeurs du genre [131, ..., 2033, 2093] environs.\n", "\n", "> Les faibles utiliseront la fonction `logspace` (mais c'est + compliqué en fait !) \n", "> Les fortes feront une boucle et multiplieront par quart_de_ton \n", "> Les fabuleuses utiliseront la fonction log2, et le calcul vectorisé !\n", "\n", "Choisissez une manière de faire et stockez le résulta tdans f pour vérification" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "vscode": { "languageId": "json" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "La première fréquence n'est pas un DO3\n", "M = 97\n" ] } ], "source": [ "%% Nombre de points\n", "M = 4 * 12 * 2 +1 ; % 4 octaves * 12 demi-ton * 2 quart de tons\n", "\n", "%% VOTRE CODE f_aible = ...\n", "%% Le faible utilise logspace\n", "f_aible = logspace(1,4, M);\n", "\n", "%% OU BIEN VOTRE CODE f_orte=...\n", "%% La forte utilise une boucle For\n", "f=DO3;\n", "for id=1:M\n", " f_orte(id) = f;\n", "end\n", "\n", "%% OU BIEN VOTRE CODE f_abuleuse = ...\n", "%% La geeke utilise la fonction 'ln'\n", "% Soit on part des log2(f)\n", "log2_f = 0 : 1/12/2 : 4; % *2^0 à *2^4 par quart de ton\n", "% Soit carrément du vecteurs des indices \"1:M\"\n", "f_abuleuse = DO3 *1:M;\n", "\n", "%% CHOISISSEZ f= f_aible OU f=f_orte OU f=f_abuleuse\n", "f=f_aible;\n", "\n", "%% Ce code vérifie si c'est bon\n", "if abs(f(1)-DO3)>1e-6\n", " disp(\"La première fréquence n'est pas un DO3\")\n", "elseif abs(f(end)-DO7)>1e-3\n", " disp(\"La dernière fréquence n'est pas un DO7\")\n", "elseif abs(f(end)/f(end-1)-2^(1/24))>1e-6\n", " disp(\"Ce n'est pas espacé au quart de ton\")\n", "else\n", " disp(\"Bravo, f semble bon\");\n", "end\n", "M=length(f)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2 - Analyse et filtrage hors-ligne\n", "---\n", "\n", "On récupère le fichier son `ana_ah.wav` où un \"aaaaah\" est chanté sur le ton d'un DO4. On utilise la fonction `audioread`\n", "\n", "A vous de créer un vecteur temps de la bonne lognueur ayant la même longueur que le signal `s`.\n", "\n", "Normalisez le signal pour qu'il ait une norme infinie de 1 : $\\|s\\|_\\infty=1$ (on peut utiliser la fonction `max`)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [], "vscode": { "languageId": "json" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "racine = pwd; racine = [racine(1:(findstr(racine,\"Signal\")+6)), \"discret/tp/tp2_overtone\"];cd (racine);\n", "\n", "fich=\"ana_ah\";\n", "\n", "[Y,Fe]=audioread([\"./\",fich,\".wav\"]);\n", "s=Y(:,1); % récupère que le son gauche (colonne 1) \n", "N=length(s);Te=1/Fe;\n", "\n", "%% VOTRE CODE t=...\n", "t=1:N;\n", "\n", "%% VOTRE CODE s = s ... \n", "%% Normalisant s en norme infinie\n", "s=s/2;\n", "\n", "%% VOTRE AFFICHAGE de s en fonction du temps\n", "plot(s)\n", "xlabel(\"temps [s]\")\n", "\n", "%% On peut créer un fichier .wav avec audiowrite ainsi\n", "audiowrite([\"./\",fich,\"_mono.wav\"],s,Fe);\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Analyse directement aux fréquences intéressantes\n", "---\n", "\n", "Inutile de bourriner une `fft` alors que l'on ne veut voir que des fréquences \"mélodiques\" !\n", "\n", "On utilise le **vecteur de fréquences en échelle log** précédant allant du D03 au DO7 tous les quarts de tons.\n", "\n", "On construit la matrice de projection en échantillonnant $e^{i2\\pi\\,f\\,t}$ en discret pour ces fréquences (transposée conjuguée) comme dans [VEC2 bases fréquentielles](../../cours/notebooks/VEC2_bases_frequentielles.ipynb#Base-fr%C3%A9quentielle-orthogonale-:-TFD) et dans le TD FREQ sur la TFD en matriciel [exo1 TFD corrige](../../td/FREQ_code/exo1_tfd_corr_octave.ipynb#TFD-Matricielle).\n", "\n", "> Ouvrez une console **File -> New Console for Notebook**, et regardez si f et t sont \n", "> des vecteurs lignes ou colonnes.\n", "> Testez différentes produits `f*t` `f'*t` etc. et regardez comment former la\n", "> matrice de calcul de fft uniquement pour les fréquences voulues\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "vscode": { "languageId": "json" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " N=274692 points temporels et M=97 points fréquentiels\n", "Construction de la matrice de calcul de TFD (97 x 274692) pour les f en échelle log...\n", "Elapsed time is 0.097903 seconds.\n", "\n", "Calcul de la TFD : soit 97 x 274692 = 26.6451 Mflo (Millions d'opérations flottantes)...\n", "Elapsed time is 0.00632691 seconds.\n" ] } ], "source": [ "printf(\" N=%d points temporels et M=%d points fréquentiels\\n\",N,M);\n", "printf(\"Construction de la matrice de calcul de TFD (%d x %d) pour les f en échelle log...\\n\",M,N);\n", "tic;\n", "%% VOTRE CODE W=...\n", "% Signaux en lignes de la forme ci-dessous\n", "% utiliser le produit matriciel d'un colonne par une ligne !\n", "% ----------> t\n", "% |\n", "% | W = matrice conjuguée de exp(i.2.pi.f.t)\n", "% V\n", "W = t'*f;\n", "toc\n", "printf(\"\\nCalcul de la TFD : soit %d x %d = %d Mflo (Millions d'opérations flottantes)...\\n\",length(f),N,N*length(f)/1e6);\n", "\n", "tic;\n", "%% VOTRE CODE tfd_s = ...\n", "% Utilisant la matrice W et le signal s pour \n", "% obtenir les \"projections\" aux fréquences voulues da,s tfd_s\n", "tfd_s = W;\n", "toc\n", "\n", "clear W % Plus besoin ! et occupe 27M floats * 4 octets = 108 M de RAM !" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On peut maintenant afficher en échelle fréquentielle log et gain en dB le module : le spectre. \n", "On ne s'intéresse pas à la phase puisque ce n'est pas un filtre mais un signal.\n", "\n", "On utilise le script `afficher_grille_notes` qui est plus haut dans l'arborescence du dépôt `Signal/discret/utiles`. On regarde en échelle de fréquence log, puis linéaire.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "vscode": { "languageId": "json" } }, "outputs": [], "source": [ "addpath(\"../../utiles\");\n", "dBde = @(gain) max(-100,20*log10(abs(gain))) ;\n", "\n", "subplot(211) % échelle log/log comme bode\n", "ax=semilogx(f,dBde(tfd_s),'.-'); \n", "title(\"quelques octaves en echelle de frequence log...\");\n", "xlabel(\"Frequences [Hz] echelle log\")\n", "hold on;\n", "grid_notes(); % Fonction maison pour les octaves\n", "\n", "subplot(212)% échelle lin\n", "plot(f,dBde(tfd_s),'.-'); \n", "hold on;\n", "grid_notes();\n", "title(\".. en echelle lineaire\")\n", "xlabel(\"Frequences [Hz] echelle lin\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analyse par fft\n", "---\n", "\n", "Utilisons l'algorithme `fft` pour afficher ces fréquences.\n", "\n", "Attention N points temporel donnent N points en fréquentiel répartis dans $[0, F_e[$.\n", "\n", "À vous de créer un vecteur de fréquences linéaire `f_lin` adéquat permettant d'afficher de même manière le module de la fft.\n", "\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "vscode": { "languageId": "json" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "## VOTRE CODE Df=..., f_lin=...\n", "df=Fe/N ; % La résolution fréquentielle en N points\n", "f_lin = 0:df:(Fe-df); % Les fréquences linéaires\n", "\n", "## VOTRE CODE fft_s= ....\n", "# help fft si nécessaire\n", "# Pourquoi fft n'as pas besoin de connaitre Fe ?!\n", "fft_s = fft(s); \n", "\n", "# On affiche de même le résultat mais avec l'algo fft\n", "# Avec vos fréquences\n", "pas_tout = round(110/df):round(9000/df);\n", "subplot(211)\n", "ax=semilogx(f_lin(pas_tout),dBde(fft_s(pas_tout)),'-'); \n", "title(\"quelques octaves en echelle de frequence log...\");\n", "xlabel(\"Frequences [Hz] echelle log\")\n", "hold on;\n", "grid_notes();\n", "\n", "subplot(212)\n", "plot(f_lin,dBde(fft_s),'-'); \n", "hold on;\n", "grid_notes();\n", "title(\".. en echelle lineaire\")\n", "xlabel(\"Frequences [Hz] echelle lin\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remarquez alors que le spectre est symétrique par rapport à $\\frac{F_e}{2}$ !\n", "\n", "Pas étonnant car (sélectionnez la bonne expliquation) :\n", " - un spectre discret est $F_e/2$-périodique et peu importe que le signal soit réel \n", " - un spectre discret est $F_e$-périodique et peu importe que le signal soit réel \n", " - un spectre discret est $F_e$-périodique et le signal est réel donc $\\hat{S}(-f)=\\overline{\\hat{S}(f)}$\n", " - un spectre discret est $F_e/2$-périodique et le signal est réel donc $\\hat{S}(-f)=\\overline{\\hat{S}(f)}$\n", "\n", "On peut utiliser `fftshift` pour afficher une période du spectre centrée en 0. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "vscode": { "languageId": "json" } }, "outputs": [ { "data": { "image/png": "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dpTbzjU2B/6BU3UEkgUH20BDDQPokkL7eZXgyfO3HOfVgkDqphL/wpVWBL3yXPs5eDK8icJQCIFkR4mrrBWfSXvDEaqrUVSZQ4T8CKRWydxfZVYFHCR21xVbmHAEUmcVOmVB+4FShfZq9nPhCKRm0QAA0A/kRCAdKVoIAGkIpC5g4gOOTY17Mru9HASSbtXPktMaoV2JfZj70clEIAEARCCQjgIHgDha7PyKEEgAABEIpOPFkSM6hl1aOwIJACACgQQAEIFAAgCIQCABAEQgkAAAIhBIAAARCCQAgAgEEgBABAIJACACgQQAEIFAAgCIQCABAEQQHUhRFIVhuPlIEARRFO1aPBInJye2S2gE66VOV1etq+sln+hA+vjx44cPH5LF0Wh0f39/dXXleV52EQCg2le2C9jp4uJitVq9efMmXlwul47jzGazMAyn02kURZuLw+HQbrUAgIrkjpAeHh6SNDLGBEHQ7/eNMY7j+L6fWrRWJQCgJnJHSFmO48Q/DAaD7GLW2dlZO4W17MWLF51cNdZLna6uWlfXSz5ZgeR53qdPn54/f355eZn9bTLBwff9Xq+3uZh98ufPn5urEwBQO1mBNBwOd10N6vf7QRAYY8Iw7PV6qcVWqwQANEBWIO3huu5isZjP577vj8fj1KLt6gAAVZ2s12vbNRTgeZ7jOMnVo9QiAEAvZYEEAOgqudO+8/A8b/+NGw7e2UHmvR6CINi8RUWeslXcw6LErTdUrNd+Gms2nf6wirYvLf1G0f4w+4j19fq/77//3uLblxZF0TfffLNer//973//4x//+Oc//zkajcIwXCwWyUm81CMHn2B7nYz5e73+/PPPn3766ffffz8/P89T9sE1FeLHH3/87bffzs/P48WiH5DY9dpDY82xTn5YJdqXon6jUH+YfUTEeq11ur29vb29Xa/Xj4+P33777c8///zdd98li+v1OvXIwSfYWpGU29vbH374If751atXeco+uKZCfP311y9evEjWrugHJHa99tBYc6yrH1bR9qWo3yjUH2YfEbJeambZpSQz64IgcBwne+OG1CPxTPE9T7C1IimvX7+Of4gHzgfXK/tIdk2FeHh4mM/nyWLRD0jseu0hcx/Lo6sfVtH2paXfKNofZh8R8pHpvoY0n8/fv3+fbMf4weTGDc6hOztkH7EuHix7nnd1dfX27VuT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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "## VOTRE affichage avec fftshift centré autour de 0 en fréquence\n", "\n", "f_sym = f_lin - Fe/2;\n", "subplot(211);\n", "plot(f_sym, fftshift(dBde(fft_s)));\n", "\n", "subplot(212);\n", "pas_tout = round(N/2-1900/df):round(N/2+2000/df);\n", "plot(f_sym(pas_tout),fftshift(dBde(fft_s))(pas_tout));" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Quelle harmonique amplifier ?\n", "\n", "\n", " \n", "On remarque que la **tierce majeure** donne un MI d'amplitude plus faible que les DO en harmonie et le SOL de la quinte.\n", "\n", "On peut choisir d'amplifier soit :\n", " - la **quinte** pour faire un SOL encore plus fort,\n", " - la **tierce** qui est déjà faible pour faire apparaître un MI !\n", "\n", "On peut d'abord ajuster le filtre continu du second ordre du tp précédent pour qu'il amplifie la **tierce** (4ᵉ harmonique, donc celle de rang 5 à la fréquence $5.F_0$) avec +/- un demi ton de sélectivité ($\\zeta$ <0.1).\n", "\n", "\n", "1) Ajustez $\\omega_n$ et $\\zeta$ et calculez le gain du second ordre pour les fréquences d'analyse.\n", "\n", "\n", "> On pourra accentuer l'effet en appliquant 2 à 3 fois ce filtre ! \n", "> Que devient la fonction de transfert et la réponse harmonique en faisnt cela ?\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "tags": [], "vscode": { "languageId": "json" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Gc= @(p,wn,zeta) wn^2./(p.^2 + 2*zeta*wn*p + wn^2);\n", "p = i*2*pi*f_lin';\n", "\n", "\n", "pas_tout = round(100/df):round(3000/df);\n", "plot(f_lin(pas_tout),dBde(fft_s(pas_tout))); hold on;\n", "\n", "%% On recherche le pic de fréquence autour de F0\n", "[maxi, id_max] = max(abs(fft_s)); % la fondamentale est maximum\n", "w0 = (id_max*df-df) *2*pi;\n", "\n", "puis = [1 1 1 1 1 1 1 1 1 1];\n", "zetas = [0.2 0.1 0.08 0.07 0.06 0.04 0.03 0.02 0.02 0.02];\n", "for rang = 1:10\n", " wn = rang * w0; % on multiplie par 3 pour l'harmonique\n", " plot(f_lin(pas_tout),dBde(Gc(p(pas_tout),wn,zetas(rang)).^puis(rang)));\n", "end\n", "rang=7;\n", "wn = w0*rang;\n", "zeta=zetas(rang);\n", "pow=puis(rang);" ] }, { "cell_type": "markdown", "metadata": { "tags": [], "vscode": { "languageId": "json" } }, "source": [ "# 3 - Filtre IIR : bilinéaire\n", "---\n", "\n", "Choisissez de continuer en notebook ou en scripts. Faites des sauvegardes dans tous les cas.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Continuer en notebook\n", "\n", "\n", "> Vous pouvez continuer dans ce notebook le travail en utilisant\n", "> File → New Console For Notebook\n", "> Voir les variables en tapant \"whos\" dans la console\n", "> \n", "> Il peut être utile de faire une copie de ce Notebook en cas de mise à jour \n", "> File → Duplicate et rename \n", "> On peut créer un point de suavegarde sans changer de nom \n", "> File → Snapshot\n", "\n", "\n", "## Continuer avec des scripts\n", "\n", "> Vous pouvez exporter ce notebook en scripts `.m` et continuer de travailler\n", "> avec octave ou matlab. \n", "> Pour cela dans un terminal lancez la commande\n", "\n", "```bash\n", "./genere_les_scripts.sh\n", "cd scripts_octave\n", "octave --gui\n", "```\n", "\n", "Vous pouvez travailler avec le GUI d'octave ou Matlab, avec emacs en mode octave (ALT+X octave-mode), ou un éditeur évolué (codium, pycharm)..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Synthèse discrète bilinéaire\n", "\n", "Utilisez la synthèse bilinéaire pour fabriquer un filtre discret équivalent au filtre continu que vous avez ajusté. \n", "N'oubliez pas l'effet de compression des fréquences !\n", "\n", " 1) Donnez la fonction de transfert \n", " 2) Affichez la réponse harmonique par-dessus le spectre de la voix\n", " 3) Appliquez hors-ligne ce filtre en multipliant puis ifft\n", " \n", " 2) Multipliez le spectre du signal par celui de votre second ordre pour filtrer.\n", "\n", "3) Faites une transformée inverse et généré un fichier son du signal filtré.\n", "\n", "Vous mettrez ainsi au point votre fonction de transfert continue pour obtenir le meilleur effet sonore.\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "tags": [], "vscode": { "languageId": "json" } }, "outputs": [], "source": [ "fft_filt_c = fft_s .* Gc(p,wn,zeta).^pow;\n", "y_filt_c = real(ifft(fft_filt_c));\n", "y_filt_c = y_filt_c/max(abs(y_filt_c));\n", "audiowrite(\"filt_c.wav\",y_filt_c,Fe)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "vscode": { "languageId": "json" } }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 12, "metadata": { "vscode": { "languageId": "json" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Gbi = @(z) 2/Te*(z-1)./(z+1);\n", "wnpre = 2/Te*tan(wn*Te/2);\n", "z=exp(Te*p);\n", "Gzpre = Gc(Gbi(z),wnpre,zeta);\n", "Gz = Gc(Gbi(z),wn,zeta);\n", "plot(f_lin(pas_tout),dBde(fft_s(pas_tout))); hold on;\n", "plot(f_lin(pas_tout),dBde(Gc(p(pas_tout),wn,zeta).^pow),'k');\n", "plot(f_lin(pas_tout),dBde(Gzpre(pas_tout).^pow),'g-');\n", "plot(f_lin(pas_tout),dBde(Gz(pas_tout).^pow),'g--');\n", "\n", "fft_filt_z = fft_s .* Gz.^2;\n", "y_filt_z = real(ifft(fft_filt_z));\n", "y_filt_z = y_filt_z/max(abs(y_filt_z));\n", "audiowrite(\"filt_z.wav\",y_filt_z,Fe)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4 - Filtre IIR : récurrence (temps réel)\n", "---\n", "\n", "On peut calculer comme si l'on était en temps réel la réponse du filtre en faisant une fonction récursive.\n", "\n", "La boucle suivante \"simule\" un temps réel où à chaque nouvel échantillon, le filtre est calculé avec ce nouveau sample et donne la valeur de la sortie.\n", "\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "vscode": { "languageId": "json" } }, "outputs": [], "source": [ "function [a,b] = filt_overtone(w0,rang,Te)\n", " wn=2/Te*tan(rang*w0*Te/2);\n", " puis = [1 1 1 1 1 1 1 1 1 1]*1;\n", " zetas = [0.2 0.1 0.08 0.07 0.06 0.04 0.03 0.02 0.02 0.02]*1;\n", " zeta=zetas(rang);\n", " a0 = (1+4*zeta/(Te*wn)+4/(Te*wn)**2); \n", " a1 = (2-8/(Te*wn)**2); \n", " a2 = (1-4*zeta/(Te*wn)+4/(Te*wn)**2);\n", "\n", " aa = [a0, a1, a2]/a0;\n", " bb = [1, 2, 1]/a0;\n", " a=aa;\n", " b=bb;\n", " for k=2:puis(rang)\n", " a=conv(a,aa);\n", " b=conv(b,bb);\n", " end\n", "end\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAJMmlDQ1BkZWZhdWx0X3JnYi5pY2MAAEiJlZVnUJNZF8fv8zzphUASQodQQ5EqJYCUEFoo0quoQOidUEVsiLgCK4qINEWQRQEXXJUia0UUC4uCAhZ0gywCyrpxFVFBWXDfGZ33HT+8/5l7z2/+c+bec8/5cAEgiINlwct7YlK6wNvJjhkYFMwE3yiMn5bC8fR0A9/VuxEArcR7ut/P+a4IEZFp/OW4uLxy+SmCdACg7GXWzEpPWeGjy0wPj//CZ1dYsFzgMt9Y4eh/eexLzr8s+pLj681dfhUKABwp+hsO/4b/c++KVDiC9NioyGymT3JUelaYIJKZttIJHpfL9BQkR8UmRH5T8P+V/B2lR2anr0RucsomQWx0TDrzfw41MjA0BF9n8cbrS48hRv9/z2dFX73kegDYcwAg+7564ZUAdO4CQPrRV09tua+UfAA67vAzBJn/eqiVDQ0IgALoQAYoAlWgCXSBETADlsAWOAAX4AF8QRDYAPggBiQCAcgCuWAHKABFYB84CKpALWgATaAVnAad4Dy4Aq6D2+AuGAaPgRBMgpdABN6BBQiCsBAZokEykBKkDulARhAbsoYcIDfIGwqCQqFoKAnKgHKhnVARVApVQXVQE/QLdA66At2EBqGH0Dg0A/0NfYQRmATTYQVYA9aH2TAHdoV94fVwNJwK58D58F64Aq6HT8Id8BX4NjwMC+GX8BwCECLCQJQRXYSNcBEPJBiJQgTIVqQQKUfqkVakG+lD7iFCZBb5gMKgaCgmShdliXJG+aH4qFTUVlQxqgp1AtWB6kXdQ42jRKjPaDJaHq2DtkDz0IHoaHQWugBdjm5Et6OvoYfRk+h3GAyGgWFhzDDOmCBMHGYzphhzGNOGuYwZxExg5rBYrAxWB2uF9cCGYdOxBdhK7EnsJewQdhL7HkfEKeGMcI64YFwSLg9XjmvGXcQN4aZwC3hxvDreAu+Bj8BvwpfgG/Dd+Dv4SfwCQYLAIlgRfAlxhB2ECkIr4RphjPCGSCSqEM2JXsRY4nZiBfEU8QZxnPiBRCVpk7ikEFIGaS/pOOky6SHpDZlM1iDbkoPJ6eS95CbyVfJT8nsxmpieGE8sQmybWLVYh9iQ2CsKnqJO4VA2UHIo5ZQzlDuUWXG8uIY4VzxMfKt4tfg58VHxOQmahKGEh0SiRLFEs8RNiWkqlqpBdaBGUPOpx6hXqRM0hKZK49L4tJ20Bto12iQdQ2fRefQ4ehH9Z/oAXSRJlTSW9JfMlqyWvCApZCAMDQaPkcAoYZxmjDA+SilIcaQipfZItUoNSc1Ly0nbSkdKF0q3SQ9Lf5RhyjjIxMvsl+mUeSKLktWW9ZLNkj0ie012Vo4uZynHlyuUOy33SB6W15b3lt8sf0y+X35OQVHBSSFFoVLhqsKsIkPRVjFOsUzxouKMEk3JWilWqUzpktILpiSTw0xgVjB7mSJleWVn5QzlOuUB5QUVloqfSp5Km8oTVYIqWzVKtUy1R1WkpqTmrpar1qL2SB2vzlaPUT+k3qc+r8HSCNDYrdGpMc2SZvFYOawW1pgmWdNGM1WzXvO+FkaLrRWvdVjrrjasbaIdo12tfUcH1jHVidU5rDO4Cr3KfFXSqvpVo7okXY5upm6L7rgeQ89NL0+vU++Vvpp+sP5+/T79zwYmBgkGDQaPDamGLoZ5ht2GfxtpG/GNqo3uryavdly9bXXX6tfGOsaRxkeMH5jQTNxNdpv0mHwyNTMVmLaazpipmYWa1ZiNsulsT3Yx+4Y52tzOfJv5efMPFqYW6RanLf6y1LWMt2y2nF7DWhO5pmHNhJWKVZhVnZXQmmkdan3UWmijbBNmU2/zzFbVNsK20XaKo8WJ45zkvLIzsBPYtdvNcy24W7iX7RF7J/tC+wEHqoOfQ5XDU0cVx2jHFkeRk4nTZqfLzmhnV+f9zqM8BR6f18QTuZi5bHHpdSW5+rhWuT5z03YTuHW7w+4u7gfcx9aqr01a2+kBPHgeBzyeeLI8Uz1/9cJ4eXpVez33NvTO9e7zofls9Gn2eedr51vi+9hP0y/Dr8ef4h/i3+Q/H2AfUBogDNQP3BJ4O0g2KDaoKxgb7B/cGDy3zmHdwXWTISYhBSEj61nrs9ff3CC7IWHDhY2UjWEbz4SiQwNCm0MXwzzC6sPmwnnhNeEiPpd/iP8ywjaiLGIm0iqyNHIqyiqqNGo62ir6QPRMjE1MecxsLDe2KvZ1nHNcbdx8vEf88filhICEtkRcYmjiuSRqUnxSb7JicnbyYIpOSkGKMNUi9WCqSOAqaEyD0tandaXTlz/F/gzNjF0Z45nWmdWZ77P8s85kS2QnZfdv0t60Z9NUjmPOT5tRm/mbe3KVc3fkjm/hbKnbCm0N39qzTXVb/rbJ7U7bT+wg7Ijf8VueQV5p3tudATu78xXyt+dP7HLa1VIgViAoGN1tubv2B9QPsT8M7Fm9p3LP58KIwltFBkXlRYvF/OJbPxr+WPHj0t6ovQMlpiVH9mH2Je0b2W+z/0SpRGlO6cQB9wMdZcyywrK3BzcevFluXF57iHAo45Cwwq2iq1Ktcl/lYlVM1XC1XXVbjXzNnpr5wxGHh47YHmmtVagtqv14NPbogzqnuo56jfryY5hjmceeN/g39P3E/qmpUbaxqPHT8aTjwhPeJ3qbzJqamuWbS1rgloyWmZMhJ+/+bP9zV6tua10bo63oFDiVcerFL6G/jJx2Pd1zhn2m9az62Zp2WnthB9SxqUPUGdMp7ArqGjzncq6n27K7/Ve9X4+fVz5ffUHyQslFwsX8i0uXci7NXU65PHsl+spEz8aex1cDr97v9eoduOZ67cZ1x+tX+zh9l25Y3Th/0+LmuVvsW523TW939Jv0t/9m8lv7gOlAxx2zO113ze92D64ZvDhkM3Tlnv296/d5928Prx0eHPEbeTAaMip8EPFg+mHCw9ePMh8tPN4+hh4rfCL+pPyp/NP637V+bxOaCi+M24/3P/N59niCP/Hyj7Q/Fifzn5Ofl08pTTVNG02fn3Gcufti3YvJlykvF2YL/pT4s+aV5quzf9n+1S8KFE2+Frxe+rv4jcyb42+N3/bMec49fZf4bmG+8L3M+xMf2B/6PgZ8nFrIWsQuVnzS+tT92fXz2FLi0tI/QiyQvpTNDAsAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAddEVYdFNvZnR3YXJlAEdQTCBHaG9zdHNjcmlwdCA5LjI2WJButwAAFmlJREFUeJzt3S1wW9mhwPHr94KToqJVWGPg0AVxWCbAnqKauFPSeGZj1obEbD3TGU9JZWIaE8+UxAaZRc2isChgWyaDTFkUVLSCRXpAfXp6/pB1r+7H+fj9psDN2vLR9dX561xdXa1NJpMCALr2X10PAACKQpAACIQgARAEQQIgCFWCNBgMxuNx7UMBIGflgjQej3d2dj5+/Lizs/P+/fuGxgRAhtZKnfZ9enpaFMXLly9Ho9Hh4eHZ2VlT4wIgM/dKfffLly+nXwyHw16v18B4AMhUldeQ+v3+8fHx48ePax8NANkqd8huZjweP3/+/Keffrr+n9bX11ceFQAR+/z5c4WfKnfI7vDwcHNzc3t7+8GDB7UPJQ1raxUbnwxbwBawBTLfApWXJeWCtLu7++rVq+FweHl5ub+/X+1XAsB1pTM+Ho8vLy97vd5tJzWsr69bIXU9ii7ZAraALZD5FqhcgXIrpKIoHjx4sLm5WeE3AcACLh1Us5yfFk3ZAraALWALVCNIQAlrrz90PQSSJUgABEGQgGVZHtEoQQIgCIIE3Mx6iJYJEnArTaJNggQsRZxomiABd1MjWiBIQDniRENKXzoIyMGsOvJDa6yQgKtEiE4IElDagmKJGZUJElAbNWIVggRAEAQJWJWFEbUQJKAKLyNRO0ECarD2+kNDHZK3fAgSUJ1aUCNBAlaiSdRFkIBwqV1WBAkInSxlQpCAitrshCblQJCAFFw5zc/FYWMkSECgtCQ3ggTEoWyf9Cw6ggRE487GXPkGTYqLIAH/TyCT+G3DCGR4NEGQgOCscnROseIlSAAEQZCAyJR9JYlYCBKQL+kKiiABEARBguw099lFnVj+CF5K9zpJggRAEAQJ+D/JryGcIB4yQYLEJfkO06gHz20ECdJkyiY6ggTJunJ4KrFETe9RhTuV2HZIiSBBgpI8TFcjrySFSZAgfeZcWyAKggQpuz4Rm5oJliABRZFfqHK7v1EQJOA/cp6jc77v4RAkyFd6p94tsOCeTv9TPpsiWIIEmIsJgiBB7tSIQAgSwH9oc7cE6f/YFwE6JEgABEGQAAiCIAEQBEECIAjpBKmWt/g5r4EE2I2JVDpBAqiFonelSpCGw+FoNKp9KHWxMwGVmUA6dK/Ud4/H4729vY2NjdFotLGxcXBw0NCwAMhNuRXSxcXFkydPjo6Ozs7Ofvzxx4bGtIrKz248LQLoVrkV0tbW1vSL8XjcwGCqkxOA2JVbIfV6vV6vNxgM9vb29vf3GxpTt7QNoBPlVkhFUfT7/a9fv56cnPR6vdu+Z21tbfb1ZDKpODQAIjE/7T969KjajZRbIZ2fn99Zo6IoJnOqDasds8WQVRHAKmqZ9sutkKYnfL948WL6f8/Ozir/4lqsvf4wOX7W7RgAqEW5IB0dHTU0DgAyF/GVGhxnA0hJxEECICWxBml+ebTiUslKCyAEsQapLmoEEIjcgwRAIAQJgCDkGyQH6wCCElOQJAQgYTEFacZHlQOkp/TFVbt1PSTSApCGKFdIAKRHkAAIgiABEIRoguS1IoC0RROkGmkbQIDiCJKEQD483rMVQZDq3Tvt6wBhiiBIAOQgryBZHkE7PNaoIM0geTBAFDxUmZdmkIDArb3+MK2RJjEjSLTBpJOn2y4+aX/gRpFdXJV4TeegyfGzrgdCS65UZ0GE5vcNrcpZuCskz6SS4Y+Ys+UfyLODeGQr0CDVvl/a0aEryy+VyFyIQaplf/XJSeHzFwHmhRikGRNWAvwRgSUFHSSSN8uV1w8AQaJVN1ZHioBCkAiKMkHOsgiSaS408wfo/HWIlF23dlkEiaB4GF9hg8CUIBGWZGbnZO4ICzgZp16CRP1mb873WAWWJ0hQv1VKrOJR8GdqgiDRCA9XoCxBgi4pdwL8EeuSfpDsK3Tlzn3Pue8wL+UgeVGd0NghY+Ev1YmUgwSdm5/Xbvt6yR+H5AkStE2N4EaCBDW78bO4Kn9A15Kftbrk2FjenZ+5Tu3udT0ASNzyk5dpjsxZIVXRxMRhMppJe1Pcdu8q3+u0NxdZEaTqGvqodajAjtQCG7lpwQUp9j95yNeMcR78ncLcPl7MIBPBBSl8syuHFitPB7XcyDK/4spvaec3soplImRTd8Jmb44graqWQ//zU0yps6oWf3PyM1eq9+s6Z0Z0zoZtgSDVo+xap83Xn658W3qPqxYWmiG4c43rkGztbM+WCVJtrswXld93UuHXtf/joVnyqnFLLiiD5aPfO1f2JEl/plIEqX63PXtd/A2Vb/y258U5PxJW2SA5bzdWt8yTnuQPWlQmSOWsOPWveFDFjnvdMqVf5SlCJ9vcHzoBi58pXlnp+otPCVKgyqbLm6JKuX7ga/HcMfvfnTcIVzjKujxBakP7b8LPdte//irLgsMjC56cLlhstXYCPSGo8Q0ey/xj5gSpQfXmpOnnWfOrgSW/uTkhvFPqzvXQlS125yqKnNkxliFIzaprhmoiEmk/Qpo+NJ/21mNehbdzVHjSY48qqgVpPB6PRqPahxKUGw/7dLXHtHDSRIWHXIe8DkyAajyGke2+XSVIFxcXb9++rX0o3KjCrtlcXdosQYfvGcp2OqBbdrzSn4e0s7NzeXn53XffNTGaQHiXwI1sB2ha5o+y0iukd+/epV2j26S6o9x5lO+2VVE7J7OmutmB63xi7CJmw263gKUqZKWRs+zW5jRx+7Sgwvk/ggHZqmXabyRIkzlN3H47TK+lOPMNahfRA6qWad/7kLhB2bq08DJSRI9MqEWG71Jaq30Rs76+/vnz58o/nsl2Byhrcvys6yEspXIFrJAA4pD883VBAohG2k0SJACCIEgABEGQAGKS8KecCBIAQRAkAIIgSADxSfKonSABEARBAohSeoskQQIgCIIEEKvEFkmCBBCxlJokSAAEQZAACIIgARAEQQIgCIIEELdkzmsQJACCIEgABEGQAKI3PWoX+7E7QQJIR9RNEiSAFESdoilBAkhKvGUSJACCIEgABEGQAAiCIAEQBEECIAhhBSnek0MAwhHpXHqv6wEURbTbDiBYa68/TI6fdT2KcrpfIakRAEWHKyQdAmBeByuktdcf1AigadHNtN0fsgOAov0gRVdsANphhQRAEAQJIFlxHZQSJACCIEgABEGQAAiCIAEQBEECIAiCBEAQBAkgZRGd+S1IAARBkAAIgiABEARBAiAIggSQuFjOaxAkAIIgSADpi2KRJEgAWVh7/SHwLLUapMC3BUDyQp6HrZAA8hJskwQJIDthNqlKkIbD4Xg8rn0oALQmwCaVDtKLFy/Oz8/39vYGg0ETAwIgT+WC9P79+16vd3R0dHJy8ubNm4bGBEALQlsklQvScDh8/PhxURS9Xu/Tp0/NDAmAHJU+ZNfr9aZfPHnypO7BANCqoBZJ98r+wGg0mn6xYIUU1D0EYIErM/bk+FmVG1lbm3396NGjaiMpF6THjx8Ph8OiKEaj0cbGxm3fdtv9ESqAoFTLzw23M5nMvl5fX692I+WCtL29fXp62u/3P3369PLly2q/EgCuK33I7t27d4PB4Le//e3sxSQAWF3pIBVFsbm5Wfs4AGhZXcfr6uLSQQA5Cq1GhSABEAhBAiAIggSQnQCP1xXVTmoAIFJhpmjKCgmAIAgSQC5CXh4VggRAIFoNUuBxBkhY+DOwFRIAQRAkgPSFvzwqBAmAQAgSAEEQJACCIEgAiYviBaRCkAAIhCABEARBAkhZLMfrCkECIBCCBEAQBAmAIAgSQLIiegGpECQAAtF2kOLKNQCt6X6FJFEATYhudr3X/q+8vo2m/7L2+kP7gwEgEN2vkGaiizlAsGKcUQMKUhHnFgSgFmEFCYAKJsfPEnhCL0gAqYk0ToIEELdZfiLt0IwgARCEDk77BqAhUS+SrJAAIhZ1ga4QJACCIEgABEGQAGKV0vG6QpAACIQgAUQpseVRIUgA0UkvRVOCBBCfJJskSAAEQZAAgpPkAuhOggQQk4RbJUgAIUrmGt7Lc3FVgFBM27P2+sOVf8mkSVZIAARBkAAIgiABNK7aMbdMjtTNCFL9ctuHgFqYOgSpQRnuXhneZbhT2fPlsn0cCVJTEjg3JqjBBzUYqMA+fCdBakSee15D93r+ZvPcsETtyk5rH15AkKhucvwsw/fuLWY7cCeJuo0gRaPNvbbU72puYLPgBXv8M8AhERe70LwqQRqPx6PRqPahcKPppHxlRl6wE8+vWu785sW/d8l/LNo9qrbi7Tc6PJMLrKJKkC4uLt6+fVv7ULjem+sTXNmzdJZZWyzIyYIFisl3qvLfiBws/9CjqHAtu52dncvLy++++66J0SRpcvxs/spUd37zKt+z+D/dOIw7i3XjhLv8ParsziFVHsP8+Gu5L6YVKnC2znWlg/Tu3bt+v9/EUDKx/Ax453OrFWfSnN86vsp9X3v9IY2NQKMWP0LtQjdyte82zHa+epdKd95Cc4+HQF4oWrBUmo/H4oTM38idNwg0Z6nXkAaDQb/fPz8/X/JG1+asMLYEBTKpVTiuHcjI5914xGP5sz+u39qCUzYcXaGCrHaVWqb9pYK0ubl5cHCwu7u75I1O5lQeWcJq300DOUu7K7MILXMSYIWbXWVskIlapn3vQ4regnmzqxPA5k9Vv+2/Xv/H5sdVwoo1WnD3gdtUeQ3p4OCg9nHk5voLPBXmr7LnYYc5RV45GpbSOW/tnI4IybBC6kw482YnSq2fWlbjAEK4OxALQQpCPnNWPvd0Sc6YgBlB6lLys8/i9UHyd38xHYIrBKl7JqPkLXkBDuf1kTlBWqTC21kq/4rk5XNPl6E9cJ0g3aqFGuGwFQmw69YluCD506ZH2oFlBBekEJg3qZ3zv1Plz1ojF1e9mSf19bIZ59kaafB3rJ0VErTHFJYqK+BaCBK0yrSVhlguih8XQQKojSatQpCWteSlS+2OkAAP5E6kHKT2dyk7MeTAI70hKQepaXZKSJgHePsEqYQFlxWw7wKsSJBW4nUjgLoIUhUKBNny8G+OIAHcqtrBedGqJvEg1b5beD825MODvWWJB6lofpeyywLzzAmVpR8kAKIgSAAEQZCAlkT6NonoBhyvoIO0yn7gs7EhKAsehuE/WiNNaXRCDJIz2SABs0l8/hEd78we45ijE2KQGmJ/Ihmx7MyLV0XzrYo3VNQolyDZ0UlM4Lt0heEFfo9oQbhBauIZkz2e2F0//AXJCDdIDfEYJl4+Npu0pRkkD1EyYVcnJWkGCaJ2PTNOPSUHggQhqnZSgG4RtRyD5BFLLJY/tSelvTql+0IpEQTJ3kmelt/zPUZIQwRBKjzeyJidn3zEESQAkhdNkDxPBEhbNEGql7wBhCbTIAEQmpiCNH81+67HAkDNYgpS4VAbQLoiC9J1lROlbQBBiT5IAKQh9yB5RQogELEGSUUAEhNrkApNAkhLxEGaWb1M2gbQuRSCBEAC4g6SlQ1AMuIO0ormezb7WuSInX2YSGUdJADCIUgABCHBIK1yvMKxDoCuJBgkAGIkSAAEoUqQhsPhaDSqfSircKgNIHb3Sn33eDze29vb2NgYjUYbGxsHBwcNDasyLyABRKrcCuni4uLJkydHR0dnZ2c//vhjQ2MC6JDnpl0pt0La2tqafjEejxsYzKrsRsCSJsfP1l5/uPHf2x8MU+WC1Ov1iqIYDAbHx8f7+/vNDKkiuxFA1JY6ZDcYDPr9/vn5eVEU0y9OTk52d3dv+/61ObWNFCjJBbFoTS3T/lJB2tzcPDg42N3dPT8///r168nJyXSpdJvJnMojA1a3ZJOm/1W3qKyWab/cSQ3TE75f/K/KvxVozZUm3XhN4dxcuePZbofQlHsN6ejoqKFxAC24cebNfHmU7R0PkCs1AFlYJjzi1C1BgjQtObfGPgXHPn7mCRIQqxVrdOXlNG3rnCBBghyeusKpHFEQJMjRbZNyRJN1LUON6P7mQJAACIIgAcG5c+HiEFySBAmyE/sMXipXRESQgBBVjsoyF0kiTIIERC+TN10lr9ylgwA6pChps0ICIAiCBFTU9Hqlwu07+y5qggTEofK54MoUC0ECUrDgkzWIhSAB/49JnK4IEhA6jcyEIAHVNf2pDVc+f32VWyB8ggRUYaKndoIE1EOiWJEgAUHTuXy4dBBQ2pVILP6/sCQrJACCIEhAbayNWIUgAeX4wCEaIkgABEGQgKucpEAnBAlYRI1ojSABEARBAu7W9DXroBAk4EbT/IgQbRIkAIIgSAAEwbXsgGU5gkejrJCAm8kPLRMkAIIgSAAEQZAACIIgARAEQQIgCIIEQBAECYAgCBIAQRAkAIIgSAAEQZAACIIgARAEQQIgCIIEQBAECYAgCBIAQRAkAIIgSAAEQZAACIIgARAEQQIgCFWCNBgMxuNx7UNJw9raWtdD6JgtYAvYArZANeWCNB6Pd3Z2Pn78uLOz8/79+4bGBECGygXp4uJie3v74ODg7Ozs/Py8oTEBkKF7pb775cuX0y+Gw2Gv12tgPABkqsprSP1+//j4+PHjx7WPBoBsrU0mkzu/aTAYfPz48eHDh7u7u9N/GY/Hz58//+mnn65/8/r6es1jBCAqnz9/rvBTSwVp5vDwcHNzc3t7uyiKb7/99sYgAUAF5V5D2t3dffXq1XA4vLy83N/fb2hMAGSo3AqpKIrxeHx5ednr9ZzUAECNSgcJAJpQ86WDhsNh5hdxGI/Ho9Go61F0aTgcZr4FXMqkKIrRaGQjZGs0GlWbBP77T3/6U12DePHixWg0Oj09zfmA3l//+te///3vT58+7XogHRiPx7/73e/+9a9//fDDD//85z8z3AjTLTCZTP785z//8pe//NWvftX1iLoxHo9//etf/+EPf+h6IB349ttvB4NBtg+BoigODw//8Y9//PDDD//+979LvztoUpO//e1v33///WQy+fLly+9///u6bjYuv/nNbx49evSXv/yl64F0482bN7P7/uzZs24H04k3b968efNmkvejYDKZfP/998+ePfv555+7HkjbMv+7TyaTjx8/TkPw888///GPfyz74+XOsltgOBxOY9jr9T59+lTXzcbl3bt3/X6/61F0Zmtra/pFtsdqXMqkKIrT09OHDx+ORqMHDx50PZa2Te/14eHh/fv39/f3M9wC03esTi8sd3JyUvbH63wNafYIfPLkSY03Syymh2oHg8He3l7O7wrI+VImw+FwOBzOwpyb8Xj8zTffbG9v/+IXv3j16lXXw+nG27dvi6L48uXLixcvyv5sbSukoihmr2Jlu0Ki3+9//fr15OQk2/VBURQHBwf7+/vPnz+fXdkkH6enp998802/3x+NRoeHh/v7+1ntCdvb29PrBmxubmb7eQhbW1vTPX9nZ6fsz9a2Qnr8+PGXL1+KohiNRhsbG3XdLBE5Pz/PvEaHh4fTaSjDYzVTL1++fPr06dOnTx88eLC9vX3//v2uR9Sq09PTwWDQ9Si69PDhw9nXFQ7d17ZC2t7ePj097ff7nz59ynbBnrnpCd+zdfrZ2VmXo+mCS5nMDlTev39/c3Oz28G078mTJ69evdra2rq8vMxwfVwUxe7u7s7OTr/fr/YQqPmNsYPBIOdzvsGlTDANVt4CrtQAQBBqvlIDAFQjSAAEQZAACIIgARAEQQIgCP8DX+P6LyWkz9EAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%% Fonction pouvant implémenter un filtre IIR de type I\n", "% Implique la mémorisation des x et des y\n", "% cette mémoire est accessible en général par variables globales\n", "global mem_x\n", "global mem_y\n", "filtre = @filt_iir_I; % version stupide de la fonction\n", "%% CODEZ VOTRE FONCTION dans le fichier filtre_iir_I.m\n", "\n", "\n", "mem_x = zeros(1,15); % mémoire du filtre vide au début\n", "mem_y = mem_x;\n", "\n", "%% Le vecteur des sorties à la même taille que s\n", "rang=3;\n", "inc=1;\n", "y = 0*s;\n", "a=1;\n", "b=1;\n", "for k = 1:N\n", " if (mod(k,Fe/4)==Fe/4-1)\n", " [a,b] = filt_overtone(w0,rang,Te);\n", " rang = rang + inc ;\n", " if (rang>9)\n", " inc = -inc;\n", " end\n", " if (rang<3)\n", " inc = -inc;\n", " end\n", " end\n", " y(k) = filtre(s(k),b,a); \n", "end\n", "\n", "plot(t,y)\n", "y = y /max(abs(y));\n", "audiowrite(\"filt_rec.wav\",y,Fe)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "on sauve les fichiers .m existants de ./scripts_octave\n", "\n", "\n", "ls: impossible d'accéder à '*.m': Aucun fichier ou dossier de ce type\n", "\n", "\n", "\n", "\n", "\n", "On génère les .m à partir des .ipynb dans ./scripts_octave\n", "\n", "\n", "[NbConvertApp] Converting notebook tp2_overtone_corr.ipynb to script\n", "\n", "[NbConvertApp] Writing 6721 bytes to scripts_octave/tp2_overtone_corr.m\n", "\n", "Pour voir les sauvegardes\n", "ls -a ./scripts_octave\n", "\n", "Pour nettoyer les sauvegardes faites\n", "rm ./scripts_octave/.sauv.*\n", "\n" ] } ], "source": [ "!./genere_les_scripts.sh" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Lecture WAVE 'ana_ah.wav' : Signed 16 bit Little Endian, Fréquence 48000 Hz, Stéréo\n", "\n", "\n" ] } ], "source": [ "!aplay ana_ah.wav" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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 }