{"id":263,"date":"2023-04-22T11:44:50","date_gmt":"2023-04-22T09:44:50","guid":{"rendered":"https:\/\/pierremisiuk.fr\/?p=263"},"modified":"2023-05-25T16:18:01","modified_gmt":"2023-05-25T14:18:01","slug":"projet-ingenieur-de-deuxieme-annee","status":"publish","type":"post","link":"https:\/\/pierremisiuk.fr\/index.php\/2023\/04\/22\/projet-ingenieur-de-deuxieme-annee\/","title":{"rendered":"Projet ing\u00e9nieur de deuxi\u00e8me ann\u00e9e"},"content":{"rendered":"\n<p>\ud83d\udc4b Je souhaiterais vous partager mon projet d&rsquo;ing\u00e9nieur, que j&rsquo;ai r\u00e9alis\u00e9 en bin\u00f4me cette ann\u00e9e (2023).<\/p>\n\n\n\n<p>Mon bin\u00f4me, <a href=\"https:\/\/www.linkedin.com\/in\/mathieu-schwoerer-805085254\/\" target=\"_blank\" rel=\"noreferrer noopener\">Mathieu SCHWOERER<\/a> : camarade de classe \u00e0 Telecom Physique Strasbourg, formation ing\u00e9nieur en \u00e9lectronique et informatique industrielle. <\/p>\n\n\n\n<p>Le projet a \u00e9t\u00e9 propos\u00e9 par notre enseignant de traitement du signal, Monsieur Vincent MAZET : Enseignant-Chercheur et Directeur des \u00e9tudes \u00e0 Telecom Physique Stasbourg.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p>L&rsquo;objectif de ce projet est de r\u00e9aliser 2 maquettes de travaux pratiques pour les cours de traitement du signal<sup>[1][2][3]<\/sup>. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cahier des charges <\/h2>\n\n\n\n<p>Cette partie d\u00e9finit les diff\u00e9rents crit\u00e8res demand\u00e9s par notre enseignant pour les deux maquettes. D&rsquo;un point de vue g\u00e9n\u00e9ral, les deux maquettes doivent \u00eatre p\u00e9dagogiques et adapt\u00e9es \u00e0 l&rsquo;apprentissage du traitement du signal. Les travaux pratiques de traitement du signal sont r\u00e9alis\u00e9s sur ordinateur \u00e0 l&rsquo;aide du langage de programmation Python. Pendant les TP, les \u00e9tudiants utilisent des notebooks <strong><a rel=\"noreferrer noopener\" href=\"https:\/\/jupyter.org\/\" target=\"_blank\">Jupyter<\/a><\/strong> pour programmer en Python.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Maquette 1 : Mesure de la vitesse du son <\/h3>\n\n\n\n<p>La premi\u00e8re maquette a pour but de mesurer la vitesse du son. La maquette sera compos\u00e9e de deux microphones et d&rsquo;un haut-parleur. Le haut-parleur \u00e9mettra un son, et les deux microphones acquerront ce son. Les \u00e9tudiants devront utiliser les outils de traitement du signal<sup>[1][2]<\/sup> pour calculer le d\u00e9calage temporel entre les deux signaux acquis, afin de d\u00e9terminer la vitesse du son.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Maquette 2 : Communication num\u00e9rique <\/h3>\n\n\n\n<p>La derni\u00e8re maquette a pour but de mettre en \u0153uvre une communication num\u00e9rique (voir figure 1 ci-dessous). Deux \u00e9tudiants munis d&rsquo;un ordinateur (avec Python) pourront s&rsquo;envoyer des messages num\u00e9riques.<\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image.png\" alt=\"\n\n\n\" class=\"wp-image-273\" width=\"525\" height=\"295\"\/><figcaption class=\"wp-element-caption\">Figure 1 : Cha\u00eene de communication num\u00e9rique<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Entre les deux ordinateurs, un bo\u00eetier simulant un canal permettra d&rsquo;appliquer du bruit, du filtrage et une inversion de polarit\u00e9 aux signaux. <\/p>\n\n\n\n<p>L&rsquo;objectif de ce bo\u00eetier <strong>CANAL <\/strong>est de montrer aux \u00e9tudiants les diff\u00e9rentes probl\u00e9matiques li\u00e9es \u00e0 la communication num\u00e9rique et comment utiliser les outils vus en cours de traitement du signal<sup>[3]<\/sup> pour y r\u00e9pondre.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-vivid-red-color has-alpha-channel-opacity has-vivid-red-background-color has-background\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">R\u00e9alisation de la premi\u00e8re maquette<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Synoptique <\/h3>\n\n\n\n<p>Avant de r\u00e9aliser la premi\u00e8re maquette, il a fallu rechercher le mat\u00e9riel. Nous avons s\u00e9lectionn\u00e9 :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>2 microphones<\/li>\n\n\n\n<li>1 haut-parleur<\/li>\n\n\n\n<li>1 adaptateur jack<\/li>\n<\/ul>\n\n\n\n<p>Ci-dessous, sur la figure 2, le synoptique de la premi\u00e8re maquette.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1632\" height=\"1002\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-17-at-16.00.12.png\" alt=\"\" class=\"wp-image-285\"\/><figcaption class=\"wp-element-caption\">Figure 2 : Synoptique de la premi\u00e8re maquette<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">Acquisition avec les microphones Hardware<\/h3>\n\n\n\n<p>Comme le montre la figure 2, les deux microphones sont reli\u00e9s \u00e0 l&rsquo;ordinateur via l&rsquo;entr\u00e9e micro.<\/p>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-ad2f72ca wp-block-group-is-layout-flex\">\n<p>La figure 3 montre les diff\u00e9rentes sorties d&rsquo;une prise Jack. On peut y voir que chaque microphone est st\u00e9r\u00e9o et divise l&rsquo;acquisition en 2 canaux.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-2.png\" alt=\"\" class=\"wp-image-291\" width=\"120\" height=\"213\"\/><figcaption class=\"wp-element-caption\">Figure 3 : Jack pinout<\/figcaption><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-3.png\" alt=\"\" class=\"wp-image-293\" width=\"289\" height=\"216\"\/><figcaption class=\"wp-element-caption\">Figure 4 : Doubleur jack<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p>Afin d&rsquo;acqu\u00e9rir les signaux des deux microphones avec une seule entr\u00e9e Jack, nous avons utilis\u00e9 un doubleur Jack (voir figure 4). Cette astuce nous a permis de r\u00e9cup\u00e9rer le signal du premier microphone sur le canal gauche et le signal du deuxi\u00e8me microphone sur le canal droit.<\/p>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Acquisition avec les microphones via python<\/h3>\n\n\n\n<p>Dans cette partie, nous allons vous d\u00e9tailler comment nous avons r\u00e9ussi \u00e0 acqu\u00e9rir les deux signaux des microphones avec Python en utilisant la librairie <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/spatialaudio\/python-sounddevice\/\" target=\"_blank\">sounddevice<\/a>. Cette derni\u00e8re permet d&rsquo;enregistrer et de jouer du son sur un ordinateur.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Exemple de code pour acqu\u00e9rir du son via sounddevice<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>import sounddevice as sd\n\nsample_rate = 44100 #Fr\u00e9quence d'\u00e9chantillonnage mp3\nduration = 1 #Dur\u00e9e de l'enregistrement \nchannels = 2 #Nombre de canaux\n\n# Enregistrer le son du microphone dans un fichier WAV\nrecorded_audio = sd.rec(int(duration * sample_rate), samplerate=sample_rate, channels=channels)\n\nsd.wait()  # Attendre la fin de l'enregistrement\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Traitement du signal <\/h3>\n\n\n\n<p>Pour obtenir le d\u00e9calage temporel entre les deux signaux, nous avons utilis\u00e9 l&rsquo;intercorr\u00e9lation<sup>[1]<\/sup>. <\/p>\n\n\n\n<p>Voici l&rsquo;expression de cette derni\u00e8re :<\/p>\n\n\n\n<div class=\"wp-block-katex-display-block katex-eq\" data-katex-display=\"true\"><pre>R_{xy}[m] = \\sum_{n=-\\infty}^{+\\infty} x[n+m] y[n]\\\\\n\\text{O\u00f9 $x$ est le premier signal et $y$ le signal envoy\u00e9 par le haut-parleur.}<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Exemple<\/h4>\n\n\n\n<p>Dans l&rsquo;exemple ci-dessous les deux microphones ont enregistr\u00e9 un bruit blanc :<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-5.png\" alt=\"\" class=\"wp-image-318\" width=\"373\" height=\"257\"\/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-6.png\" alt=\"\" class=\"wp-image-319\" width=\"373\" height=\"257\"\/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>L&rsquo;intercorr\u00e9lation entre le bruit blanc et chacune des acquisitions est alors \u00e9gale \u00e0 :<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-7.png\" alt=\"\" class=\"wp-image-320\" width=\"381\" height=\"258\"\/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-8.png\" alt=\"\" class=\"wp-image-321\" width=\"380\" height=\"261\"\/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Le pic de chaque corr\u00e9lation crois\u00e9e repr\u00e9sente l&rsquo;instant o\u00f9 le bruit blanc appara\u00eet sur le signal. Nous pouvons observer que le bruit blanc est apparu \u00e0 environ 2 secondes.<\/p>\n\n\n\n<p>Le pic de <code>CorrelLeft<\/code> est \u00e0 2.0084353 secondes, tandis que le pic de <code>CorrelRight<\/code> est \u00e0 2.0098866 secondes. En faisant la diff\u00e9rence entre ces deux pics, nous pouvons obtenir le d\u00e9calage temporel entre l&rsquo;acquisition des deux signaux.<\/p>\n\n\n\n<div class=\"wp-block-katex-display-block katex-eq\" data-katex-display=\"true\"><pre>\\Delta t = 2.0098866 - 2.0084353 = 0.0014513s\n<\/pre><\/div>\n\n\n\n<p>Une distance de 50 cm s\u00e9pare les micros, nous pouvons alors d\u00e9duire la vitesse du son.<\/p>\n\n\n\n<div class=\"wp-block-katex-display-block katex-eq\" data-katex-display=\"true\"><pre> v = \\frac{d}{\\Delta t} = \\frac{0.5}{ 0.0014513} = 344.5 m\/s<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Deuxi\u00e8me variante de la maquette <\/h3>\n\n\n\n<p>Cette deuxi\u00e8me approche permet de mesurer la vitesse du son sans utiliser de haut-parleur. En effet, les deux microphones peuvent acqu\u00e9rir un signal significatif g\u00e9n\u00e9r\u00e9 par les \u00e9tudiants.<\/p>\n\n\n\n<p>Un signal significatif peut \u00eatre g\u00e9n\u00e9r\u00e9 en faisant un claquement de mains, ce signal ressemble alors \u00e0 un pic de Dirac.<\/p>\n\n\n\n<div class=\"wp-block-katex-display-block katex-eq\" data-katex-display=\"true\"><pre>\u03b4_n[k]=\n\\begin{cases}\n1 &amp; \\text{si } k=n \\\\\n0 &amp; \\text{sinon}\n\\end{cases}\\\\\n\n\n\\text{o\u00f9 $n$ est l'indice du pic et $k$ est l'indice de la position dans la s\u00e9quence discr\u00e8te.}\\\\\n\\text{La fonction $\\delta_n(k)$ est \u00e9gale \u00e0 1 si l'indice $k$ correspond \u00e0 l'indice $n$ du pic de Dirac,}\\\\\n\\text{et \u00e9gale \u00e0 0 pour tous les autres indices.}<\/pre><\/div>\n\n\n\n<p>Vous pouvez voir l&rsquo;exp\u00e9rience avec un claquement de main dans cet <a href=\"https:\/\/youtu.be\/MPMscy0UdUE\" data-type=\"URL\" data-id=\"https:\/\/youtu.be\/MPMscy0UdUE\" target=\"_blank\" rel=\"noreferrer noopener\">vid\u00e9o<\/a>. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<p>En conclusion, nous avons r\u00e9ussi \u00e0 fournir \u00e0 notre enseignant un sujet de TP et sa correction fonctionnelle. La maquette que nous avons con\u00e7ue est capable de mesurer la vitesse du son. Cependant, il y a quelques points que nous pourrions approfondir. Par exemple, nous pourrions envisager la cr\u00e9ation d&rsquo;une nouvelle maquette \u00e9quip\u00e9e de deux supports de micros r\u00e9glables pour mieux ajuster la distance entre eux. Id\u00e9alement, ces micros pourraient \u00eatre plac\u00e9s dans une bo\u00eete, ce qui nous permettrait de calculer ses dimensions.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button has-custom-width wp-block-button__width-25 has-custom-font-size is-style-fill has-medium-font-size\" id=\"l\"><a class=\"wp-block-button__link has-white-color has-text-color has-background has-text-align-center wp-element-button\" href=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/Maquette-1-e%CC%81nonce%CC%81-add9242bffba442790f90f293dd97361.html\" style=\"background:linear-gradient(66deg,rgb(243,139,123) 13%,rgb(254,45,45) 50%,rgb(227,8,8) 100%)\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>\u00c9nonc\u00e9<\/strong><\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:37px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-vivid-red-color has-alpha-channel-opacity has-vivid-red-background-color has-background is-style-default\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">R\u00e9alisation de la deuxi\u00e8me maquette<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Synoptique<\/h3>\n\n\n\n<p>En premier lieu nous avons r\u00e9fl\u00e9chi \u00e0 comment mettre en place une telle maquette. <\/p>\n\n\n\n<p>Nous avons d&rsquo;abord recherch\u00e9 plusieurs microcontr\u00f4leurs capable de traiter et restituer un signal audio. <\/p>\n\n\n\n<p>Finalement, nous avons s\u00e9lectionn\u00e9 le microcontr\u00f4leur <a rel=\"noreferrer noopener\" href=\"https:\/\/www.pjrc.com\/store\/teensy40.html\" target=\"_blank\">Teensy 4.0<\/a> et son <a rel=\"noreferrer noopener\" href=\"https:\/\/www.pjrc.com\/store\/teensy3_audio.html\" target=\"_blank\">module audio<\/a> pour r\u00e9aliser le CANAL. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Caract\u00e9ristique Teensy 4.0<\/h4>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li>ARM Cortex-M7 (600 MHz)<\/li>\n\n\n\n<li>Flash de 1984 Ko, RAM de 1024 Ko (512 Ko fortement coupl\u00e9s), EEPROM de 1 Ko (\u00e9mul\u00e9e)<\/li>\n\n\n\n<li>USB p\u00e9riph\u00e9rique \u00e0 480 Mbit\/s et USB h\u00f4te \u00e0 480 Mbit\/s<\/li>\n\n\n\n<li>40 broches d&rsquo;entr\u00e9e\/sortie num\u00e9riques, 31 broches de sortie PWM<\/li>\n\n\n\n<li>14 broches d&rsquo;entr\u00e9e analogiques<\/li>\n\n\n\n<li>7 ports s\u00e9rie, 3 ports SPI, 3 ports I2C<\/li>\n\n\n\n<li>2 ports audio num\u00e9riques I2S\/TDM et 1 port audio num\u00e9rique S\/PDIF<\/li>\n\n\n\n<li>3 bus CAN (1 avec CAN FD)<\/li>\n\n\n\n<li>RTC pour la date\/heure<\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"461\" height=\"224\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-10.png\" alt=\"\" class=\"wp-image-351\"\/><figcaption class=\"wp-element-caption\">Figure 5 : Carte Teensy 4.0<\/figcaption><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Caract\u00e9ristique module audio <\/h4>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"444\" height=\"427\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-11.png\" alt=\"\" class=\"wp-image-354\"\/><figcaption class=\"wp-element-caption\">Figure 6 : Module audio<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<ul class=\"wp-block-list\">\n<li>Codec audio MP3 : 44100Hz 16 bits (qualit\u00e9 CD)<\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n\n\n<p>Ces deux \u00e9l\u00e9ments permettent d&rsquo;acqu\u00e9rir un signal, de le traiter et de le restituer, comme le montre la figure ci-dessous. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-12.png\" alt=\"\" class=\"wp-image-385\" width=\"840\" height=\"327\"\/><figcaption class=\"wp-element-caption\">Figure 7 : Cha\u00eene de communication avec Teensy 4.0 et module audio<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Avec ces diff\u00e9rentes informations nous avons d\u00e9duit, pour la deuxi\u00e8me maquette, le synoptique suivant :<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"920\" height=\"363\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-9.png\" alt=\"\" class=\"wp-image-347\"\/><figcaption class=\"wp-element-caption\">Figure 8 : Synoptique de la deuxi\u00e8me maquette<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">M\u00e9canique<\/h3>\n\n\n\n<p>Comme nous pouvons le voir sur la figure 8, un bo\u00eetier est situ\u00e9 entre les deux ordinateurs. Comme expliqu\u00e9 dans l&rsquo;introduction, l&rsquo;objectif du bo\u00eetier est de simuler un v\u00e9ritable canal (en ajoutant des bruits au signal&#8230;).<\/p>\n\n\n\n<p>Le bo\u00eetier <strong>CANAL<\/strong> contient la carte Teensy, le module audio, une prise jack femelle et 5 interrupteurs. Ces interrupteurs permettent d&rsquo;activer\/d\u00e9sactiver la pr\u00e9sence de bruit, le filtrage et l&rsquo;inversion de polarit\u00e9.<\/p>\n\n\n\n<p>Nous avons d\u00e9fini la configuration ci-dessous pour les interrupteurs en collaboration avec notre enseignant.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1031\" height=\"386\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-13.png\" alt=\"\" class=\"wp-image-392\"\/><figcaption class=\"wp-element-caption\">Figure 9 : Disposition des interrupteurs<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Apr\u00e8s avoir d\u00e9finit l&#8217;emplacement des interrupteurs nous avons r\u00e9alis\u00e9 le bo\u00eetier ci-dessous avec l&rsquo;outil de CAO SolidWorks. <\/p>\n\n\n<div class=\"wp-block-embed-stl-embed-stl\" >\n<div id=\"stl-preview-83d57550_99b0_4584_9788_c4ecd31498df\" class=\"embed-stl-target embed-stl-size-md \">\n<img decoding=\"async\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/plugins\/embed-stl\/public\/img\/icon.svg\" class=\"embed-stl-cube-icon\">\n<\/div>\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function() {\nvar e = document.getElementById(\"stl-preview-83d57550_99b0_4584_9788_c4ecd31498df\"); var stlView_83d57550_99b0_4584_9788_c4ecd31498df = new StlViewer(e, {\"models\":[{\"id\":0,\"filename\":\"https:\\\/\\\/pierremisiuk.fr\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/CANAL.stl\",\"color\":\"#acabab\",\"display\":\"flat\"}],\"bg_color\":\"#ffffff\",\"auto_rotate\":false,\"grid\":false,\"allow_drag_and_drop\":false,\"send_no_model_click_event\":true});\nfunction stlView_83d57550_99b0_4584_9788_c4ecd31498df_recenter(id,evt,dist,ct) { if (ct != 11) return; v=stlView_83d57550_99b0_4584_9788_c4ecd31498df; c=v.get_camera_state(); c.position={...c.position, x:0, y:0, z:v.calc_z_for_auto_zoom()}; c.target={...c.target, x:0, y:0, z:0}; v.set_camera_state(c);};\nfunction stlView_83d57550_99b0_4584_9788_c4ecd31498df_orient() { v=stlView_83d57550_99b0_4584_9788_c4ecd31498df; m=v.models[0].mesh; m.rotation.x=0.0000; m.rotation.y=0.0000; m.rotation.z=0.0000; m.scale.setScalar(1.0000); };\nwindow.addEventListener(\"resize\", function() { stlView_83d57550_99b0_4584_9788_c4ecd31498df_recenter(0,0,0,11); });\nstlView_83d57550_99b0_4584_9788_c4ecd31498df.set_on_model_mousedown(stlView_83d57550_99b0_4584_9788_c4ecd31498df_recenter);\nstlView_83d57550_99b0_4584_9788_c4ecd31498df.all_loaded_callback=stlView_83d57550_99b0_4584_9788_c4ecd31498df_orient;\n});\n<\/script>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Programmation de la carte Teensy<\/h3>\n\n\n\n<p>Une des premi\u00e8res \u00e9tapes du projet a \u00e9t\u00e9 de comprendre le fonctionnement de la carte et du module audio. La carte Teensy se programme comme un arduino en langage C. <\/p>\n\n\n\n<p>Pour se faire, nous avons d&rsquo;abord t\u00e9l\u00e9charg\u00e9 la librairie arduino <code>Teensy<\/code> de Paul Stoffregen. <\/p>\n\n\n\n<p>Pour le module audio, il existe une <a rel=\"noreferrer noopener\" href=\"https:\/\/www.pjrc.com\/teensy\/gui\/?info=AudioSynthNoiseWhite\" target=\"_blank\">interface web<\/a> avec des blocs pour acqu\u00e9rir, traiter et restituer le flux audio. Ces blocks permettent d&rsquo;appliquer au signal, des filtres, du bruit, des effets (pour les plus musiciens d&rsquo;entre vous \ud83c\udfb5). L&rsquo;interface se pr\u00e9sente comme ci-dessous. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1509\" height=\"891\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-16.png\" alt=\"\" class=\"wp-image-446\"\/><figcaption class=\"wp-element-caption\">Figure 10 : Sch\u00e9ma bloc via interface web<\/figcaption><\/figure>\n<\/div>\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-15.png\" alt=\"\" class=\"wp-image-431\" width=\"274\" height=\"225\"\/><figcaption class=\"wp-element-caption\">Figure 11 : Doc bloc <code>i2s<\/code> output<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p>Les blocs <code>i2s<\/code> repr\u00e9sentent l&rsquo;entr\u00e9e et la sortie du module audio. Chaque bloc est bien document\u00e9 et permet une bonne compr\u00e9hension du sch\u00e9ma bloc. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Par exemple le bloc <code>i2s<\/code> output, est document\u00e9 comme sur la figure 11.<\/p>\n<\/div>\n<\/div>\n\n\n\n<p>Le code arduino du sch\u00e9ma bloc de la figure 10 peut \u00eatre export\u00e9 avec le bouton <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-black-color\"><code>Export<\/code><\/mark>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;Audio.h&gt;\n#include &lt;Wire.h&gt;\n#include &lt;SPI.h&gt;\n#include &lt;SD.h&gt;\n#include &lt;SerialFlash.h&gt;\n\n\/\/ GUItool: begin automatically generated code\nAudioInputI2S            i2s1;           \/\/xy=194.1999969482422,165.1999969482422\nAudioSynthNoiseWhite     noise1;         \/\/xy=194.20001602172852,232.1999855041504\nAudioMixer4              mixer1;         \/\/xy=388.2000026702881,195.19999885559082\nAudioOutputI2S           i2s2;           \/\/xy=556.2000350952148,170.19999885559082\nAudioConnection          patchCord1(i2s1, 0, mixer1, 0);\nAudioConnection          patchCord2(noise1, 0, mixer1, 1);\nAudioConnection          patchCord3(mixer1, 0, i2s2, 0);\nAudioConnection          patchCord4(mixer1, 0, i2s2, 1);\n\/\/ GUItool: end automatically generated code\n<\/code><\/pre>\n\n\n\n<p>Ce code va permettre d&rsquo;initialiser les diff\u00e9rents objets que nous allons utiliser dans notre code. Apr\u00e8s avoir r\u00e9cup\u00e9r\u00e9 ce code g\u00e9n\u00e9r\u00e9 par l&rsquo;interface web Teensy nous pouvons passer \u00e0 la programmation !<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void setup() { \n  \/*configuration du codec de la carte teensy *\/ \n  AudioMemory(160);  \n  ctl.enable(); \n  ctl.volume(0.8); \n  amp.gain(1); \n  ctl.inputSelect(AUDIO_INPUT_LINEIN); \n  \/*Configuration des objets*\/ \n  \/\/Cr\u00e9ation du bruit blanc   \n  noise1.amplitude(1); \n\/*Initialisation du programme en mode passe tout*\/ \n  signalPassthrough(); \n} <\/code><\/pre>\n\n\n\n<p>Ci-dessus le code de la fonction <code>setup<\/code>, elle va permettre d&rsquo;initialiser la carte Teensy. <\/p>\n\n\n\n<p>Dans le code <code>void loop()<\/code> pour activer le bruit blanc, il suffit de faire :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void loop(){\n    int bruit; \/\/variable qui active le bruit quand elle vaut 1\n    if(bruit==0){\n       mixer1.gain(0,1);\/\/Signal actif\n       mixer1.gain(1,0);\/\/Bruit pas actif\n    }\n    if(bruit==1){\n       mixer1.gain(0,1);\/\/Signal actif\n       mixer1.gain(1,1);\/\/Bruit actif\n    }\n}<\/code><\/pre>\n\n\n\n<p>Le bloc mixer pr\u00e9sent dans la figure 10 permet d&rsquo;additionner des signaux. En effet pour ajouter du bruit \u00e0 un signal nous devons utiliser : <\/p>\n\n\n\n<div class=\"wp-block-katex-display-block katex-eq\" data-katex-display=\"true\"><pre>y(t)=x(t)+b(t)\\\\\n\\text{O\u00f9 $y$ est le signal re\u00e7u, $x$ le signal envoy\u00e9 et $b$ le bruit ajout\u00e9.}<\/pre><\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"643\" height=\"235\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-18.png\" alt=\"\" class=\"wp-image-484\"\/><figcaption class=\"wp-element-caption\">Figure 12 : Zoom sur le sch\u00e9ma bloc<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>La fonction <code>mixerX.gain(channel,level)<\/code> permet d&rsquo;activer ou d\u00e9sactiver un signal qui passe dans le bloc. Comme nous pouvons le voir sur la figure 12, le bruit est sur la deuxi\u00e8me ligne du bloc mixer.  <code>mixer1.gain(1,1) <\/code>va ajouter le bruit \u00e0 l&rsquo;addition donc le signal <code>i2s2 <\/code>sera bruit\u00e9.<\/p>\n<\/div>\n<\/div>\n\n\n\n<p>Pour conclure cette partie, nous avons r\u00e9alis\u00e9 un code pour la carte Teensy qui permet \u00e0 notre <strong>CANAL<\/strong> de respecter le cahier des charges, le canal ajoute du bruit, du filtrage et une inversion de polarit\u00e9 comme d\u00e9fini sur la figure 9. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Programmation d&rsquo;une librairie python <\/h3>\n\n\n\n<p>Apr\u00e8s avoir programm\u00e9 la carte Teensy, nous sommes pass\u00e9s \u00e0 la programmation d&rsquo;une biblioth\u00e8que Python afin de permettre aux \u00e9tudiants d&rsquo;utiliser le bo\u00eetier.<\/p>\n\n\n\n<p>Cette biblioth\u00e8que python devra permettre aux \u00e9tudiants de communiquer des messages en utilisant l&rsquo;alphabet ASCII entre deux ordinateurs. Dans la biblioth\u00e8que, diff\u00e9rentes fonctions seront mises \u00e0 disposition des \u00e9tudiants pour leur permettre d&rsquo;envoyer des cha\u00eenes de caract\u00e8res ASCII modul\u00e9es avec diverses modulations en bande de base.<\/p>\n\n\n\n<p>Il est important de rappeler que les deux ordinateurs seront reli\u00e9s par un c\u00e2ble jack (voir figure 8), et que dans un premier temps le bo\u00eetier <strong>CANAL<\/strong> n&rsquo;interf\u00e8rera pas avec le signal.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Envoi d&rsquo;un message num\u00e9rique via la prise jack<\/h4>\n\n\n\n<p>En premier lieu, nous avons commenc\u00e9 par un POC (Proof of concept) pour valider le fait qu&rsquo;on peut envoyer un signal num\u00e9rique en Python avec un c\u00e2ble jack . <\/p>\n\n\n\n<p>Un signal num\u00e9rique, contrairement \u00e0 un signal analogique, est discr\u00e9tis\u00e9 c&rsquo;est-\u00e0-dire qu&rsquo;au lieu d&rsquo;\u00eatre continu, le signal va \u00eatre \u00e9chantillonn\u00e9 (voir figure 13). La plupart des ordinateurs poss\u00e8dent des cartes son travaillant \u00e0 une fr\u00e9quence d&rsquo;\u00e9chantillonnage de<code> F<sub>e<\/sub> = 44100 Hz<\/code> : Sur un signal d&rsquo;une seconde, la carte son va prendre <code>44100<\/code> points de ce signal. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1762\" height=\"766\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-19.png\" alt=\"\" class=\"wp-image-505\"\/><figcaption class=\"wp-element-caption\">Figure 13 : Signal analogique \/ Signal discret<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Nous avons d&rsquo;abord utilis\u00e9 le site <a rel=\"noreferrer noopener\" href=\"https:\/\/onlinetonegenerator.com\" target=\"_blank\">online tone generator<\/a> pour \u00e9mettre une sinuso\u00efde \u00e0 440 Hz \u00e0 partir d&rsquo;un ordinateur \u00e9metteur, puis nous avons r\u00e9ceptionn\u00e9 ce signal avec un ordinateur r\u00e9cepteur. Lors de cette exp\u00e9rience, nous avons r\u00e9ussi \u00e0 afficher le signal re\u00e7u en temps r\u00e9el avec Python en utilisant l&rsquo;exemple de code de la biblioth\u00e8que Sounddevice, qui permet d&rsquo;afficher le signal re\u00e7u par l&rsquo;entr\u00e9e microphone de l&rsquo;ordinateur. Vous pouvez retrouver le code pour tracer le signal en temps r\u00e9el sur le <a href=\"https:\/\/python-sounddevice.readthedocs.io\/en\/0.3.3\/examples.html\" target=\"_blank\" rel=\"noreferrer noopener\">site de la biblioth\u00e8que<\/a> sous le nom \u00ab\u00a0Plot Microphone Signal(s) in Real-Time\u00a0\u00bb.<\/p>\n\n\n\n<p>Apr\u00e8s avoir r\u00e9ussi \u00e0 \u00e9mettre et recevoir une sinuso\u00efde, nous avons commenc\u00e9 la r\u00e9daction de la librairie <code><strong>commnumfip<\/strong><\/code>. <\/p>\n\n\n\n<p>La premi\u00e8re fonction que nous avons r\u00e9dig\u00e9 permet de convertir une cha\u00eene de caract\u00e8res ASCII en signal modul\u00e9 en bande de base <a rel=\"noreferrer noopener\" href=\"https:\/\/vincmazet.github.io\/comnum\/modulation\/mod-bb.html\" target=\"_blank\">NRZ<sup>[3]<\/sup><\/a>.  Ci-dessous le code de la fonction.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>def NRZ_signal_generator(message):\n    \"\"\"\n    Convertit le message rentr\u00e9 en param\u00e8tre en code NRZ.\n    \n    Entr\u00e9es :\n    message (string)      : Message \u00e0 envoyer au canal en ASCII.\n    \n    Sortie :\n    aucune\n    \"\"\"\n    # Param\u00e8tres du signal Manchester\n    framerate = 44100 # Fr\u00e9quence d'\u00e9chantillonnage en Hz\n    amplitude = 0.5   # Amplitude du signal\n    frequence = 44  # Fr\u00e9quence du signal en Hz\n    duree_bit = 1\/frequence  # Dur\u00e9e d'un bit en secondes\n    # Convertir le message en une s\u00e9quence de bits (0 et 1)\n    bits = np.unpackbits(np.array(&#91;ord(c) for c in message], dtype=np.uint8))\n    # G\u00e9n\u00e9rer le signal NRZ\n    temps_bit = np.linspace(0, duree_bit, int(duree_bit * framerate), endpoint=False)\n    signal_nrz = np.zeros(0)\n    #preparation de la trame de d\u00e9but et ajout au message\n    print(bits)\n    for bit in bits:\n        if bit == 0:\n            signal_nrz = np.append(signal_nrz, amplitude * np.ones_like(temps_bit))\n        else:\n            signal_nrz = np.append(signal_nrz, -amplitude * np.ones_like(temps_bit))\n         # Ajouter des z\u00e9ros au d\u00e9but et \u00e0 la fin du signal\n    plt.figure()\n    plt.plot(signal_nrz)\n    plt.show()\n    signal_nrz = np.pad(signal_nrz, (int(framerate\/2), int(framerate\/2)), 'constant')\n    return signal_nrz<\/code><\/pre>\n\n\n\n<p>Cette fonction va convertir une cha\u00eene de caract\u00e8res en s\u00e9quence de bits gr\u00e2ce \u00e0 la fonction <code><strong>np.unpackbits<\/strong><\/code>. Par exemple le caract\u00e8re <code>'A' <\/code>en ASCII vaut <code>0x41 <\/code>donc <code>01000001<\/code> en binaire. Ci-dessous le tableau des caract\u00e8res ASCII : <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-20.png\" alt=\"\" class=\"wp-image-526\" width=\"840\" height=\"558\"\/><figcaption class=\"wp-element-caption\">Figure 14 : Tableau ASCII<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Le reste de la fonction va permettre de g\u00e9n\u00e9rer un signal NRZ d&rsquo;amplitude 0.5V \u00e0 -0.5V, un signal NRZ est d\u00e9finit comme ci-dessous.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"299\" height=\"238\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-22.png\" alt=\"\" class=\"wp-image-532\"\/><figcaption class=\"wp-element-caption\">Figure 15 : Signal NRZ o\u00f9 X est l&rsquo;amplitude du signal, ici X=0.5V<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Apr\u00e8s avoir cr\u00e9\u00e9 le signal NRZ, nous devons l&rsquo;envoyer au r\u00e9cepteur. Pour ce faire, nous utilisons la prise jack de l&rsquo;ordinateur. Comme pour la premi\u00e8re maquette, nous pouvons utiliser la biblioth\u00e8que <code><strong>sounddevice<\/strong><\/code>.<\/p>\n\n\n\n<p>Nous avons \u00e9crit une fonction <code><strong>send_signal_to_canal<\/strong><\/code> qui utilise la biblioth\u00e8que <strong><code>sounddevice <\/code><\/strong>pour envoyer le signal sur la prise jack. Ci-dessous le code de la fonction :<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>def send_signal_to_canal(signal):\n    \"\"\"\n    Envoie le signal au canal.\n    \n    Entr\u00e9es :\n    signal (array)      : signal.\n    \n    Sortie :\n    aucune\n    \"\"\"\n    sd.play(signal, 44100) #Code permettant de jouer le signal \u00e0 44,1 kHz de fr\u00e9quence d'\u00e9chantillonnage \n    sd.wait()<\/code><\/pre>\n\n\n\n<p>Tous ces \u00e9l\u00e9ments permettent \u00e0 l&rsquo;\u00e9tudiant de g\u00e9n\u00e9rer et d&rsquo;envoyer un message ASCII via le port jack d&rsquo;un ordinateur. Maintenant, dans un dernier temps, nous allons nous pencher sur l&rsquo;acquisition et le d\u00e9codage du signal.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">R\u00e9ception d&rsquo;un message num\u00e9rique via la prise jack<\/h4>\n\n\n\n<p>Apr\u00e8s avoir \u00e9mis le signal, nous avons cr\u00e9\u00e9 une fonction Python qui permet de recevoir le signal, de le convertir du format NRZ en ASCII et de retrouver le message initial.<\/p>\n\n\n\n<p>Dans la librairie <strong><code>commnumfip<\/code><\/strong>, nous avons ajout\u00e9 la fonction signal <strong><code>acquire_signal<\/code><\/strong>. Voir ci-dessous : <\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>def acquire_signal(fe: int, duration: float):\n    \"\"\"\n    Acquisition du message de la communication num\u00e9rique\n\n    Entr\u00e9e :\n    - fe (int): Taux d'\u00e9chantillonnage de l'acquisition.\n    - duration (float): Dur\u00e9e de l'acquisition en secondes.\n    \n    Sortie :\n    - numpy.ndarray: Signal contenant uniquement le message \n    \"\"\"\n    # Acquisition du signal.\n    signal = sd_cust.rec(int(duration*fe), samplerate=fe, channels=1)\n    sd_cust.wait()\n\n    # Suppression des premi\u00e8res valeurs si le bit de synchronisation est encore pr\u00e9sent.\n    signal = signal&#91;2200::]\n\n    t = np.arange(0,len(signal))\/44100\n\n    return t,signal<\/code><\/pre>\n\n\n\n<p>Cette fonction permet au r\u00e9cepteur d&rsquo;attendre une trame de l&rsquo;\u00e9metteur, en effet nous avons modifi\u00e9 la fonction <code><strong>rec<\/strong><\/code> originale de <code><strong>sounddevice<\/strong><\/code>, pour enregistrer en temps r\u00e9el et acqu\u00e9rir le message. Nous avons mis cela en place en modifiant la librairie <code><strong>sounddevice<\/strong><\/code> nous avons rajout\u00e9 dans la fonction une fonction callback qui scrute l&rsquo;amplitude du signal, si le seuil est d\u00e9tect\u00e9 alors un message est transmis sur la ligne. Le bruit pouvant \u00eatre activ\u00e9 avec le bo\u00eetier <strong>CANAL<\/strong> ne posera pas de probl\u00e8me \u00e9tant donn\u00e9 que le bruit est seulement actif lors de l&rsquo;\u00e9mission d&rsquo;un signal. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Gestion des probl\u00e9matique li\u00e9es au canal <\/h3>\n\n\n\n<p>Dans la communication num\u00e9rique, le canal r\u00e9el est soumis \u00e0 plusieurs probl\u00e9matiques, le signal r\u00e9ceptionn\u00e9 est potentiellement bruit\u00e9, filtr\u00e9&#8230; Lors de la r\u00e9ception, nous devons d&rsquo;abord appliquer un filtre de r\u00e9ception, puis effectuer l&rsquo;\u00e9chantillonnage, puis seuiller le signal afin de d\u00e9coder l&rsquo;information. <\/p>\n\n\n\n<p>Sans bruit, les \u00e9tudiants pourront \u00e9chantillonner et seuiller le signal avec les fonctions <code><strong>sample_and_threshold<\/strong><\/code> et par la suite d\u00e9coder les diff\u00e9rentes modulations. <\/p>\n\n\n\n<p>Cependant, en pr\u00e9sence de bruit, les \u00e9tudiants doivent utiliser un filtrage adapt\u00e9 pour retrouver les diff\u00e9rents fronts dans le signal. <\/p>\n\n\n\n<div class=\"wp-block-katex-display-block katex-eq\" data-katex-display=\"true\"><pre>y[n]=x[n]+b[n]\\\\\n\\text{O\u00f9 $y$ est le signal re\u00e7u, $x$ le signal envoy\u00e9 et $b$ le bruit ajout\u00e9.}<\/pre><\/div>\n\n\n\n<p>Pour r\u00e9cup\u00e9rer le signal x, nous devons faire une intercorr\u00e9lation entre y et le motif recherch\u00e9. <\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-24.png\" alt=\"\" class=\"wp-image-588\" width=\"248\" height=\"197\"\/><figcaption class=\"wp-element-caption\">Figure 16 : Motif du code NRZ<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p>La figure de gauche montre le motif \u00e0 rechercher. <\/p>\n\n\n\n<p>Le filtrage adapt\u00e9 sera donc \u00e9gal \u00e0 : <\/p>\n\n\n\n<div class=\"wp-block-katex-display-block katex-eq\" data-katex-display=\"true\"><pre>R_{yh}[m] = \\sum_{n=-\\infty}^{+\\infty} y[n+m] h[n]\\\\\n\\text{O\u00f9 $y$ est le signal re\u00e7u et $h$ le motif \u00e0 rechercher.}<\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Exemple <\/h4>\n\n\n\n<p>Dans cet exemple, nous allons voir l&rsquo;intercorr\u00e9lation (filtrage adapt\u00e9) entre un signal NRZ bruit\u00e9 et le motif de la figure 16. <\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"565\" height=\"455\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-27.png\" alt=\"\" class=\"wp-image-603\"\/><figcaption class=\"wp-element-caption\">Figure 17 : Signal NRZ bruit\u00e9<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"574\" height=\"455\" src=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/image-29.png\" alt=\"\" class=\"wp-image-613\"\/><figcaption class=\"wp-element-caption\">Figure 18 : Filtrage adapt\u00e9<\/figcaption><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<p>D&rsquo;apr\u00e8s la figure 18, le filtrage adapt\u00e9 donne le message binaire suivant :<\/p>\n\n\n\n<div class=\"wp-block-katex-display-block katex-eq\" data-katex-display=\"true\"><pre>y[n] = [0 1 0 0\\space0 0 1 0\\space0 1 1 0\\space1 1 1 1\\space0 1 1 0\\space1 1 1 0\\space0 1 1 0\\space1 0 1 0\\space 0 1 1 0\\space 1\n 1 1 1\\space 0 1 1 1 \\space0 1 0 1 \\space0 1 1 1 \\space0 0 1 0]\\\\\n\\text{Valeur en ASCII : 0x42 0x6F 0x6E 0x6A 0x6F 0x75 0x72 = Bonjour}\n<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<p>En conclusion, nous avons r\u00e9ussi \u00e0 fournir \u00e0 notre professeur une deuxi\u00e8me maquette fonctionnelle qui comprend un bo\u00eetier <strong>CANAL<\/strong>. Ce dernier est capable de r\u00e9cup\u00e9rer un flux audio, d&rsquo;ajouter du bruit, du filtrage et une inversion de polarit\u00e9, et de restituer le flux modifi\u00e9. De plus, nous avons fourni un TP p\u00e9dagogique pour mettre en \u0153uvre une communication num\u00e9rique. Les \u00e9tudiants pourront ainsi comprendre les probl\u00e9matiques li\u00e9es au canal de communication r\u00e9el et utiliser les outils de traitement du signal pour y r\u00e9pondre.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button has-custom-width wp-block-button__width-25 is-style-fill\"><a class=\"wp-block-button__link has-background wp-element-button\" href=\"https:\/\/pierremisiuk.fr\/wp-content\/uploads\/2023\/04\/maquette2_enonce.html\" style=\"background:linear-gradient(274deg,rgb(255,0,0) 0%,rgb(254,45,45) 50%,rgb(255,141,141) 100%)\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>\u00c9nonc\u00e9<\/strong><\/a><\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-vivid-red-color has-alpha-channel-opacity has-vivid-red-background-color has-background is-style-default\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">R\u00e9f\u00e9rences<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[1] \u00abTraitement du signal 1\u00bb. [en ligne]. Site de Vincent MAZET (Universit\u00e9 de Strasbourg), &nbsp;2020-2023 [consult\u00e9 le 22\/04\/2023]. <a rel=\"noreferrer noopener\" href=\"https:\/\/vincmazet.github.io\/signal1\/\" target=\"_blank\">https:\/\/vincmazet.github.io\/signal1\/<\/a><\/li>\n\n\n\n<li>[2] \u00abTraitement du signal 2\u00bb. [en ligne]. Site de Vincent MAZET (Universit\u00e9 de Strasbourg), &nbsp;2020-2023 [consult\u00e9 le 22\/04\/2023]. <a rel=\"noreferrer noopener\" href=\"https:\/\/vincmazet.github.io\/signal2\/\" target=\"_blank\">https:\/\/vincmazet.github.io\/signal2\/<\/a><\/li>\n\n\n\n<li>[3] \u00abCommunication num\u00e9rique\u00bb. [en ligne]. Site de Vincent MAZET (Universit\u00e9 de Strasbourg), &nbsp;2020-2023 [consult\u00e9 le 22\/04\/2023]. <a rel=\"noreferrer noopener\" href=\"https:\/\/vincmazet.github.io\/comnum\/\" target=\"_blank\">https:\/\/vincmazet.github.io\/comnum\/<\/a><\/li>\n\n\n\n<li>[4] \u00abAmerican Standard Code for Information Interchange\u00bb. [en ligne]. Page Wikip\u00e9dia ASCII,[consult\u00e9 le 28\/04\/2023]. <a rel=\"noreferrer noopener\" href=\"https:\/\/fr.wikipedia.org\/wiki\/American_Standard_Code_for_Information_Interchange\" target=\"_blank\">https:\/\/fr.wikipedia.org\/wiki\/American_Standard_Code_for_Information_Interchange<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Ressources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Github du projet : <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/zuce68\/ProjetFIP2A\" target=\"_blank\">https:\/\/github.com\/zuce68\/ProjetFIP2A<\/a> [consult\u00e9 le 25\/04\/2023]<\/li>\n\n\n\n<li>Carte Teensy 4.0 : <a rel=\"noreferrer noopener\" href=\"https:\/\/www.pjrc.com\/store\/teensy40.html\" target=\"_blank\">https:\/\/www.pjrc.com\/store\/teensy40.html<\/a> [consult\u00e9 le 25\/04\/2023]<\/li>\n\n\n\n<li>Module audio : <a rel=\"noreferrer noopener\" href=\"https:\/\/www.pjrc.com\/store\/teensy3_audio.html\" target=\"_blank\">https:\/\/www.pjrc.com\/store\/teensy3_audio.html<\/a> [consult\u00e9 le 25\/04\/2023]<\/li>\n\n\n\n<li>Site de jupyter :   <a rel=\"noreferrer noopener\" href=\"https:\/\/jupyter.org\/\" target=\"_blank\">https:\/\/jupyter.org<\/a> [consult\u00e9 le 25\/04\/2023]<\/li>\n\n\n\n<li>Courte vid\u00e9o du projet : <a href=\"https:\/\/youtu.be\/Gd5IspfefNo\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/youtu.be\/Gd5IspfefNo<\/a><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Projet FIP2A : Maquettes du traitement de signal\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/Gd5IspfefNo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc4b Je souhaiterais vous partager mon projet d&rsquo;ing\u00e9nieur, que j&rsquo;ai r\u00e9alis\u00e9 en bin\u00f4me cette ann\u00e9e (2023). Mon bin\u00f4me, Mathieu SCHWOERER : camarade de classe \u00e0 Telecom Physique Strasbourg, formation ing\u00e9nieur en \u00e9lectronique et informatique industrielle. Le projet a \u00e9t\u00e9 propos\u00e9 par notre enseignant de traitement du signal, Monsieur Vincent MAZET : Enseignant-Chercheur et Directeur des [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[16,12,19,13,14,18,22,8,21,10,11,15,17,20],"class_list":["post-263","post","type-post","status-publish","format-standard","hentry","category-projet-scolaire","tag-audio-module-teensy","tag-communication-numerique","tag-communication-numerique-teensy","tag-intercorrelation","tag-jupyter-notebook","tag-maquette-mesure-de-la-vitesse-du-son","tag-mathieu-schwoerer","tag-mesure-de-la-vitesse-du-son","tag-pierre-misiuk","tag-python","tag-sounddevice","tag-teensy","tag-teensy-traitement-du-signal","tag-traitement-du-signal"],"_links":{"self":[{"href":"https:\/\/pierremisiuk.fr\/index.php\/wp-json\/wp\/v2\/posts\/263","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pierremisiuk.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pierremisiuk.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pierremisiuk.fr\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/pierremisiuk.fr\/index.php\/wp-json\/wp\/v2\/comments?post=263"}],"version-history":[{"count":226,"href":"https:\/\/pierremisiuk.fr\/index.php\/wp-json\/wp\/v2\/posts\/263\/revisions"}],"predecessor-version":[{"id":710,"href":"https:\/\/pierremisiuk.fr\/index.php\/wp-json\/wp\/v2\/posts\/263\/revisions\/710"}],"wp:attachment":[{"href":"https:\/\/pierremisiuk.fr\/index.php\/wp-json\/wp\/v2\/media?parent=263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pierremisiuk.fr\/index.php\/wp-json\/wp\/v2\/categories?post=263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pierremisiuk.fr\/index.php\/wp-json\/wp\/v2\/tags?post=263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}