repos/TB065

Commits Files Refs
commit 8dd734591d15527a266b96086f2541c8e9f8ca36
parent e3184be8b67a6e80727c23766274f33e34f46e9d
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date:   Tue, 28 Oct 2025 23:52:03 -0300

Updated `tp/**`

Diffstat:
Atp/main.pdf | 0
Mtp/main.py | 225++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
Mtp/main.tex | 199++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Atp/out/a4_clarinete_cutoff_3000Hz.wav | 0
Atp/out/a4_flauta_cutoff_1000Hz.wav | 0
Atp/out/a4_violin_cutoff_4000Hz.wav | 0
Mtp/plot/a4_clarinete.png | 0
Atp/plot/a4_clarinete_comparison.png | 0
Atp/plot/a4_clarinete_cutoff_3000Hz.png | 0
Atp/plot/a4_clarinete_cutoff_3000Hz_fft.png | 0
Atp/plot/a4_clarinete_cutoff_time_comparison.png | 0
Atp/plot/a4_clarinete_fseries_comparison.png | 0
Mtp/plot/a4_flauta.png | 0
Atp/plot/a4_flauta_comparison.png | 0
Atp/plot/a4_flauta_cutoff_1000Hz.png | 0
Atp/plot/a4_flauta_cutoff_1000Hz_fft.png | 0
Atp/plot/a4_flauta_cutoff_time_comparison.png | 0
Atp/plot/a4_flauta_fseries_comparison.png | 0
Mtp/plot/a4_violin.png | 0
Atp/plot/a4_violin_comparison.png | 0
Atp/plot/a4_violin_cutoff_4000Hz.png | 0
Atp/plot/a4_violin_cutoff_4000Hz_fft.png | 0
Atp/plot/a4_violin_cutoff_time_comparison.png | 0
Atp/plot/a4_violin_fseries_comparison.png | 0
Mtp/plot/cancion1.png | 0
Mtp/plot/cancion1_0_248s_a_0_256s.png | 0
Mtp/plot/cancion1_0_520s_a_0_528s.png | 0
Mtp/plot/cancion1_espectograma_bartlett_0512.png | 0
Mtp/plot/cancion1_espectograma_bartlett_1024.png | 0
Mtp/plot/cancion1_espectograma_bartlett_2048.png | 0
Mtp/plot/cancion1_espectograma_boxcar_0512.png | 0
Mtp/plot/cancion1_espectograma_boxcar_1024.png | 0
Mtp/plot/cancion1_espectograma_boxcar_2048.png | 0
Mtp/plot/cancion1_espectograma_hamming_0512.png | 0
Mtp/plot/cancion1_espectograma_hamming_1024.png | 0
Mtp/plot/cancion1_espectograma_hamming_2048.png | 0
Mtp/plot/cancion1_espectograma_hann_0512.png | 0
Mtp/plot/cancion1_espectograma_hann_1024.png | 0
Mtp/plot/cancion1_espectograma_hann_2048.png | 0
Mtp/plot/cancion1_fft.png | 0
Mtp/plot/cancion1_filter1_output_compare.png | 0
Mtp/plot/cancion1_filter1_output_compare_0_248_a_0_256.png | 0
Mtp/plot/cancion1_filter1_output_fft.png | 0
Mtp/plot/cancion1_filter2_output_compare.png | 0
Mtp/plot/cancion1_filter2_output_compare_0_248_a_0_256.png | 0
Mtp/plot/cancion1_filter2_output_fft.png | 0
Mtp/plot/cancion2.png | 0
Mtp/plot/cancion2_14_72s_a_14_73s.png | 0
Mtp/plot/cancion2_26_57s_a_26_58s.png | 0
Mtp/plot/cancion2_6s_filter1_output_compare.png | 0
Mtp/plot/cancion2_6s_filter1_output_compare_26_57_a_26_58.png | 0
Mtp/plot/cancion2_6s_filter2_output_compare.png | 0
Mtp/plot/cancion2_6s_filter2_output_compare_26_57_a_26_58.png | 0
Mtp/plot/cancion2_espectograma_bartlett_0512.png | 0
Mtp/plot/cancion2_espectograma_bartlett_1024.png | 0
Mtp/plot/cancion2_espectograma_bartlett_2048.png | 0
Mtp/plot/cancion2_espectograma_boxcar_0512.png | 0
Mtp/plot/cancion2_espectograma_boxcar_1024.png | 0
Mtp/plot/cancion2_espectograma_boxcar_2048.png | 0
Mtp/plot/cancion2_espectograma_hamming_0512.png | 0
Mtp/plot/cancion2_espectograma_hamming_1024.png | 0
Mtp/plot/cancion2_espectograma_hamming_2048.png | 0
Mtp/plot/cancion2_espectograma_hann_0512.png | 0
Mtp/plot/cancion2_espectograma_hann_1024.png | 0
Mtp/plot/cancion2_espectograma_hann_2048.png | 0
Mtp/plot/cancion2_fft.png | 0
Mtp/plot/cancion2_filter1_output_fft.png | 0
Mtp/plot/cancion2_filter2_output_fft.png | 0
Dtp/plot/chorus_efecto.png | 0
Dtp/plot/chorus_original.png | 0
Dtp/plot/delay_efecto.png | 0
Dtp/plot/delay_original.png | 0
Dtp/plot/distorsion_efecto.png | 0
Dtp/plot/distorsion_original.png | 0
Mtp/plot/filter1_h_fft.png | 0
Mtp/plot/filter2_h_fft.png | 0
Dtp/plot/trembolo_efecto.png | 0
Dtp/plot/trembolo_original.png | 0
Dtp/plot/vibrato_efecto.png | 0
Dtp/plot/vibrato_original.png | 0
Mtp/utils.py | 96++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------
81 files changed, 406 insertions(+), 114 deletions(-)
diff --git a/tp/main.pdf b/tp/main.pdf
Binary files differ.
diff --git a/tp/main.py b/tp/main.py
@@ -3,7 +3,6 @@ from scipy.io import wavfile
 from utils import *
 
 ## Datos
-
 file1_path          = 'data/cancion1.wav'
 file2_path          = 'data/cancion2.wav'
 filter1_h_file_path = 'data/respuesta_impulso_1.txt'
@@ -15,17 +14,20 @@ a4_violin_file_path    = 'data/a4_violin.wav'
 
 file1_fs, file1_data = wavfile.read(file1_path)
 file2_fs, file2_data = wavfile.read(file2_path)
-
 filter1_h = np.loadtxt(filter1_h_file_path)
 filter2_h = np.loadtxt(filter2_h_file_path)
 
+a4_flauta_fs, a4_flauta_data = wavfile.read(a4_flauta_file_path)
+a4_clarinete_fs, a4_clarinete_data = wavfile.read(a4_clarinete_file_path)
+a4_violin_fs, a4_violin_data = wavfile.read(a4_violin_file_path)
+
 file1_filter1_output = np.convolve(file1_data, filter1_h, mode='same')
 file1_filter2_output = np.convolve(file1_data, filter2_h, mode='same')
-
 file2_filter1_output = np.convolve(file2_data, filter1_h, mode='same')
 file2_filter2_output = np.convolve(file2_data, filter2_h, mode='same')
 
-## 'cancion1'
+############################## Primera Parte ###################################
+
 def time_domain_cancion1():
     ### grafico completo
     time_plot(file1_fs, file1_data, file1_path)
@@ -38,11 +40,8 @@ def time_domain_cancion1():
                t=0.520, dt=0.008, a=0.5208, da=0.003)
 
     ### salida de filtro 'cancion1'
-    save_convolved_to_wav(file1_filter1_output, file1_fs,
-                          "file1_filter1_output.wav")
-
-    save_convolved_to_wav(file1_filter2_output, file1_fs,
-                          "file1_filter2_output.wav")
+    save_to_wav(file1_fs, file1_filter1_output, "file1_filter1_output.wav")
+    save_to_wav(file1_fs, file1_filter2_output, "file1_filter2_output.wav")
 
     ### grafico comparando la muestra 1 original y filtrada 1
     data_arr = [normalize(file1_data), normalize(file1_filter1_output)]
