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
