repos/TB065

Commits Files Refs
commit a39703bb68ff3523d9ea6cec3a5e8a762d1b34ac
parent 91981b9dfa04d036fc4bdad88f4634456b7ed94b
Author: Martin Klöckner <mjkloeckner@gmail.com>
Date:   Thu, 27 Nov 2025 11:57:09 -0300

updated `tp/*`

Diffstat:
Atp/data/canciones/000002.mp3 | 0
Atp/data/canciones/000005.mp3 | 0
Atp/data/canciones/000010.mp3 | 0
Atp/data/canciones/000140.mp3 | 0
Atp/data/canciones/000141.mp3 | 0
Atp/data/canciones/000148.mp3 | 0
Atp/data/canciones/000182.mp3 | 0
Atp/data/canciones/000190.mp3 | 0
Atp/data/canciones/000193.mp3 | 0
Atp/data/canciones/000194.mp3 | 0
Atp/data/canciones/000197.mp3 | 0
Atp/data/canciones/000200.mp3 | 0
Atp/data/canciones/000203.mp3 | 0
Atp/data/canciones/000204.mp3 | 0
Atp/data/canciones/000207.mp3 | 0
Atp/data/canciones/000210.mp3 | 0
Atp/data/canciones/000211.mp3 | 0
Mtp/main.py | 59+++++++++++++++++++++++++++++++++++++++++++++++++----------
Mtp/utils.py | 15+++++++++------
19 files changed, 58 insertions(+), 16 deletions(-)
diff --git a/tp/data/canciones/000002.mp3 b/tp/data/canciones/000002.mp3
Binary files differ.
diff --git a/tp/data/canciones/000005.mp3 b/tp/data/canciones/000005.mp3
Binary files differ.
diff --git a/tp/data/canciones/000010.mp3 b/tp/data/canciones/000010.mp3
Binary files differ.
diff --git a/tp/data/canciones/000140.mp3 b/tp/data/canciones/000140.mp3
Binary files differ.
diff --git a/tp/data/canciones/000141.mp3 b/tp/data/canciones/000141.mp3
Binary files differ.
diff --git a/tp/data/canciones/000148.mp3 b/tp/data/canciones/000148.mp3
Binary files differ.
diff --git a/tp/data/canciones/000182.mp3 b/tp/data/canciones/000182.mp3
Binary files differ.
diff --git a/tp/data/canciones/000190.mp3 b/tp/data/canciones/000190.mp3
Binary files differ.
diff --git a/tp/data/canciones/000193.mp3 b/tp/data/canciones/000193.mp3
Binary files differ.
diff --git a/tp/data/canciones/000194.mp3 b/tp/data/canciones/000194.mp3
Binary files differ.
diff --git a/tp/data/canciones/000197.mp3 b/tp/data/canciones/000197.mp3
Binary files differ.
diff --git a/tp/data/canciones/000200.mp3 b/tp/data/canciones/000200.mp3
Binary files differ.
diff --git a/tp/data/canciones/000203.mp3 b/tp/data/canciones/000203.mp3
Binary files differ.
diff --git a/tp/data/canciones/000204.mp3 b/tp/data/canciones/000204.mp3
Binary files differ.
diff --git a/tp/data/canciones/000207.mp3 b/tp/data/canciones/000207.mp3
Binary files differ.
diff --git a/tp/data/canciones/000210.mp3 b/tp/data/canciones/000210.mp3
Binary files differ.
diff --git a/tp/data/canciones/000211.mp3 b/tp/data/canciones/000211.mp3
Binary files differ.
diff --git a/tp/main.py b/tp/main.py
@@ -1,7 +1,8 @@
 import numpy as np
 from scipy.io import wavfile
-from scipy.signal import firwin, freqz, tf2zpk
+from scipy.signal import firwin, freqz, tf2zpk, get_window
 from utils import *
+import librosa
 
 ## Datos
 file1_path          = 'data/cancion1.wav'
@@ -285,7 +286,6 @@ def a4_violin_fseries():
 
 cutoff = 2650    # frecuencia de corte
 M = 700          # orden FIR (número de coeficientes)
-fs = 44100
 
 def filtro_fir():
     # Diseño FIR pasabajos con ventana
@@ -333,6 +333,8 @@ def filtro_fir_polos_y_ceros(a):
 
 
 def filtro_fir_deducido():
+    fs = 44100
+
     # respuesta ideal pasabajos: sinc centrada en M/2
     n = np.arange(M + 1)
     wc = 2*np.pi*cutoff / fs
@@ -342,26 +344,62 @@ def filtro_fir_deducido():
     h_ideal = np.sinc(2.0 * (cutoff/fs) * (n - M/2))
 
     # ventana de Hamming
-    v = 0.54 - 0.46 * np.cos(2*np.pi*n/M)
+    v_hamming = 0.54 - 0.46 * np.cos(2*np.pi*n/M)
+
+    v_rectangular = []
+    for i in n:
+        v_rectangular.append(1 if i < 350 else 0)
 
     # respuesta del filtro FIR (version acotada de la sinc)
-    h = h_ideal * v
+    h = h_ideal * v_hamming
 
     # se normaliza para tener ganancia unitaria para frecuancias <= fc
     h = h / np.sum(h)
 
-    fig, ax = dtime_plot(M, h, "respuesta_al_impulso_filtro_fir",
-                         f'Respuesta al impulso filtro FIR grado {M}')
+    # fig, ax = dtime_plot(M, h, "respuesta_al_impulso_filtro_fir",
+    #                      f'Respuesta al impulso filtro FIR grado {M}')
 
     # respuesta en frecuencia del filtro
     w, H = freqz(h, worN=2048, fs=fs)
     fase = np.unwrap(np.angle(H)) * 180 / np.pi
 
-    fig, ax1, ax2 = freq_response_plot(w, H, fase, show=False, fc=5e3)
-    save_plot(fig, "respuesta_en_frecuencia_pasa-bajos_fir")
+    # fig, ax1, ax2 = freq_response_plot(w, H, fase, show=False, fc=5e3)
+    # save_plot(fig, "respuesta_en_frecuencia_pasa-bajos_fir")
 
     # polos y ceros
-    filtro_fir_polos_y_ceros(h)
+    # filtro_fir_polos_y_ceros(h)
+
+    file_path = 'canciones/000002.mp3'
+
+    file_data, file_fs = librosa.load(file_path, sr=None, mono=True)
+    file_fs = int(fs)
+
+    # spectogram_plot(file_fs, file_data,
+    #                 f"espectograma_fs_original_44100Hz", N=1024, ylim=[0, 20000])
+
+    file_filter_output = np.convolve(file_data, h, mode='same')
+
+    # spectogram_plot(file_fs, file_filter_output,
+    #                 f"espectograma_fs_{cutoff}Hz", t=0, N=1024, ylim=[0, 20000])
+
+    freq_plot(44100, v_hamming, "v_hamming_freq", f_max=8000)
+    freq_plot(44100, v_rectangular, "v_rectangular_freq", f_max=8000)
+
+    freq_compute_fft(44100, v_hamming)
+
+    for i in [512, 1024, 2048]:
+        # for window in ['boxcar', 'bartlett', 'hamming']:
+
+        #     spectogram_plot(file1_fs, file_filter_output,
+        #                     f"espectograma_submuestreado_{window}_{i:04d}", N=i,
+        #                     win=window, ylim=[0, 3000], t=5, dt=1)
+
+        N = 1024
+        beta = 8.6
+        kaiser_window = get_window(("kaiser", beta), N)
+        spectogram_plot(file1_fs, file_filter_output,
+                        f"espectograma_submuestreado_kaiser_window_{i:04d}", N=i,
+                        win=kaiser_window, ylim=[0, 3000], t=5, dt=1)
 
 ############################# Llamados a funciones ############################
 
@@ -388,5 +426,6 @@ def primer_y_segunda_parte():
     a4_clarinete_cutoff()
     a4_violin_cutoff()
 
-# filtro_fir()
+
+# primer_y_segunda_parte()
 filtro_fir_deducido()
diff --git a/tp/utils.py b/tp/utils.py
@@ -238,15 +238,17 @@ def freq_compute_fft(fs, data, t=0, dt=0):
         di = int((t+dt)*fs)
 
     interval_data = data[i:di]
+
+    # puntos de la fft
     N = len(interval_data)
-    interval_fft = fft(interval_data) / N
-    interval_freqs = fftfreq(N, d=1/fs)
+    interval_fft = fft(interval_data, 20000)
+    interval_freqs = fftfreq(20000, 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):
+              t=0, dt=0, a=0, da=0, show=False):
 
     interval_fft, interval_freqs = freq_compute_fft(fs, data, t, dt)
     N = len(interval_fft)
@@ -255,7 +257,7 @@ def freq_plot(fs, data, save_name="", f_min=0, f_max=0, y_min=0, y_max=0,
     x = interval_freqs[:N // 2]
     y = np.abs(interval_fft[:N // 2])
 
-    fig, ax = freq_graph_data(x, y, f_min, f_max, y_min, y_max, show=False)
+    fig, ax = freq_graph_data(x, y, f_min, f_max, y_min, y_max, show=show)
 
     if save_name != "":
         save_plot(fig, save_name)
@@ -277,7 +279,7 @@ def freq_plot_multiple(fs, data_arr, leg_arr, save_name="",
     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):
+def spectogram_plot(fs, data, save_name="", t=0, dt=0, N=1024, overlp=16, win='hamm', xlim=[], ylim=[], show=False):
     if dt == 0:
         dt = (len(data)/fs)-t
 
@@ -308,7 +310,8 @@ def spectogram_plot(fs, data, save_name="", t=0, dt=0, N=1024, overlp=16, win='h
     if show == True:
         plt.show()
     else:
-        save_plot(fig, save_name)
+        if save_name != "":
+            save_plot(fig, save_name)
 
     return fig, axis