@@ -74,8 +73,8 @@ def time_domain_cancion2():
     time_plot(file2_fs, file2_data, "cancion2_14_72s_a_14_73s", t=14.720, dt=0.01)
     time_plot(file2_fs, file2_data, "cancion2_26_57s_a_26_58s", t=26.570, dt=0.01)
 
-    save_convolved_to_wav(file2_filter1_output, file2_fs, "file2_filter1_output.wav")
-    save_convolved_to_wav(file2_filter2_output, file2_fs, "file2_filter2_output.wav")
+    save_to_wav(file2_fs, file2_filter1_output, "file2_filter1_output.wav")
+    save_to_wav(file2_fs, file2_filter2_output, "file2_filter2_output.wav")
 
     ### grafico comparando la muestra 2 original y filtrada 2
     data_arr = [normalize(file2_data), normalize(file2_filter1_output)]
@@ -98,46 +97,34 @@ def time_domain_cancion2():
                        t=26.57, dt=0.01)
 
 def time_domain_music_instruments():
-    ## Sonido de instrumentos musicales
-    a4_flauta_fs, a4_flauta_data = wavfile.read(a4_flauta_file_path)
-    a4_clarinete_fs, a4_clarinete_data = wavfile.read(a4_clarinete_file_path)
-    a4_violin_fs, a4_violin_data = wavfile.read(a4_violin_file_path)
-
     ### grafico de los instrumentos musicales
     time_plot(a4_flauta_fs, a4_flauta_data, "a4_flauta", t=0.25, dt=0.010)
     time_plot(a4_clarinete_fs, a4_clarinete_data, "a4_clarinete", t=0.25, dt=0.010)
     time_plot(a4_violin_fs, a4_violin_data, "a4_violin", t=0.25, dt=0.010)
 
-def time_domain():
-    time_domain_cancion1()
-    time_domain_cancion2()
-    time_domain_music_instruments()
+
+############################## Segunda parte ##################################
 
 def freq_domain_cancion1():
-    freq_plot(file1_fs, file1_data, "cancion1_fft", f_max=8000, y_max=1e8)
+    freq_plot(file1_fs, file1_data, "cancion1_fft", f_max=8000)
     freq_plot(file1_fs, file1_filter1_output, "cancion1_filter1_output_fft",
-              f_max=8000, y_max=1e8)
+              f_max=8000)
     freq_plot(file1_fs, file1_filter2_output, "cancion1_filter2_output_fft",
-              f_max=8000, y_max=1e8)
+              f_max=8000)
 
 def freq_domain_cancion2():
     freq_plot(file2_fs, file2_data, "cancion2_fft",
-              f_max=8000, y_max=0.5e8)
+              f_max=8000)
     freq_plot(file2_fs, file2_filter1_output, "cancion2_filter1_output_fft",
-              f_max=8000, y_max=0.5e8)
+              f_max=8000)
     freq_plot(file2_fs, file2_filter2_output, "cancion2_filter2_output_fft",
-              f_max=8000, y_max=0.5e8)
-
-def freq_domain():
-    freq_domain_cancion1()
-    freq_domain_cancion2()
+              f_max=8000)
 
-    freq_plot(48000, filter1_h, "filter1_h_fft", f_max=2000)
-    freq_plot(48000, filter2_h, "filter2_h_fft", f_max=8000)
-
-    # Formas de ventana
+def freq_domain_spectograms():
+    # Formas de funcion ventana (en tiempo, en frecuencia tienen otra forma)
     # 'boxcar': rectangular
     # 'bartlett': triangular
+    # 'hann': similar a medio ciclo de seno
     # https://en.wikipedia.org/wiki/Window_function
 
     for i in [512, 1024, 2048]:
@@ -150,5 +137,171 @@ def freq_domain():
                             f"cancion2_espectograma_{window}_{i:04d}", t=6, N=i,
                             win=window, ylim=[0, 8000])
 
