TB065

Trabajos Prácticos de la Materia Señales y Sistemas
Index Commits Files Refs
commit 1dcb2c4457549c8e0419d97e9a53eb7541e41305
parent 0e2e4f30d356ed8b15e56acf59f7f64cf70f2229
Author: Vittorioux <158307279+Vittorioux@users.noreply.github.com>
Date:   Tue, 10 Sep 2024 13:34:09 -0300

Creado con Colab
Diffstat:
Atpe_primera_parte_COLAB.ipynb | 428+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 428 insertions(+), 0 deletions(-)
diff --git a/tpe_primera_parte_COLAB.ipynb b/tpe_primera_parte_COLAB.ipynb
@@ -0,0 +1,427 @@
+{
+  "cells": [
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "view-in-github",
+        "colab_type": "text"
+      },
+      "source": [
+        "<a href=\"https://colab.research.google.com/github/mjkloeckner/TB065/blob/main/tpe_primera_parte_COLAB.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "id": "dbae172a-eb1c-4168-8151-9bb0f9e57cc2",
+      "metadata": {
+        "id": "dbae172a-eb1c-4168-8151-9bb0f9e57cc2"
+      },
+      "source": [
+        "# Señales y Sistemas (86.05/66.74/TB065) - TPE\n",
+        "# Primera Parte: Dominio de Tiempo\n",
+        "\n",
+        "En esta primera parte del trabajo práctico se pide graficar dos señales de\n",
+        "audio en formato 'WAV' en el dominio de tiempo; luego, para una de ellas,\n",
+        "identificar diferentes notas musicales y calcular la frecuencia fundamental de las mismas; finalmente, para la señal de audio restante identificar las diferencias entre instrumentos de percusión y armónicos.\n",
+        "\n",
+        "Para la realización de los gráficos se utiliza el lenguaje de programación\n",
+        "[python](https://www.python.org) junto con las librerías\n",
+        "[scipy](https://docs.scipy.org/doc/scipy/index.html),\n",
+        "[matplotlib](https://matplotlib.org/) y\n",
+        "[numpy](https://numpy.org/doc/stable/index.html).\n",
+        "\n",
+        "## Obtención y Muestra de Archivos\n",
+        "\n",
+        "Empezamos importando las librerías mencionadas previamente en un nuevo script\n",
+        "de python."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "id": "JpKUr5hTqVQ7",
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/",
+          "height": 294
+        },
+        "id": "JpKUr5hTqVQ7",
+        "outputId": "a46b9111-333e-4e9d-99f3-88376d390057"
+      },
+      "outputs": [
+        {
+          "output_type": "error",
+          "ename": "ValueError",
+          "evalue": "mount failed",
+          "traceback": [
+            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+            "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
+            "\u001b[0;32m<ipython-input-6-5a06ee438a1f>\u001b[0m in \u001b[0;36m<cell line: 2>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mgoogle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolab\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdrive\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mdrive\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_mount\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'/content/drive'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
+            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/google/colab/drive.py\u001b[0m in \u001b[0;36m_mount\u001b[0;34m(mountpoint, force_remount, timeout_ms, ephemeral, readonly)\u001b[0m\n\u001b[1;32m    281\u001b[0m             \u001b[0;34m'https://research.google.com/colaboratory/faq.html#drive-timeout'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    282\u001b[0m         )\n\u001b[0;32m--> 283\u001b[0;31m       \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'mount failed'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mextra_reason\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    284\u001b[0m     \u001b[0;32melif\u001b[0m \u001b[0mcase\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    285\u001b[0m       \u001b[0;31m# Terminate the DriveFS binary before killing bash.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;31mValueError\u001b[0m: mount failed"
+          ]
+        }
+      ],
+      "source": [
+        "from google.colab import drive\n",
+        "drive._mount('/content/drive')"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "id": "ba4c3cbd-8976-4044-b261-8c1931778dae",
+      "metadata": {
+        "id": "ba4c3cbd-8976-4044-b261-8c1931778dae"
+      },
+      "outputs": [],
+      "source": [
+        "import matplotlib.pyplot as plt\n",
+        "import numpy as np\n",
+        "\n",
+        "from scipy.io import wavfile"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "id": "bd8671f2-4d85-4aec-beee-d01d25e42e4e",
+      "metadata": {
+        "id": "bd8671f2-4d85-4aec-beee-d01d25e42e4e"
+      },
+      "source": [
+        "De la librería [scipy](https://docs.scipy.org/doc/scipy/index.html)\n",
+        "solo se importa la funcion\n",
+        "[wavfile](https://docs.scipy.org/doc/scipy/reference/io.html#module-scipy.io.wavfile),\n",
+        "ya que solo se utiliza esa función de esa librería.\n",
+        "\n",
+        "Continuamos leyendo el contenido del primer archivo de nombre `InASentimentalMood.wav`,\n",
+        "para eso se utiliza la función `wavfile.read()` de la librería [scipy](https://docs.scipy.org/doc/scipy/index.html).\n",
+        "Esta función devuelve los datos y la tasa de muestreo del archivo en formato WAV\n",
+        "cuyo nombre recibe como argumento."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "id": "db46a059-a799-42d4-9eaa-afe1ad530c9f",
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/",
+          "height": 294
+        },
+        "id": "db46a059-a799-42d4-9eaa-afe1ad530c9f",
+        "outputId": "65b6135b-78b8-4cb9-d249-1f86f1baca66"
+      },
+      "outputs": [
+        {
+          "ename": "FileNotFoundError",
+          "evalue": "[Errno 2] No such file or directory: 'InASentimentalMood.wav'",
+          "output_type": "error",
+          "traceback": [
+            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+            "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
+            "\u001b[0;32m<ipython-input-2-a2919793eab6>\u001b[0m in \u001b[0;36m<cell line: 2>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0mfile1_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'InASentimentalMood.wav'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mfile1_sample_rate\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfile1_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwavfile\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfile1_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
+            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/scipy/io/wavfile.py\u001b[0m in \u001b[0;36mread\u001b[0;34m(filename, mmap)\u001b[0m\n\u001b[1;32m    645\u001b[0m         \u001b[0mmmap\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    646\u001b[0m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 647\u001b[0;31m         \u001b[0mfid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'rb'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    648\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    649\u001b[0m     \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'InASentimentalMood.wav'"
+          ]
+        }
+      ],
+      "source": [
+        "file1_name = 'InASentimentalMood.wav'\n",
+        "file1_sample_rate, file1_data = wavfile.read(file1_name)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "id": "765df2e2-5434-488b-bdfd-b2c57feb4c2f",
+      "metadata": {
+        "id": "765df2e2-5434-488b-bdfd-b2c57feb4c2f"
+      },
+      "source": [
+        "Normalizamos los datos leídos del archivo dividiendo por el valor máximo que toma la señal. De esta forma, se acota la amplitud de la señal entre -1 y 1."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "id": "b346bbb6-d7d3-4e6f-a44b-461510c52c5f",
+      "metadata": {
+        "id": "b346bbb6-d7d3-4e6f-a44b-461510c52c5f"
+      },
+      "outputs": [],
+      "source": [
+        "file1_data = file1_data / np.max(file1_data)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "id": "1a234f91-aa8c-48c4-bd13-7878104842e3",
+      "metadata": {
+        "id": "1a234f91-aa8c-48c4-bd13-7878104842e3"
+      },
+      "source": [
+        "Para poder graficar los datos, se necesita saber a qué tiempo corresponde cada valor de la\n",
+        "señal, para lo cual se utiliza el método [arange](https://numpy.org/doc/stable/reference/generated/numpy.arange.html#numpy-arange)\n",
+        "de la librería [numpy](https://numpy.org/doc/stable/index.html); este método\n",
+        "devuelve un arreglo de números equidistantes del largo que recibe como parámetro,\n",
+        "en este caso del largo de los datos leídos del archivo. Para convertirlo a segundos\n",
+        "se divide por la tasa de muestreo, la cual también se obtiene cuando se lee el archivo."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "id": "ee3fe588-5919-4e0f-8f6b-d2dbeba0af35",
+      "metadata": {
+        "id": "ee3fe588-5919-4e0f-8f6b-d2dbeba0af35"
+      },
+      "outputs": [],
+      "source": [
+        "file1_time = np.arange(len(file1_data)) / file1_sample_rate\n",
+        "file1_figure_title = 'Gráfico de `' + str(file1_name) + '` en dominio de tiempo'"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "id": "eff070fb-d011-4b87-8c14-f4fba48b4ce4",
+      "metadata": {
+        "id": "eff070fb-d011-4b87-8c14-f4fba48b4ce4"
+      },
+      "source": [
+        "Con todos los datos ya procesados se utilizan los métodos del objeto pyplot de la\n",
+        "librería [matplotlib](https://matplotlib.org/) para obtener un gráfico."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "id": "3d95e5a6-4c46-4dc3-bf8e-1ba82af6eb1d",
+      "metadata": {
+        "id": "3d95e5a6-4c46-4dc3-bf8e-1ba82af6eb1d",
+        "colab": {
+          "base_uri": "https://localhost:8080/",
+          "height": 211
+        },
+        "outputId": "4b54a1b1-a1b7-4d13-dd1a-c6d27621014b"
+      },
+      "outputs": [
+        {
+          "output_type": "error",
+          "ename": "NameError",
+          "evalue": "name 'plt' is not defined",
+          "traceback": [
+            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+            "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
+            "\u001b[0;32m<ipython-input-2-bc1514663d4e>\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfile1_figure\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfile1_figure_title\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m12\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m6\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mfile1_figure_caption\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'Figura 1: '\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfile1_figure_title\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0mfile1_figure\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m.5\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m0.05\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfile1_figure_caption\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mha\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'center'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfontsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m14\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfile1_time\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfile1_data\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'Señal de Audio'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;31mNameError\u001b[0m: name 'plt' is not defined"
+          ]
+        }
+      ],
+      "source": [
+        "file1_figure = plt.figure(num=file1_figure_title, figsize=(12, 6))\n",
+        "file1_figure_caption = 'Figura 1: ' + file1_figure_title\n",
+        "\n",
+        "file1_figure.text(.5, -0.05, file1_figure_caption, ha='center', fontsize=14)\n",
+        "plt.plot(file1_time, file1_data, label='Señal de Audio')\n",
+        "plt.xlabel('Tiempo [s]')\n",
+        "plt.ylabel('Amplitud')\n",
+        "plt.grid(True)\n",
+        "plt.legend()\n",
+        "plt.show()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "id": "f424d686-a217-4edd-98d4-d066b44d9788",
+      "metadata": {
+        "id": "f424d686-a217-4edd-98d4-d066b44d9788"
+      },
+      "source": [
+        "Para el segundo archivo, se repite exactamente el mismo procedimiento,\n",
+        "solo que en este caso cambia el nombre del archivo del cual se obtienen los\n",
+        "datos, en este caso siendo `Zombie.wav`."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "id": "94dd2cf5-ff36-45ec-9593-80ecec73c414",
+      "metadata": {
+        "id": "94dd2cf5-ff36-45ec-9593-80ecec73c414"
+      },
+      "outputs": [],
+      "source": [
+        "file2_name = 'Zombie.wav'\n",
+        "file2_sample_rate, file2_data = wavfile.read(file2_name)\n",
+        "\n",
+        "file2_data = file2_data / np.max(file2_data)\n",
+        "\n",
+        "file2_time = np.arange(len(file2_data)) / file2_sample_rate\n",
+        "file2_figure_title = 'Gráfico de `' + str(file2_name) + '` en dominio de tiempo'\n",
+        "\n",
+        "file2_figure = plt.figure(num=file2_figure_title, figsize=(12, 6))\n",
+        "file2_figure_caption = 'Figura 2: ' + file2_figure_title\n",
+        "\n",
+        "file2_figure.text(.5, -0.04, file2_figure_caption, ha='center', fontsize=14)\n",
+        "\n",
+        "plt.plot(file2_time, file2_data, label='Señal de Audio')\n",
+        "# plt.title(file2_figure_title)\n",
+        "plt.xlabel('Tiempo [s]')\n",
+        "plt.ylabel('Amplitud')\n",
+        "plt.grid(True)\n",
+        "plt.legend()\n",
+        "plt.show()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "id": "024e9cb4-6217-4c16-bd70-f9af391e13b5",
+      "metadata": {
+        "id": "024e9cb4-6217-4c16-bd70-f9af391e13b5"
+      },
+      "source": [
+        "## Identificación de Notas Musicales\n",
+        "\n",
+        "Para identificar las diferentes notas musicales en el primer archivo (`InASentimentalMood.wav`),\n",
+        "analizamos visualmente el gráfico, reduciendo la escala de tiempo a un pequeño intervalo en zonas\n",
+        "específicas de la figura, como se muestra en la Figura 3 a continuación, en la cual se toma\n",
+        "el intervalo de tiempo `[26.50, 25.55]`."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "id": "00ee7caa-47c8-43bc-8d56-2e5cf1fac363",
+      "metadata": {
+        "colab": {
+          "background_save": true
+        },
+        "id": "00ee7caa-47c8-43bc-8d56-2e5cf1fac363",
+        "outputId": "4550309a-a4bf-4b46-b4e6-36437b645884"
+      },
+      "outputs": [
+        {
+          "ename": "NameError",
+          "evalue": "name 'file1_name' is not defined",
+          "output_type": "error",
+          "traceback": [
+            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+            "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
+            "\u001b[0;32m<ipython-input-1-25c12a0e2e35>\u001b[0m in \u001b[0;36m<cell line: 5>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0mamplitude\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mfigure_title\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'Gráfico de `'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfile1_name\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'` en dominio de tiempo'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0mfigure\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfigure_title\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m12\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m6\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+            "\u001b[0;31mNameError\u001b[0m: name 'file1_name' is not defined"
+          ]
+        }
+      ],
+      "source": [
+        "t = 26.5\n",
+        "dt = .05\n",
+        "amplitude = 1\n",
+        "\n",
+        "figure_title = 'Gráfico de `' + str(file1_name) + '` en dominio de tiempo'\n",
+        "\n",
+        "figure = plt.figure(num=figure_title, figsize=(12, 6))\n",
+        "figure_caption = 'Figura 3: ' + figure_title\n",
+        "\n",
+        "figure.text(.5, -0.04, figure_caption, ha='center', fontsize=14)\n",
+        "\n",
+        "data = file1_data / np.max(file1_data)\n",
+        "\n",
+        "plt.figure(num=figure_title, figsize=(12, 6))\n",
+        "plt.plot(file1_time, data, label='Señal de Audio')\n",
+        "# plt.title(figure_title)\n",
+        "plt.xlabel('Tiempo [s]')\n",
+        "plt.ylabel('Amplitud')\n",
+        "plt.grid(True)\n",
+        "# plt.axis([x_min, x_max, y_min, y_max])\n",
+        "plt.axis([t, t+dt, -amplitude, amplitude])\n",
+        "plt.legend()\n",
+        "plt.show()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "id": "4473673d-1b28-44b3-b022-b781aeda34d3",
+      "metadata": {
+        "id": "4473673d-1b28-44b3-b022-b781aeda34d3"
+      },
+      "source": [
+        "## Diferencias entre Instrumentos de Percusión y Armónicos\n",
+        "\n",
+        "De manera análoga al análisis realizado para la Figura 3, se analiza la Figura 2, correspondiente\n",
+        "al segundo archivo, queriendo hallar diferencias notables entre los intrumentos de\n",
+        "percusión y los armónicos."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "id": "dfc2b4b4-7d3a-4da5-8b22-45d224050493",
+      "metadata": {
+        "id": "dfc2b4b4-7d3a-4da5-8b22-45d224050493"
+      },
+      "outputs": [],
+      "source": [
+        "t = 6.0\n",
+        "dt = 0.025\n",
+        "amplitude = 1\n",
+        "\n",
+        "figure_title = 'Gráfico de `' + str(file2_name) + '` en dominio de tiempo'\n",
+        "\n",
+        "figure = plt.figure(num=figure_title, figsize=(12, 6))\n",
+        "figure_caption = 'Figura 4: ' + figure_title\n",
+        "\n",
+        "figure.text(.5, -0.04, figure_caption, ha='center', fontsize=14)\n",
+        "\n",
+        "data = file2_data / np.max(file2_data)\n",
+        "\n",
+        "plt.figure(num=figure_title, figsize=(12, 6))\n",
+        "plt.plot(file2_time, data, label='Señal de Audio')\n",
+        "# plt.title(figure_title)\n",
+        "plt.xlabel('Tiempo [s]')\n",
+        "plt.ylabel('Amplitud')\n",
+        "plt.grid(True)\n",
+        "# plt.axis([x_min, x_max, y_min, y_max])\n",
+        "plt.axis([t, t+dt, -amplitude, amplitude])\n",
+        "plt.legend()\n",
+        "plt.show()"
+      ]
+    }
+  ],
+  "metadata": {
+    "authors": [
+      {
+        "name": "Martin Javier Klöckner"
+      },
+      {
+        "name": "Matteo Aguilar Cafferata"
+      },
+      {
+        "name": "Victor Nicolás Chechko"
+      }
+    ],
+    "colab": {
+      "provenance": [],
+      "include_colab_link": true
+    },
+    "kernelspec": {
+      "display_name": "Python 3 (ipykernel)",
+      "language": "python",
+      "name": "python3"
+    },
+    "language_info": {
+      "codemirror_mode": {
+        "name": "ipython",
+        "version": 3
+      },
+      "file_extension": ".py",
+      "mimetype": "text/x-python",
+      "name": "python",
+      "nbconvert_exporter": "python",
+      "pygments_lexer": "ipython3",
+      "version": "3.11.6"
+    },
+    "title": "Trabajo Practico Especial"
+  },
+  "nbformat": 4,
+  "nbformat_minor": 5
+}
+\ No newline at end of file