TB065

Index Commits Files Refs
tp/scripts/segunda_parte.py (7234B)
   1 from utils import *
   2 
   3 ############################## Segunda parte ##################################
   4 
   5 def freq_domain_cancion1():
   6     freq_plot(file1_fs, file1_data, "cancion1_fft", f_max=8000)
   7     freq_plot(file1_fs, file1_filter1_output, "cancion1_filter1_output_fft",
   8               f_max=8000)
   9     freq_plot(file1_fs, file1_filter2_output, "cancion1_filter2_output_fft",
  10               f_max=8000)
  11 
  12 def freq_domain_cancion2():
  13     freq_plot(file2_fs, file2_data, "cancion2_fft",
  14               f_max=8000)
  15     freq_plot(file2_fs, file2_filter1_output, "cancion2_filter1_output_fft",
  16               f_max=8000)
  17     freq_plot(file2_fs, file2_filter2_output, "cancion2_filter2_output_fft",
  18               f_max=8000)
  19 
  20 def freq_domain_spectograms():
  21     # Formas de funcion ventana (en tiempo, en frecuencia tienen otra forma)
  22     # 'boxcar': rectangular
  23     # 'bartlett': triangular
  24     # 'hann': similar a medio ciclo de seno
  25     # https://en.wikipedia.org/wiki/Window_function
  26 
  27     for i in [512, 1024, 2048]:
  28         for window in ['boxcar', 'bartlett', 'hann', 'hamming']:
  29             spectogram_plot(file1_fs, file1_data,
  30                             f"cancion1_espectrograma_{window}_{i:04d}", N=i,
  31                             win=window, ylim=[0, 17500])
  32 
  33             spectogram_plot(file2_fs, file2_data,
  34                             f"cancion2_espectrograma_{window}_{i:04d}", t=6, N=i,
  35                             win=window, ylim=[0, 8000])
  36 
  37 def a4_flauta_cutoff():
  38     a4_flauta_cutoff_fft, a4_flauta_cutoff_freqs = freq_compute_fft(
  39             a4_flauta_fs, a4_flauta_data)
  40 
  41     # armonicos mayores a 'cutoff_freq' Hz son descartadas, analogo a aplicar un
  42     # filtro pasabajos ideal
  43     cutoff_freq = 1000
  44     a4_flauta_cutoff_fft[np.abs(a4_flauta_cutoff_freqs) > cutoff_freq] = 0.0
  45 
  46     # espectro de la señal filtrada
  47     N = len(a4_flauta_cutoff_fft)
  48     x = a4_flauta_cutoff_freqs[:N // 2]
  49     y = np.abs(a4_flauta_cutoff_fft[:N // 2])
  50     fig, axis = freq_graph_data(x, y, f_max=2000, show=False)
  51     save_plot(fig, f"a4_flauta_cutoff_{cutoff_freq}Hz_fft")
  52 
  53     # señal temporal reconstruida
  54     a4_flauta_cutoff = ifft(a4_flauta_cutoff_fft).real
  55 
  56     time_plot(a4_flauta_fs, a4_flauta_cutoff,
  57               f"a4_flauta_cutoff_{cutoff_freq}Hz", 0.25, 0.010)
  58 
  59     save_to_wav(a4_flauta_fs, a4_flauta_cutoff,
  60                 f"a4_flauta_cutoff_{cutoff_freq}Hz.wav")
  61 
  62     data_arr = [normalize(a4_flauta_data), normalize(a4_flauta_cutoff)]
  63     leg_arr = [
  64         'Señal de nota A4 de flauta',
  65         'Señal de nota A4 de flauta filtrada'
  66     ]
  67     time_plot_multiple(a4_flauta_fs, data_arr, leg_arr,
  68                        "a4_flauta_cutoff_time_comparison", t=0.25, dt=0.008)
  69 
  70     data_arr = [a4_flauta_cutoff, a4_flauta_data]
  71     leg_arr = ["Nota musical A4 con flauta filtrada", "Nota musical A4 con flauta"]
  72     freq_plot_multiple(a4_flauta_fs, data_arr, leg_arr, f_max=4000, t=0.253,
  73                        dt=8*0.002272727, save_name="a4_flauta_comparison", show=False)
  74 
  75 def a4_clarinete_cutoff():
  76     a4_clarinete_cutoff_fft, a4_clarinete_cutoff_freqs = freq_compute_fft(
  77             a4_clarinete_fs, a4_clarinete_data)
  78 
  79     cutoff_freq = 3000
  80     a4_clarinete_cutoff_fft[np.abs(a4_clarinete_cutoff_freqs) > cutoff_freq] = 0.0
  81 
  82     # espectro de la señal filtrada
  83     N = len(a4_clarinete_cutoff_fft)
  84     x = a4_clarinete_cutoff_freqs[:N // 2]
  85     y = np.abs(a4_clarinete_cutoff_fft[:N // 2])
  86     fig, axis = freq_graph_data(x, y, f_max=3000, show=False)
  87     save_plot(fig, f"a4_clarinete_cutoff_{cutoff_freq}Hz_fft")
  88 
  89     # señal temporal reconstruida
  90     a4_clarinete_cutoff = ifft(a4_clarinete_cutoff_fft).real
  91     time_plot(a4_clarinete_fs, a4_clarinete_cutoff,
  92               f"a4_clarinete_cutoff_{cutoff_freq}Hz", 0.25, 0.010)
  93     save_to_wav(a4_clarinete_fs, a4_clarinete_cutoff,
  94                 f"a4_clarinete_cutoff_{cutoff_freq}Hz.wav")
  95 
  96     data_arr = [normalize(a4_clarinete_data), normalize(a4_clarinete_cutoff)]
  97     leg_arr = [
  98         'Señal de nota A4 de clarinete',
  99         'Señal de nota A4 de clarinete filtrada'
 100     ]
 101     time_plot_multiple(a4_clarinete_fs, data_arr, leg_arr,
 102                        "a4_clarinete_cutoff_time_comparison", t=0.25, dt=0.008)
 103 
 104     data_arr = [a4_clarinete_cutoff, a4_clarinete_data]
 105     leg_arr = [
 106         "Nota musical A4 con clarinete filtrada",
 107         "Nota musical A4 con clarinete"
 108     ]
 109 
 110     freq_plot_multiple(a4_clarinete_fs, data_arr, leg_arr, f_max=8000, t=0.253,
 111                        dt=8*0.002272727, save_name="a4_clarinete_comparison", show=False)
 112 
 113 def a4_violin_cutoff():
 114     a4_violin_cutoff_fft, a4_violin_cutoff_freqs = freq_compute_fft(
 115             a4_violin_fs, a4_violin_data)
 116 
 117     cutoff_freq = 4000
 118     a4_violin_cutoff_fft[np.abs(a4_violin_cutoff_freqs) > cutoff_freq] = 0.0
 119 
 120     # espectro
 121     N = len(a4_violin_cutoff_fft)
 122     x = a4_violin_cutoff_freqs[:N // 2]
 123     y = np.abs(a4_violin_cutoff_fft[:N // 2])
 124     fig, axis = freq_graph_data(x, y, f_max=4000, show=False)
 125     save_plot(fig, f"a4_violin_cutoff_{cutoff_freq}Hz_fft")
 126 
 127     # señal temporal reconstruida
 128     a4_violin_cutoff = ifft(a4_violin_cutoff_fft).real
 129     time_plot(a4_violin_fs, a4_violin_cutoff,
 130               f"a4_violin_cutoff_{cutoff_freq}Hz", 0.25, 0.010)
 131     save_to_wav(a4_violin_fs, a4_violin_cutoff, f"a4_violin_cutoff_{cutoff_freq}Hz.wav")
 132 
 133     data_arr = [normalize(a4_violin_data), normalize(a4_violin_cutoff)]
 134     leg_arr = ['Señal de nota A4 de violin', 'Señal de nota A4 de violin filtrada']
 135     time_plot_multiple(a4_violin_fs, data_arr, leg_arr,
 136                        "a4_violin_cutoff_time_comparison", t=0.25, dt=0.008)
 137 
 138     data_arr = [a4_violin_cutoff, a4_violin_data]
 139     leg_arr = ["Nota musical A4 con violin filtrada", "Nota musical A4 con violin"]
 140     freq_plot_multiple(a4_violin_fs, data_arr, leg_arr, f_max=8000, t=0.253,
 141                        dt=8*0.002272727, save_name="a4_violin_comparison", show=False)
 142 
 143 def a4_flauta_fseries():
 144     fft_freqs_arr = []
 145 
 146     for i in [8, 4, 1]:
 147         fft, freqs = freq_compute_fft(a4_flauta_fs, a4_flauta_data, t=0.253, dt=i*0.002272727)
 148         fft_freqs_arr.append([fft, freqs,
 149               f"Serie de Fourier {i} periodo{'s' if i != 1 else ''}"])
 150 
 151     fig, axis = freq_graph_multiple_data(fft_freqs_arr, show=False, f_max=4500)
 152     save_plot(fig, "a4_flauta_fseries_comparison")
 153 
 154 def a4_clarinete_fseries():
 155     fft_freqs_arr = []
 156 
 157     for i in [8, 4, 1]:
 158         fft, freqs = freq_compute_fft(
 159                 a4_clarinete_fs, a4_clarinete_data, t=0.253, dt=i*0.002272727)
 160 
 161         fft_freqs_arr.append([fft, freqs,
 162               f"Serie de Fourier {i} periodo{'s' if i != 1 else ''}"])
 163 
 164     fig, axis = freq_graph_multiple_data(fft_freqs_arr, show=False, f_max=8000)
 165     save_plot(fig, "a4_clarinete_fseries_comparison")
 166 
 167 def a4_violin_fseries():
 168     fft_freqs_arr = []
 169 
 170     for i in [8, 4, 1]:
 171         fft, freqs = freq_compute_fft(a4_violin_fs, a4_violin_data,
 172                                       t=0.253, dt=i*0.002272727)
 173         fft_freqs_arr.append([fft, freqs,
 174               f"Serie de Fourier {i} periodo{'s' if i != 1 else ''}"])
 175 
 176     fig, axis = freq_graph_multiple_data(fft_freqs_arr, show=False, f_max=8000)
 177     save_plot(fig, "a4_violin_fseries_comparison")
 178 
 179