-time_domain()
-freq_domain()
+def a4_flauta_cutoff():
+    a4_flauta_cutoff_fft, a4_flauta_cutoff_freqs = freq_compute_fft(
+            a4_flauta_fs, a4_flauta_data)
+
+    # armonicos mayores a 'cutoff_freq' Hz son descartadas, analogo a aplicar un
+    # filtro pasabajos ideal
+
+    cutoff_freq = 1000
+    a4_flauta_cutoff_fft[np.abs(a4_flauta_cutoff_freqs) > cutoff_freq] = 0.0
+
+    # espectro de la señal filtrada
+    N = len(a4_flauta_cutoff_fft)
+    x = a4_flauta_cutoff_freqs[:N // 2]
+    y = np.abs(a4_flauta_cutoff_fft[:N // 2])
+    fig, axis = freq_graph_data(x, y, f_max=2000, show=False)
+    save_plot(fig, f"a4_flauta_cutoff_{cutoff_freq}Hz_fft")
+
+    # señal temporal reconstruida
+    a4_flauta_cutoff = ifft(a4_flauta_cutoff_fft).real
+
+    time_plot(a4_flauta_fs, a4_flauta_cutoff,
+              f"a4_flauta_cutoff_{cutoff_freq}Hz", 0.25, 0.010)
+
+    save_to_wav(a4_flauta_fs, a4_flauta_cutoff,
+                f"a4_flauta_cutoff_{cutoff_freq}Hz.wav")
+
+    data_arr = [normalize(a4_flauta_data), normalize(a4_flauta_cutoff)]
+    leg_arr = [
+        'Señal de nota A4 de flauta',
+        'Señal de nota A4 de flauta filtrada'
+    ]
+    time_plot_multiple(a4_flauta_fs, data_arr, leg_arr,
+                       "a4_flauta_cutoff_time_comparison", t=0.25, dt=0.008)
+
+    data_arr = [a4_flauta_cutoff, a4_flauta_data]
+    leg_arr = ["Nota musical A4 con flauta filtrada", "Nota musical A4 con flauta"]
+    freq_plot_multiple(a4_flauta_fs, data_arr, leg_arr, f_max=4000, t=0.253,
+                       dt=8*0.002272727, save_name="a4_flauta_comparison", show=False)
+
+def a4_clarinete_cutoff():
+    a4_clarinete_cutoff_fft, a4_clarinete_cutoff_freqs = freq_compute_fft(
+            a4_clarinete_fs, a4_clarinete_data)
+
+    cutoff_freq = 3000
+    a4_clarinete_cutoff_fft[np.abs(a4_clarinete_cutoff_freqs) > cutoff_freq] = 0.0
+
+    # espectro de la señal filtrada
+    N = len(a4_clarinete_cutoff_fft)
+    x = a4_clarinete_cutoff_freqs[:N // 2]
+    y = np.abs(a4_clarinete_cutoff_fft[:N // 2])
+    fig, axis = freq_graph_data(x, y, f_max=3000, show=False)
+    save_plot(fig, f"a4_clarinete_cutoff_{cutoff_freq}Hz_fft")
+
+    # señal temporal reconstruida
+    a4_clarinete_cutoff = ifft(a4_clarinete_cutoff_fft).real
+    time_plot(a4_clarinete_fs, a4_clarinete_cutoff,
+              f"a4_clarinete_cutoff_{cutoff_freq}Hz", 0.25, 0.010)
+    save_to_wav(a4_clarinete_fs, a4_clarinete_cutoff,
+                f"a4_clarinete_cutoff_{cutoff_freq}Hz.wav")
+
+    data_arr = [normalize(a4_clarinete_data), normalize(a4_clarinete_cutoff)]
+    leg_arr = [
+        'Señal de nota A4 de clarinete',
+        'Señal de nota A4 de clarinete filtrada'
+    ]
+    time_plot_multiple(a4_clarinete_fs, data_arr, leg_arr,
+                       "a4_clarinete_cutoff_time_comparison", t=0.25, dt=0.008)
+
+    data_arr = [a4_clarinete_cutoff, a4_clarinete_data]
+    leg_arr = [
+        "Nota musical A4 con clarinete filtrada",
+        "Nota musical A4 con clarinete"
+    ]
+
+    freq_plot_multiple(a4_clarinete_fs, data_arr, leg_arr, f_max=8000, t=0.253,
+                       dt=8*0.002272727, save_name="a4_clarinete_comparison", show=False)
+
+def a4_violin_cutoff():
+    a4_violin_cutoff_fft, a4_violin_cutoff_freqs = freq_compute_fft(
+            a4_violin_fs, a4_violin_data)
+
+    cutoff_freq = 4000
+    a4_violin_cutoff_fft[np.abs(a4_violin_cutoff_freqs) > cutoff_freq] = 0.0
+
+    # espectro
+    N = len(a4_violin_cutoff_fft)
+    x = a4_violin_cutoff_freqs[:N // 2]
+    y = np.abs(a4_violin_cutoff_fft[:N // 2])
+    fig, axis = freq_graph_data(x, y, f_max=4000, show=False)
+    save_plot(fig, f"a4_violin_cutoff_{cutoff_freq}Hz_fft")
+
+    # señal temporal reconstruida
+    a4_violin_cutoff = ifft(a4_violin_cutoff_fft).real
+    time_plot(a4_violin_fs, a4_violin_cutoff,
+              f"a4_violin_cutoff_{cutoff_freq}Hz", 0.25, 0.010)
+    save_to_wav(a4_violin_fs, a4_violin_cutoff, f"a4_violin_cutoff_{cutoff_freq}Hz.wav")
+
+    data_arr = [normalize(a4_violin_data), normalize(a4_violin_cutoff)]
+    leg_arr = ['Señal de nota A4 de violin', 'Señal de nota A4 de violin filtrada']
+    time_plot_multiple(a4_violin_fs, data_arr, leg_arr,
+                       "a4_violin_cutoff_time_comparison", t=0.25, dt=0.008)
+
+    data_arr = [a4_violin_cutoff, a4_violin_data]
+    leg_arr = ["Nota musical A4 con violin filtrada", "Nota musical A4 con violin"]
+    freq_plot_multiple(a4_violin_fs, data_arr, leg_arr, f_max=8000, t=0.253,
+                       dt=8*0.002272727, save_name="a4_violin_comparison", show=False)
+
+def a4_flauta_fseries():
+    fft_freqs_arr = []
+
+    for i in [8, 4, 1]:
+        fft, freqs = freq_compute_fft(a4_flauta_fs, a4_flauta_data, t=0.253, dt=i*0.002272727)
+        fft_freqs_arr.append([fft, freqs,
+              f"Serie de Fourier {i} periodo{'s' if i != 1 else ''}"])
+
+    fig, axis = freq_graph_multiple_data(fft_freqs_arr, show=False, f_max=4500)
+    save_plot(fig, "a4_flauta_fseries_comparison")
+
+def a4_clarinete_fseries():
+    fft_freqs_arr = []
+
+    for i in [8, 4, 1]:
+        fft, freqs = freq_compute_fft(
+                a4_clarinete_fs, a4_clarinete_data, t=0.253, dt=i*0.002272727)
+
+        fft_freqs_arr.append([fft, freqs,
+              f"Serie de Fourier {i} periodo{'s' if i != 1 else ''}"])
+
+    fig, axis = freq_graph_multiple_data(fft_freqs_arr, show=False, f_max=8000)
+    save_plot(fig, "a4_clarinete_fseries_comparison")
+
+def a4_violin_fseries():
+    fft_freqs_arr = []
+
+    for i in [8, 4, 1]:
+        fft, freqs = freq_compute_fft(a4_violin_fs, a4_violin_data,
+                                      t=0.253, dt=i*0.002272727)
+        fft_freqs_arr.append([fft, freqs,
+              f"Serie de Fourier {i} periodo{'s' if i != 1 else ''}"])
+
+    fig, axis = freq_graph_multiple_data(fft_freqs_arr, show=False, f_max=8000)
+    save_plot(fig, "a4_violin_fseries_comparison")
+
+
+
+############################# Llamados a funciones ############################
+
+# time_domain
+time_domain_cancion1()
+time_domain_cancion2()
+time_domain_music_instruments()
+
+# freq_domain
+freq_domain_cancion1()
+freq_domain_cancion2()
+freq_domain_spectograms()
+
+freq_plot(48000, filter1_h, "filter1_h_fft", f_max=2000)
+freq_plot(48000, filter2_h, "filter2_h_fft", f_max=8000)
+
+a4_flauta_fseries()
+a4_clarinete_fseries()
+a4_violin_fseries()
+
+# obs: para realizar el filtrado se toma toda la señal no solo un periodo
+a4_flauta_cutoff()
+a4_clarinete_cutoff()
+a4_violin_cutoff()
diff --git a/tp/main.tex b/tp/main.tex
@@ -288,8 +288,6 @@ que realiza una leve atenuación de toda la señal. Analizando en detalle como s
 \label{cancion1_filter2_output_compare_0_248_a_0_256}
 \end{figure}
 
-\pagebreak
-
 De manera análoga para la segunda muestra se aplican los filtros mediante la
 convolución entre la señal y la respuesta al impulso del respectivo filtro.
 
@@ -364,7 +362,7 @@ Se generaron tres muestras diferentes a las ya utilizadas, correspondientes con
 la nota \emph{A4} (La4, \(440\) Hz) mediante la simulación de tres instrumentos
 musicales distintos: un clarinete, una flauta y un violín. Las señales generadas
 corresponden con los archivos a4\_clarinete.wav, a4\_flauta.wav y a4\_violin.wav
-y los gráficos de cada señal se muestran en las figuras 11, 12 y 13,
+y los gráficos de cada señal se muestran en las figuras \ref{a4_clarinete_cutoff_time_comparison}, \ref{a4_clarinete_cutoff_time_comparison} y \ref{a4_violin_cutoff_time_comparison}
 respectivamente.
 
 Si bien todos los sonidos tienen la misma frecuencia, ya que es la misma
@@ -378,45 +376,42 @@ neutro es el producido por la flauta, mientras que el mas agudo o
 intermedio entre ambos, un sonido ni muy agudo ni muy grave o apagado, y
 con cierto carácter metálico.
 
-Para el caso del clarinete, cuya señal se puede ver en la figura 11 a
-continuación se puede ver que la onda se parece a una onda cuadrada. En
-el dominio de frecuencia, las ondas cuadradas ideales se componen de
-armónicos impares.
+Para el caso del clarinete, cuya señal se puede ver en la figura \ref{a4_clarinete_cutoff_time_comparison}, se puede ver que la onda se parece a una onda cuadrada. En el dominio de frecuencia, las ondas cuadradas ideales se componen de armónicos impares.
 
-\begin{figure}
-\centering
-\includegraphics{plot/a4_clarinete.png}
-\caption{Sonido de clarinete}
-\label{a4_clarinete}
-\end{figure}
+%\begin{figure}
+%\centering
+%\includegraphics{plot/a4_clarinete.png}
+%\caption{Sonido de clarinete}
+%\label{a4_clarinete}
+%\end{figure}
 
-Para la señal producida por la flauta que se puede ver en la figura 12,
+Para la señal producida por la flauta que se puede ver en la figura \ref{a4_clarinete_cutoff_time_comparison},
 se puede ver que se asemeja a una señal senoidal pura, aunque no tan
 simétrica en los picos, las ondas sinodales en el dominio de frecuencia
 tienen un único armónico, y es el fundamental, es por esto que el sonido
 es mas neutro y no tan ``brillante'' o agudo dado que la frecuencia es
 la misma en todos los casos.
 
-\begin{figure}
-\centering
-\includegraphics{plot/a4_flauta.png}
-\caption{Sonido de flauta}
-\label{a4_flauta}
-\end{figure}
+%\begin{figure}
+%\centering
+%\includegraphics{plot/a4_flauta.png}
+%\caption{Sonido de flauta}
+%\label{a4_flauta}
+%\end{figure}
 
 Por ultimo para la señal producida por el violín, la cual se puede ver
-en la figura 13, se asemeja a una onda triangular con pendiente
+en la figura \ref{a4_violin_cutoff_time_comparison}, se asemeja a una onda triangular con pendiente
 decreciente, estas ondas triangulares en el dominio de frecuencia
 también tienen armónicos impares como la onda cuadrada, pero estos
 armónicos tienen mayor amplitud, es por esto que si bien tienen un
 sonido similar, el sonido del violín es mas agudo.
 
-\begin{figure}
-\centering
-\includegraphics{plot/a4_violin.png}
-\caption{Sonido de violín}
-\label{a4_violin}
-\end{figure}
+%\begin{figure}[H]
+%\centering
+%\includegraphics{plot/a4_violin.png}
+%\caption{Sonido de violín}
+%\label{a4_violin}
+%\end{figure}
 
 
 
@@ -425,6 +420,7 @@ sonido similar, el sonido del violín es mas agudo.
 
 
 
+\pagebreak
 
 \hypertarget{Dominio-de-frecuencia}{%
 \section{Dominio de frecuencia}\label{dominio-de-frecuencia}}
@@ -459,9 +455,9 @@ no periódicas.
 \end{figure}
 
 \hypertarget{filtrado}{%
-\subsection{Filtrado}\label{filtrado}}
+\subsection{Filtrado en frecuencia}\label{filtrado}}
 
-A continuación se utilizaron las señales filtradas obtenidas en la primera parte y se graficaron sus espectros en frecuencia, como se puede observar en las figuras \ref{cancion1_filter1_output_fft}, \ref{cancion1_filter2_output_fft}, \ref{cancion2_filter1_output_fft} y \ref{cancion2_filter2_output_fft}. Los gráficos \ref{filter1_h_fft} y \ref{filter2_h_fft} corresponden a las transformadas de Fourier de los filtros utilizados anteriormente.
+A continuación se utilizaron las señales filtradas obtenidas en la primera parte para las muestras de los archivos `cancion1.wav' y `cancion2.wav' y se graficaron sus espectros en frecuencia, como se puede observar en las figuras \ref{cancion1_filter1_output_fft}, \ref{cancion1_filter2_output_fft}, \ref{cancion2_filter1_output_fft} y \ref{cancion2_filter2_output_fft}. Los gráficos \ref{filter1_h_fft} y \ref{filter2_h_fft} corresponden a las transformadas de Fourier de los filtros utilizados anteriormente.
 
 \begin{figure}[H]
 \centering
@@ -477,7 +473,7 @@ A continuación se utilizaron las señales filtradas obtenidas en la primera par
 \label{filter2_h_fft}
 \end{figure}
 
-Como era de esperarse y como se anticipó en la primera parte, el primer filtro corresponde a un filtro pasa altos mientras que el segundo es un filtro pasa bajos. En el caso del primero deja pasar por completo las frecuencias mayores a 800Hz aproximadamente y atenua en mayor o menor medida las frecuencias restantes, mientras que el segundo deja pasar las frecuencias menores a 4600Hz aproximadamente, atenua por completo las frecuencias mayores a 5600Hz aproximadamente y atenua en mayor o menor medida las que están en el medio.
+Como era de esperarse y como se anticipó en la primera parte, el primer filtro corresponde a un filtro pasa altos mientras que el segundo es un filtro pasa bajos. En el caso del primero deja pasar por completo las frecuencias mayores a 800Hz aproximadamente y atenúa en mayor o menor medida las frecuencias restantes, mientras que el segundo deja pasar las frecuencias menores a 4600Hz aproximadamente, atenúa por completo las frecuencias mayores a 5600Hz aproximadamente y atenúa en mayor o menor medida las que están en el medio.
 
 \begin{figure}[H]
 \centering
@@ -591,15 +587,20 @@ De manera análoga, en las figuras \ref{cancion2_espectograma_boxcar_0512}, \ref
 \hypertarget{espectograma-ventana-triangular}{%
 \subsubsection{Espectrograma con ventana triangular}\label{espectograma-ventana-triangular}}
 
+\iffalse
 A continuación se vuelve a graficar los espectrogramas de las canciones 1 y 2 tomando la misma cantidad de puntos, 512, 1024 y 2048, pero la diferencia siendo que se utiliza una ventana triangular. La diferencia entre ambas ventanas en la practica es que la ventana rectangular tiene mejor resolución en frecuencia ya que su DFT es una función sinc (con la función sinc definida como $sin(\pi\cdot x)/\pi\cdot x$) pero mayor fuga espectral, ya que los lóbulos secundarios de las sinc son mas fuertes que la DFT de la función triangular, que es una sinc pero al cuadrado, lo que hace que los lóbulos secundarios disminuyan. Para la primer muestra las figuras resultantes son \ref{cancion1_espectograma_bartlett_0512}, \ref{cancion1_espectograma_bartlett_1024} y \ref{cancion1_espectograma_bartlett_2048}, para el espectrograma utilizando ventana triangular y tomando 512, 1024 y 2048 puntos respectivamente. Para la segunda muestra, las figuras resultantes son \ref{cancion2_espectograma_bartlett_0512}, \ref{cancion2_espectograma_bartlett_1024} y \ref{cancion2_espectograma_bartlett_2048} para el espectrograma utilizando ventana triangular y tomando 512, 1024 y 2048 puntos respectivamente.
+\fi
+
+En la figura \ref{cancion1_espectograma_bartlett_2048} se muestra el espectrogramas de las canciones 1 tomando 2048 de puntos, pero utilizando una ventana triangular. La diferencia entre utilizar una ventana triangular y una rectangular en la practica es que la ventana rectangular tiene mejor resolución en frecuencia ya que su espectro es una función sinc (con la función sinc definida como $sin(\pi\cdot x)/\pi\cdot x$) pero mayor fuga espectral, ya que los lóbulos secundarios de las sinc son mas fuertes que la del espectro de la función triangular, que es una sinc pero al cuadrado, lo que hace que los lóbulos secundarios disminuyan.
 
 \begin{figure}[H]
 \centering
-\includegraphics{plot/cancion1_espectograma_bartlett_0512.png}
-\caption{Espectrograma primer muestra de ventana triangular de 512 puntos}
-\label{cancion1_espectograma_bartlett_0512}
+\includegraphics{plot/cancion1_espectograma_bartlett_2048.png}
+\caption{Espectrograma primer muestra de ventana triangular de 2048 puntos}
+\label{cancion1_espectograma_bartlett_2048}
 \end{figure}
 
+\iffalse
 \begin{figure}[H]
 \centering
 \includegraphics{plot/cancion1_espectograma_bartlett_1024.png}
@@ -609,9 +610,9 @@ A continuación se vuelve a graficar los espectrogramas de las canciones 1 y 2 t
 
 \begin{figure}[H]
 \centering
-\includegraphics{plot/cancion1_espectograma_bartlett_2048.png}
-\caption{Espectrograma primer muestra de ventana triangular de 2048 puntos}
-\label{cancion1_espectograma_bartlett_2048}
+\includegraphics{plot/cancion1_espectograma_bartlett_0512.png}
+\caption{Espectrograma primer muestra de ventana triangular de 512 puntos}
+\label{cancion1_espectograma_bartlett_0512}
 \end{figure}
 
 \begin{figure}[H]
@@ -634,18 +635,27 @@ A continuación se vuelve a graficar los espectrogramas de las canciones 1 y 2 t
 \caption{Espectrograma segunda muestra de ventana triangular de 2048 puntos}
 \label{cancion2_espectograma_bartlett_2048}
 \end{figure}
+\fi
 
 \hypertarget{espectograma-ventana-hann}{%
 \subsubsection{Espectrograma con ventana de Hann}\label{espectograma-ventana-hann}}
 
-La ventana de Hann es una funcion que en el dominio temporal tiene una forma
+La ventana de Hann es una función que en el dominio temporal tiene una forma
 suave, no como la ventana rectangular o triangular que tiene puntos con derivada
 discontinua, la forma es parecida a medio ciclo de un seno. En el dominio de
 frecuencia, la ventana de Hann tiene una forma parecida a la de la ventana
-rectangular con un lobulo principal, pero este mas ancho que el de la
-rectangular, esto implica menor resolucion en frecuencia; ademas el espectro de
-la ventana de Hann tiene lobulos laterales menores.
+rectangular con un lóbulo principal, pero este mas ancho que el de la
+rectangular, esto implica menor resolución en frecuencia; además el espectro de
+la ventana de Hann tiene lóbulos laterales menores, lo que reduce aum mas la fuga espectral.
+
+\begin{figure}[H]
+\centering
+\includegraphics{plot/cancion1_espectograma_hann_2048.png}
+\caption{Espectrograma primer muestra con ventana Hann de 2048 puntos}
+\label{cancion1_espectograma_hann_2048}
+\end{figure}
 
+\iffalse
 \begin{figure}[H]
 \centering
 \includegraphics{plot/cancion1_espectograma_hann_0512.png}
@@ -662,13 +672,6 @@ la ventana de Hann tiene lobulos laterales menores.
 
 \begin{figure}[H]
 \centering
-\includegraphics{plot/cancion1_espectograma_hann_2048.png}
-\caption{Espectrograma primer muestra con ventana Hann de 2048 puntos}
-\label{cancion1_espectograma_hann_2048}
-\end{figure}
-
-\begin{figure}[H]
-\centering
 \includegraphics{plot/cancion2_espectograma_hann_0512.png}
 \caption{Espectrograma segunda muestra con ventana Hann de 512 puntos}
 \label{cancion2_espectograma_hann_0512}
@@ -687,25 +690,87 @@ la ventana de Hann tiene lobulos laterales menores.
 \caption{Espectrograma segunda muestra con ventana Hann de 2048 puntos}
 \label{cancion2_espectograma_hann_2048}
 \end{figure}
+\fi
+
+Analizando el espectrograma de la primer canción, en particular el de la figura \ref{cancion1_espectograma_bartlett_2048}, en el cual se toman 2048 puntos y se utiliza una ventana triangular, se observa claramente las notas que componen la melodía, y ademas en que tiempo ocurre cada una de ellas. Ademas se observa que no es muy clara la resolución temporal pero de todas maneras se tiene una aproximación general de en que tiempo ocurre cada nota, para mayor resolución se puede analizar en detalle la figura \ref{cancion1_espectograma_boxcar_0512} en la cual se toman menos puntos de ventana (y se utiliza una ventana rectangular) por lo tanto se tiene mayor resolución temporal.
+
+
+
+
+
+
+% PUNTO 5
+\hypertarget{serie-de-fourier-tomando-uno-y-varios-periodos
+}{%
+\subsection{Serie de Fourier tomando uno y varios periodos}\label{serie-de-fourier-tomando-uno-y-varios-periodos
+}}
+
+Para señales musicales de la nota A4 generados generadas en la sección \ref{sonido-de-diferentes-instrumentos} para diferentes instrumentos, mediante un script de python, se analiza el espectro de cada una y se remueven altas frecuencias, intentando preservar el sonido generado pero utilizando menor información para obtener dicho sonido.
+
+En primer lugar, se obtiene la serie de Fourier de cada una de las notas generada por los diferentes instrumentos, utilizando uno y mas periodos, para la generada por el clarinete, se muestra la serie de Fourier utilizando 1, 4 y 8 periodos en la figura \ref{a4_clarinete_fseries_comparison}, para la nota generada por la flauta la serie de Fourier se observar en la figura \ref{a4_flauta_fseries_comparison}, finalmente en la figura \ref{a4_violin_fseries_comparison} ser observa la serie de Fourier para la nota A4 generada por el violín. Se puede ver en todos los casos que tomando mas periodos de la señal se tiene más resolución espectral, y tiene sentido ya que al tomar mas periodos se tiene mas información de la señal.
+
+
+\begin{figure}[H]
+\centering
+\includegraphics{plot/a4_clarinete_fseries_comparison.png}
+\caption{Serie de Fourier tomando 1, 4 y 8 periodos nota A4 clarinete}
+\label{a4_clarinete_fseries_comparison}
+\end{figure}
+
+\begin{figure}[H]
+\centering
+\includegraphics{plot/a4_flauta_fseries_comparison.png}
+\caption{Serie de Fourier tomando 1, 4 y 8 periodos nota A4 flauta}
+\label{a4_flauta_fseries_comparison}
+\end{figure}
+
+\begin{figure}[H]
+\centering
+\includegraphics{plot/a4_violin_fseries_comparison.png}
+\caption{Serie de Fourier tomando 1, 4 y 8 periodos nota A4 violín}
+\label{a4_violin_fseries_comparison}
+\end{figure}
+
+\hypertarget{filtrado-de-muestras}{%
+\subsection{Filtrado de muestras}\label{filtrado-de-muestras}}
+
+Para realizar el filtrado, se eliminan frecuencias mayores a un numero de frecuencia arbitrario, esto es análogo a aplicar un filtro pasa-bajos en la practica, pero mediante procesamiento digital. El numero arbitrario que define que frecuencias se deben eliminar queda determinado por como suena la señal luego de eliminar esas frecuencias mayores. En particular se ha detectado que para la flauta por tener un menor numero de armónicos, como se puede ver en la figura \ref{a4_flauta_fseries_comparison} de su serie de Fourier, este numero arbitrario puede ser tan bajo como 1000 Hz, sin modificar demasiado el sonido de la nota. En el otro extremo se tiene el violín, el cual se ve en su serie de Fourier (figura \ref{a4_violin_fseries_comparison}) que posee un gran numero de armónicos, esto hace que si se eliminan frecuencias bajas se modifica mucho el sonido de la nota. En todos los casos se observa que no se puede `comprimir' demasiado la señal puesto que no poseen armónicos de alta frecuencia, ya de por si son muestras `limpias' que ya poseen un procesamiento digital previo realizado por el programa generador.
+
+Una comparación entre las señal temporal resultante de las notas musicales filtradas y la señal original se muestran en las figuras \ref{a4_violin_cutoff_time_comparison}, \ref{a4_clarinete_cutoff_time_comparison} y \ref{a4_flauta_cutoff_time_comparison}, para la nota filtrada del violín, del clarinete y de la flauta, respectivamente.
+
+\begin{figure}[H]
+\centering
+\includegraphics{plot/a4_violin_cutoff_time_comparison.png}
+\caption{Comparación entre señal original y filtrada en tiempo nota A4 vioin}
+\label{a4_violin_cutoff_time_comparison}
+\end{figure}
+
+\begin{figure}[H]
+\centering
+\includegraphics{plot/a4_clarinete_cutoff_time_comparison.png}
+\caption{Comparación entre señal original y filtrada en tiempo nota A4 clarinete}
+\label{a4_clarinete_cutoff_time_comparison}
+\end{figure}
+
+\begin{figure}[H]
+\centering
+\includegraphics{plot/a4_flauta_cutoff_time_comparison.png}
+\caption{Comparación entre señal original y filtrada en tiempo nota A4 flauta}
+\label{a4_flauta_cutoff_time_comparison}
+\end{figure}
+
 
-Analizando el espectrograma de la primer canción, en particular el de la figura
-\ref{cancion1_espectograma_bartlett_2048}, en el cual se toman 2048 puntos y se
-utiliza una ventana triangular, se observa claramente las notas que componen la
-melodía, y ademas en que tiempo ocurre cada una de ellas. Ademas se observa que
-no es muy clara la resolución temporal pero de todas maneras se tiene una
-aproximación general de en que tiempo ocurre cada nota, para mayor resolución se
-puede observar u analizar la figura \ref{cancion1_espectograma_bartlett_0512} en
-la cual se toman menos puntos, por lo tanto se tiene mayor resolución temporal.
 
 \hypertarget{Efectos-musicales-en-términos-de-sistemas}{%
 \subsection{Efectos musicales en términos de sistemas}\label{Efectos-musicales-en-términos-de-sistemas}}
 
-En esta sección se analizan distintos efectos interpretándolos como sistemas que procesan la señal de entrada x(t) dando en la salida una señal y(t). 
-Se trabaja con una señal senoidal pura de 440Hz, implementando los efectos de manera digital mediante código. En cada caso se grafican los espectros resultantes de aplicar los distintos efectos a la señal original.
+En esta sección se analizan distintos efectos interpretándolos como sistemas que procesan la señal de entrada $x(t)$ dando en la salida una señal $y(t)$. 
+
+% Se trabaja con una señal senoidal pura de 440Hz, implementando los efectos de manera digital mediante código. En cada caso se grafican los espectros resultantes de aplicar los distintos efectos a la señal original.
 
 \subsubsection{Delay}
 
-El efecto del \textit{delay} consiste en sumar a la señal original una copia de sí misma con un factor de retroalimentación que genera repeticiones. Puede modelarse como:
+El efecto \textit{delay} consiste en sumar a la señal original una copia de sí misma con un factor de retroalimentación que genera repeticiones. Puede modelarse como:
 
 \[
 y[n] = x[n] + \alpha\, y[n - D]
@@ -713,8 +778,9 @@ y[n] = x[n] + \alpha\, y[n - D]
 
 donde $D$ representa el retardo en muestras y $\alpha$ es el coeficiente de retroalimentación.
 
-Analizando las propiedades de este sistema, se observa que es un sistema \textbf{lineal}, posee \textbf{memoria} ya que depende de muestras pasadas, y es \textbf{invariante en el tiempo} debido a que el retardo no cambia a lo largo del tiempo.
+Analizando las propiedades de este sistema, se observa que es un sistema \textbf{lineal}, que posee \textbf{memoria} ya que depende de muestras pasadas, y es \textbf{invariante en el tiempo} debido a que el retardo no cambia a lo largo del tiempo.
 
+\iffalse
 \begin{figure}[H]
     \centering
     \includegraphics[width=0.75\linewidth]{plot/delay_original.png}
@@ -728,6 +794,7 @@ Analizando las propiedades de este sistema, se observa que es un sistema \textbf
     \caption{Espectro con efecto delay}
     \label{delay_efecto}
 \end{figure}
+\fi
 
 \subsubsection{Distorsión}
 
@@ -740,6 +807,7 @@ y[n] = tanh(Gx[n])
 Este sistema no es lineal ya que su salida no es proporcional a la entrada, es invariante en el tiempo ya que no cambia en el tiempo, y es sin memoria porque cada muestra depende solo de la muestra actual.
 Se observa la aparición de armónicos múltiples de la frecuencia fundamental, dando un tono mas brillante y enriquecido.
 
+\iffalse
 \begin{figure}[H]
     \centering
     \includegraphics[width=0.75\linewidth]{plot/distorsion_original.png}
@@ -753,6 +821,7 @@ Se observa la aparición de armónicos múltiples de la frecuencia fundamental, 
     \caption{Espectro con efecto distorsión}
     \label{distorsion_efecto}
 \end{figure}
+\fi
 
 \subsubsection{Trémolo}
 
@@ -768,6 +837,7 @@ El sistema implementado es \textbf{lineal}, \textbf{invariante en el tiempo} (si
 
 En el espectro de la señal se pueden observar \textit{bandas laterales} que rodean la frecuencia fundamental, producidas por la modulación en amplitud.
 
+\iffalse
 \begin{figure}[H]
     \centering
     \includegraphics[width=0.75\linewidth]{plot/trembolo_original.png}
@@ -781,6 +851,7 @@ En el espectro de la señal se pueden observar \textit{bandas laterales} que rod
     \caption{Espectro nota con efecto tremolo}
     \label{trembolo_efecto}
 \end{figure}
+\fi
 
 \subsubsection{Vibrato}
 
@@ -795,6 +866,7 @@ Es \textbf{invariante en el tiempo} (si el modulador es constante) y \textbf{tie
 
 En el espectro se puede apreciar un \textit{ensanchamiento} en la frecuencia fundamental con variaciones periódicas alrededor de la misma, lo que refleja la modulación del tono.
 
+\iffalse
 \begin{figure}[H]
     \centering
     \includegraphics[width=0.75\linewidth]{plot/vibrato_original.png}
@@ -808,8 +880,9 @@ En el espectro se puede apreciar un \textit{ensanchamiento} en la frecuencia fun
     \caption{Espectro con efecto vibrato}
     \label{vibrato_efecto}
 \end{figure}
+\fi
 
-\subsection*{Chorus}
+\subsubsection{Chorus}
 
 Combina múltiples copias de la señal, cada una con un retardo distinto.  
 Simula varios instrumentos sonando al mismo tiempo.  
@@ -825,7 +898,7 @@ Es un sistema \textbf{no lineal} debido a la interpolación variable,
 En el espectro se observa un \textit{ensanchamiento} alrededor de la frecuencia fundamental  
 y una estructura densa debido a la suma de fuentes sonoras.
 
-
+\iffalse
 \begin{figure}[H]
     \centering
     \includegraphics[width=0.75\linewidth]{plot/chorus_original.png}
@@ -839,6 +912,7 @@ y una estructura densa debido a la suma de fuentes sonoras.
     \caption{Espectro con efecto chorus}
     \label{chorus_efecto}
 \end{figure}
+\fi
 
 Cada efecto puede interpretarse como un sistema que transforma una señal de entrada aplicando operaciones de retardo, modulación o no linealidad. Los efectos que se caracterizaron como lineales e invariantes en el tiempo (delay y trembolo) modifican el espectro de manera predecible. Mientras que los no lineales introducen componentes que afectan la estructura armónica que se tenía en la señal original
 
@@ -852,4 +926,4 @@ Cada efecto puede interpretarse como un sistema que transforma una señal de ent
 \fi
 
 
-\end{document}
+\end{document}
+\ No newline at end of file
diff --git a/tp/out/a4_clarinete_cutoff_3000Hz.wav b/tp/out/a4_clarinete_cutoff_3000Hz.wav
Binary files differ.
diff --git a/tp/out/a4_flauta_cutoff_1000Hz.wav b/tp/out/a4_flauta_cutoff_1000Hz.wav
Binary files differ.
diff --git a/tp/out/a4_violin_cutoff_4000Hz.wav b/tp/out/a4_violin_cutoff_4000Hz.wav
Binary files differ.
diff --git a/tp/plot/a4_clarinete.png b/tp/plot/a4_clarinete.png
Binary files differ.
diff --git a/tp/plot/a4_clarinete_comparison.png b/tp/plot/a4_clarinete_comparison.png
Binary files differ.
diff --git a/tp/plot/a4_clarinete_cutoff_3000Hz.png b/tp/plot/a4_clarinete_cutoff_3000Hz.png
Binary files differ.
diff --git a/tp/plot/a4_clarinete_cutoff_3000Hz_fft.png b/tp/plot/a4_clarinete_cutoff_3000Hz_fft.png
Binary files differ.
diff --git a/tp/plot/a4_clarinete_cutoff_time_comparison.png b/tp/plot/a4_clarinete_cutoff_time_comparison.png
Binary files differ.
diff --git a/tp/plot/a4_clarinete_fseries_comparison.png b/tp/plot/a4_clarinete_fseries_comparison.png
Binary files differ.
diff --git a/tp/plot/a4_flauta.png b/tp/plot/a4_flauta.png
Binary files differ.
diff --git a/tp/plot/a4_flauta_comparison.png b/tp/plot/a4_flauta_comparison.png
Binary files differ.
diff --git a/tp/plot/a4_flauta_cutoff_1000Hz.png b/tp/plot/a4_flauta_cutoff_1000Hz.png
Binary files differ.
diff --git a/tp/plot/a4_flauta_cutoff_1000Hz_fft.png b/tp/plot/a4_flauta_cutoff_1000Hz_fft.png
Binary files differ.
diff --git a/tp/plot/a4_flauta_cutoff_time_comparison.png b/tp/plot/a4_flauta_cutoff_time_comparison.png
Binary files differ.
diff --git a/tp/plot/a4_flauta_fseries_comparison.png b/tp/plot/a4_flauta_fseries_comparison.png
Binary files differ.
diff --git a/tp/plot/a4_violin.png b/tp/plot/a4_violin.png
Binary files differ.
diff --git a/tp/plot/a4_violin_comparison.png b/tp/plot/a4_violin_comparison.png
Binary files differ.
diff --git a/tp/plot/a4_violin_cutoff_4000Hz.png b/tp/plot/a4_violin_cutoff_4000Hz.png
Binary files differ.
diff --git a/tp/plot/a4_violin_cutoff_4000Hz_fft.png b/tp/plot/a4_violin_cutoff_4000Hz_fft.png
Binary files differ.
diff --git a/tp/plot/a4_violin_cutoff_time_comparison.png b/tp/plot/a4_violin_cutoff_time_comparison.png
Binary files differ.
diff --git a/tp/plot/a4_violin_fseries_comparison.png b/tp/plot/a4_violin_fseries_comparison.png
Binary files differ.
diff --git a/tp/plot/cancion1.png b/tp/plot/cancion1.png
Binary files differ.
diff --git a/tp/plot/cancion1_0_248s_a_0_256s.png b/tp/plot/cancion1_0_248s_a_0_256s.png
Binary files differ.
diff --git a/tp/plot/cancion1_0_520s_a_0_528s.png b/tp/plot/cancion1_0_520s_a_0_528s.png
Binary files differ.
diff --git a/tp/plot/cancion1_espectograma_bartlett_0512.png b/tp/plot/cancion1_espectograma_bartlett_0512.png
Binary files differ.
diff --git a/tp/plot/cancion1_espectograma_bartlett_1024.png b/tp/plot/cancion1_espectograma_bartlett_1024.png
Binary files differ.
diff --git a/tp/plot/cancion1_espectograma_bartlett_2048.png b/tp/plot/cancion1_espectograma_bartlett_2048.png
Binary files differ.
diff --git a/tp/plot/cancion1_espectograma_boxcar_0512.png b/tp/plot/cancion1_espectograma_boxcar_0512.png
Binary files differ.
diff --git a/tp/plot/cancion1_espectograma_boxcar_1024.png b/tp/plot/cancion1_espectograma_boxcar_1024.png
Binary files differ.
diff --git a/tp/plot/cancion1_espectograma_boxcar_2048.png b/tp/plot/cancion1_espectograma_boxcar_2048.png
Binary files differ.
diff --git a/tp/plot/cancion1_espectograma_hamming_0512.png b/tp/plot/cancion1_espectograma_hamming_0512.png
Binary files differ.
diff --git a/tp/plot/cancion1_espectograma_hamming_1024.png b/tp/plot/cancion1_espectograma_hamming_1024.png
Binary files differ.
diff --git a/tp/plot/cancion1_espectograma_hamming_2048.png b/tp/plot/cancion1_espectograma_hamming_2048.png
Binary files differ.
diff --git a/tp/plot/cancion1_espectograma_hann_0512.png b/tp/plot/cancion1_espectograma_hann_0512.png
Binary files differ.
diff --git a/tp/plot/cancion1_espectograma_hann_1024.png b/tp/plot/cancion1_espectograma_hann_1024.png
Binary files differ.
diff --git a/tp/plot/cancion1_espectograma_hann_2048.png b/tp/plot/cancion1_espectograma_hann_2048.png
Binary files differ.
diff --git a/tp/plot/cancion1_fft.png b/tp/plot/cancion1_fft.png
Binary files differ.
diff --git a/tp/plot/cancion1_filter1_output_compare.png b/tp/plot/cancion1_filter1_output_compare.png
Binary files differ.
diff --git a/tp/plot/cancion1_filter1_output_compare_0_248_a_0_256.png b/tp/plot/cancion1_filter1_output_compare_0_248_a_0_256.png
Binary files differ.
diff --git a/tp/plot/cancion1_filter1_output_fft.png b/tp/plot/cancion1_filter1_output_fft.png
Binary files differ.
diff --git a/tp/plot/cancion1_filter2_output_compare.png b/tp/plot/cancion1_filter2_output_compare.png
Binary files differ.
diff --git a/tp/plot/cancion1_filter2_output_compare_0_248_a_0_256.png b/tp/plot/cancion1_filter2_output_compare_0_248_a_0_256.png
Binary files differ.
diff --git a/tp/plot/cancion1_filter2_output_fft.png b/tp/plot/cancion1_filter2_output_fft.png
Binary files differ.
diff --git a/tp/plot/cancion2.png b/tp/plot/cancion2.png
Binary files differ.
diff --git a/tp/plot/cancion2_14_72s_a_14_73s.png b/tp/plot/cancion2_14_72s_a_14_73s.png
Binary files differ.
diff --git a/tp/plot/cancion2_26_57s_a_26_58s.png b/tp/plot/cancion2_26_57s_a_26_58s.png
Binary files differ.
diff --git a/tp/plot/cancion2_6s_filter1_output_compare.png b/tp/plot/cancion2_6s_filter1_output_compare.png
Binary files differ.
diff --git a/tp/plot/cancion2_6s_filter1_output_compare_26_57_a_26_58.png b/tp/plot/cancion2_6s_filter1_output_compare_26_57_a_26_58.png
Binary files differ.
diff --git a/tp/plot/cancion2_6s_filter2_output_compare.png b/tp/plot/cancion2_6s_filter2_output_compare.png
Binary files differ.
diff --git a/tp/plot/cancion2_6s_filter2_output_compare_26_57_a_26_58.png b/tp/plot/cancion2_6s_filter2_output_compare_26_57_a_26_58.png
Binary files differ.
diff --git a/tp/plot/cancion2_espectograma_bartlett_0512.png b/tp/plot/cancion2_espectograma_bartlett_0512.png
Binary files differ.
diff --git a/tp/plot/cancion2_espectograma_bartlett_1024.png b/tp/plot/cancion2_espectograma_bartlett_1024.png
Binary files differ.
diff --git a/tp/plot/cancion2_espectograma_bartlett_2048.png b/tp/plot/cancion2_espectograma_bartlett_2048.png
Binary files differ.
diff --git a/tp/plot/cancion2_espectograma_boxcar_0512.png b/tp/plot/cancion2_espectograma_boxcar_0512.png
Binary files differ.
diff --git a/tp/plot/cancion2_espectograma_boxcar_1024.png b/tp/plot/cancion2_espectograma_boxcar_1024.png
Binary files differ.
diff --git a/tp/plot/cancion2_espectograma_boxcar_2048.png b/tp/plot/cancion2_espectograma_boxcar_2048.png
Binary files differ.
diff --git a/tp/plot/cancion2_espectograma_hamming_0512.png b/tp/plot/cancion2_espectograma_hamming_0512.png
Binary files differ.
diff --git a/tp/plot/cancion2_espectograma_hamming_1024.png b/tp/plot/cancion2_espectograma_hamming_1024.png
Binary files differ.
diff --git a/tp/plot/cancion2_espectograma_hamming_2048.png b/tp/plot/cancion2_espectograma_hamming_2048.png
Binary files differ.
diff --git a/tp/plot/cancion2_espectograma_hann_0512.png b/tp/plot/cancion2_espectograma_hann_0512.png
Binary files differ.
diff --git a/tp/plot/cancion2_espectograma_hann_1024.png b/tp/plot/cancion2_espectograma_hann_1024.png
Binary files differ.
diff --git a/tp/plot/cancion2_espectograma_hann_2048.png b/tp/plot/cancion2_espectograma_hann_2048.png
Binary files differ.
diff --git a/tp/plot/cancion2_fft.png b/tp/plot/cancion2_fft.png
Binary files differ.
diff --git a/tp/plot/cancion2_filter1_output_fft.png b/tp/plot/cancion2_filter1_output_fft.png
Binary files differ.
diff --git a/tp/plot/cancion2_filter2_output_fft.png b/tp/plot/cancion2_filter2_output_fft.png
Binary files differ.
diff --git a/tp/plot/chorus_efecto.png b/tp/plot/chorus_efecto.png
Binary files differ.
diff --git a/tp/plot/chorus_original.png b/tp/plot/chorus_original.png
Binary files differ.
diff --git a/tp/plot/delay_efecto.png b/tp/plot/delay_efecto.png
Binary files differ.
diff --git a/tp/plot/delay_original.png b/tp/plot/delay_original.png
Binary files differ.
diff --git a/tp/plot/distorsion_efecto.png b/tp/plot/distorsion_efecto.png
Binary files differ.
diff --git a/tp/plot/distorsion_original.png b/tp/plot/distorsion_original.png
Binary files differ.
diff --git a/tp/plot/filter1_h_fft.png b/tp/plot/filter1_h_fft.png
Binary files differ.
diff --git a/tp/plot/filter2_h_fft.png b/tp/plot/filter2_h_fft.png
Binary files differ.
diff --git a/tp/plot/trembolo_efecto.png b/tp/plot/trembolo_efecto.png
Binary files differ.
diff --git a/tp/plot/trembolo_original.png b/tp/plot/trembolo_original.png
Binary files differ.
diff --git a/tp/plot/vibrato_efecto.png b/tp/plot/vibrato_efecto.png
Binary files differ.
diff --git a/tp/plot/vibrato_original.png b/tp/plot/vibrato_original.png
Binary files differ.
diff --git a/tp/utils.py b/tp/utils.py
@@ -10,7 +10,7 @@ import numpy as np
 import os
 
 from scipy.io import wavfile
-from scipy.fft import fft, fftfreq
+from scipy.fft import fft, ifft, fftfreq
 from scipy.signal import spectrogram
 
 plot_dir_name = 'plot'
@@ -19,7 +19,7 @@ out_dir_name = 'out'
 matplotlib.rcParams['font.family'] = 'Inter'
 matplotlib.rcParams['font.size'] = 12
 matplotlib.rcParams['axes.prop_cycle'] = cycler(
-        color=['#1f77b4', '#ff0000', 'green', 'orange'])
+        color=['#1f77b4', '#ff0000', '#ff5f1f', 'green'])
 matplotlib.use("TkAgg")
 
 def ticks_label_format(x, pos):
@@ -116,13 +116,15 @@ def normalize(data):
     return data
 
 def time_plot(fs, data, save_name="", t=0, dt=0, a=0, da=0):
+    show = True if save_name == "" else False
+
     # normaliza la amplitud dividiendo por el valor maximo del tipo de dato
     data = normalize(data)
 
     x = np.arange(len(data)) / fs
-    fig, ax = time_graph_data(x, data, t, dt, a, da, False)
+    fig, ax = time_graph_data(x, data, t, dt, a, da, show)
 
-    if save_name != "":
+    if show == False:
         save_plot(fig, save_name)
 
     return fig, ax
@@ -137,29 +139,36 @@ def save_plot(fig, name):
 
      # crea carpeta para plots
     os.makedirs(plot_dir_name, exist_ok=True)
-    fig.savefig(save_name, dpi=200, bbox_inches="tight")
+    fig.savefig(save_name, dpi=150, bbox_inches="tight")
     plt.close(fig) # liberar memoria
 
-def save_convolved_to_wav(convolved, fs, file_path):
+def save_to_wav(fs, data, save_name):
     # normalizar para prevenir clipping
-    convolved = convolved / np.max(np.abs(convolved))
+    data = data / np.max(np.abs(data))
 
     # convertir a 16-bit PCM para WAV
-    convolved_int16 = np.int16(convolved * 32767)
+    data_as_int16 = np.int16(data * 32767)
 
     # crea carpeta para wavs
     os.makedirs(out_dir_name, exist_ok=True)
 
-    file_path = f'{out_dir_name}/{file_path}'
+    file_path = f'{out_dir_name}/{save_name}'
     print(file_path)
-    wavfile.write(file_path, fs, convolved_int16)
+    wavfile.write(file_path, fs, data_as_int16)
 
 # frecuencia
 
-def freq_graph_data(x, y, f_min=0, f_max=0, y_min=0, y_max=0, show=True, save_path=""):
+# data = [[fft], [freqs], [legends]]
+def freq_graph_multiple_data(data, f_min=0, f_max=0, y_min=0, y_max=0, show=True):
     fig, axis = plt.subplots(figsize=(8, 4))
 
-    axis.plot(x, y)
+    for i, (fft, freqs, label) in enumerate(data):
+        # print(label)
+        N = len(freqs)
+        x = freqs[:N // 2]
+        y = np.abs(fft[:N // 2])
+        axis.plot(x, y, label=label, alpha=0.90, linewidth=((len(data)-i-1)*0.5 + 1.5))
+
     axis.set(xlabel='Frecuencia [Hz]', ylabel='Magnitud')
 
     axis.minorticks_on()
@@ -177,19 +186,51 @@ def freq_graph_data(x, y, f_min=0, f_max=0, y_min=0, y_max=0, show=True, save_pa
 
     # max 3 decimales
     axis.xaxis.set_major_formatter(FuncFormatter(ticks_label_format))
+    plt.ticklabel_format(style='sci', axis='y', scilimits=(0,0))
 
     axis.set_xlim([f_min, f_max if f_max != 0 else 20000])
     axis.set_ylim([y_min, y_max if y_max != 0 else 1.05*max(y)])
 
+    axis.legend(loc='upper right')
+
     if show:
         plt.show()
 
     return fig, axis
 
-# hace la transformacion a frecuencias y pasa lo transformado a `freq_graph_data`
-def freq_plot(fs, data, save_name="", f_min=0, f_max=0, y_min=0, y_max=0,
-              t=0, dt=0, a=0, da=0):
 
+def freq_graph_data(x, y, f_min=0, f_max=0, y_min=0, y_max=0, show=True):
+    fig, axis = plt.subplots(figsize=(8, 4))
+
+    axis.plot(x, y)
+    axis.set(xlabel='Frecuencia [Hz]', ylabel='Magnitud')
+
+    axis.minorticks_on()
+    axis.grid(True, which='major', color='black', linestyle=':', linewidth=1.00)
+    axis.grid(True, which='minor', color='black', linestyle=':', linewidth=0.50)
+
+    # configuracion de ticks del eje x
+    axis.xaxis.set_major_locator(MaxNLocator(nbins=5))
+    axis.xaxis.set_minor_locator(AutoMinorLocator(5))
+
+    axis.yaxis.set_major_locator(MaxNLocator(nbins=5))
+    axis.yaxis.set_minor_locator(AutoMinorLocator(4))
+
+    plt.tight_layout()
+
+    # max 3 decimales
+    axis.xaxis.set_major_formatter(FuncFormatter(ticks_label_format))
+    plt.ticklabel_format(style='sci', axis='y', scilimits=(0,0))
+
+    axis.set_xlim([f_min, f_max if f_max != 0 else 20000])
+    axis.set_ylim([y_min, y_max if y_max != 0 else 1.05*max(y)])
+
+    if show:
+        plt.show()
+
+    return fig, axis
+
+def freq_compute_fft(fs, data, t=0, dt=0):
     i = 0
     di = fs*len(data)
     if t != 0 or dt != 0:
@@ -198,9 +239,18 @@ def freq_plot(fs, data, save_name="", f_min=0, f_max=0, y_min=0, y_max=0,
 
     interval_data = data[i:di]
     N = len(interval_data)
-    interval_fft = fft(interval_data)
+    interval_fft = fft(interval_data) / N
     interval_freqs = fftfreq(N, d=1/fs)
 
+    return interval_fft, interval_freqs
+
+# hace la transformacion a frecuencias y pasa lo transformado a `freq_graph_data`
+def freq_plot(fs, data, save_name="", f_min=0, f_max=0, y_min=0, y_max=0,
+              t=0, dt=0, a=0, da=0):
+
+    interval_fft, interval_freqs = freq_compute_fft(fs, data, t, dt)
+    N = len(interval_fft)
+
     # se toma la parte positiva en ambos casos (primer parte del arreglo)
     x = interval_freqs[:N // 2]
     y = np.abs(interval_fft[:N // 2])
@@ -212,6 +262,20 @@ def freq_plot(fs, data, save_name="", f_min=0, f_max=0, y_min=0, y_max=0,
 
     return fig, ax
 
+# frecuencia de muestreo comun
+# computa y grafica en una figura la fft the los datos en `data_arr`
+def freq_plot_multiple(fs, data_arr, leg_arr, save_name="",
+                       f_min=0, f_max=0, y_min=0, y_max=0, t=0, dt=0, show=True):
+
+    fft_freqs_arr = []
+    for i, data in enumerate(data_arr):
+        fft, freqs = freq_compute_fft(fs, data, t, dt)
+        fft_freqs_arr.append([fft, freqs, leg_arr[i]])
+
+    fig, axis = freq_graph_multiple_data(fft_freqs_arr, f_min, f_max, y_min, y_max, show)
+
+    if save_name != "":
+        save_plot(fig, save_name)
 
 def spectogram_plot(fs, data, save_name="", t=0, dt=0, N=1024, overlp=16, win='hann', xlim=[], ylim=[], show=False):
     if dt == 0: