import os import numpy as np import librosa import soundfile import math from tqdm import tqdm path = '/media/aneumann/Harddisk/Bachelorarbeit/BATest/Gemischte_Signale/Test' path_save = '/media/aneumann/Harddisk/Bachelorarbeit/BATest/Test_alpha_WF' rate = 16000 files = os.listdir(path) files = sorted(files,key=lambda x: ((int(x.split("_")[-4])),(int(x.split("_")[-3])),(int(x.split("_")[-2])),(x.split("_")[-1]))) alphas = [0, 0.1, 0.2, 0.3, 0.4, 0.5] # initializing logerr_mean_whole = [] logerr_over_whole = [] logerr_under_whole = [] logerr_var_whole = [] pesq_diff_whole = [] pesq_org_whole = [] pesq_sp_whole = [] estoi_diff_whole = [] estoi_org_whole = [] estoi_sp_whole = [] stoi_diff_whole = [] stoi_org_whole = [] stoi_sp_whole = [] neval_indexes = [] # for alpha in alphas: # # alpha = 0.1 # for file in tqdm(files): # # i = files.index(file) # loadfile = np.load(path + '/' + file) # mixed = loadfile['dbmixed'] # speech = loadfile['dbspeech'] # music = loadfile['dbmusic'] # mix = loadfile['mixed'] # snd = loadfile['snd'] # noise = loadfile['noise'] # # # spectrogram of signals # mixed_spec = np.power(np.absolute(mixed),2) # speech_spec = np.power(np.absolute(speech),2) # music_spec = np.power(np.absolute(music),2) # # # Rauschen smoothen # # alpha = 0.2 # music_smooth = np.zeros((mixed.shape[0],mixed.shape[1])) # music_smooth[:,0] = music_spec[:,0] # for c in range(1,mixed.shape[1]): # music_smooth[:,c] = np.multiply(alpha,music_smooth[:,(c-1)]) + np.multiply((1-alpha),music_spec[:,c]) # # # probieren wiener filter # # angle_mixed = np.angle(mixed) # angle_speech = np.angle(speech) # # divide mixed and music # gamma = np.divide(mixed_spec,music_smooth) # # estimation a priori SNR xi # xi = np.subtract(gamma,1) # res = np.where(xi < 0) # for r in range(len(res[0])): # xi[res[0][r], res[1][r]] = 0 # # smoothing xi to xidd # # alpha = 0.2 # xidd = np.zeros((mixed.shape[0],mixed.shape[1])) # xidd[:,0] = xi[:,0] # for c in range(1,mixed.shape[1]): # xidd[:,c] = np.multiply(alpha,xidd[:,(c-1)]) + np.multiply((1-alpha),xi[:,c]) # # wiener filter # HFil = np.divide(xidd,(1+xidd)) # # denoised signal in frequncy domain # mixed_abs = np.sqrt(mixed_spec.astype(np.complex)) # sig_fil = np.multiply(HFil,mixed_abs) # # transform to time domain # sig_tomix = sig_fil*np.exp(np.multiply(1j,angle_mixed)) # # print(sig_tomix.shape) # mixedfiltered = librosa.core.istft(sig_tomix,hop_length=256,win_length=512,window='hann',center=False,dtype=np.complex128) # # Abspeichern # # name = path_save + '/mix_' + str(i) + '_' + str(alpha) + '.wav' # # soundfile.write(name, mix, rate) # # name = path_save + '/WF_' + str(i) + '_' + str(alpha) + '.wav' # # soundfile.write(name, np.real(mixedfiltered), rate) # # from pesq import pesq # from Auswertung.stoi import stoi # mix = mix[:len(mixedfiltered)] # snd = snd[:len(mixedfiltered)] # snd = np.real(snd) # mix = np.real(mix) # mixedfiltered = np.real(mixedfiltered) # mixedfiltered = np.nan_to_num(mixedfiltered, nan=0, posinf=500, neginf=-500) # # print(mix.shape) # # print(snd.shape) # # # pesq, stoi, estoi # pesq_org = pesq(rate,snd,mix,'wb') # pesq_sp = pesq(rate,snd,mixedfiltered,'wb') # pesq_diff = pesq_sp - pesq_org # # estoi_org = stoi(snd,mix,rate,extended=True) # estoi_sp = stoi(snd,mixedfiltered,rate,extended=True) # estoi_diff = estoi_sp - estoi_org # # stoi_org = stoi(snd,mix,rate,extended=False) # stoi_sp = stoi(snd,mixedfiltered,rate,extended=False) # stoi_diff = stoi_sp - stoi_org # # from Auswertung.logerr import logerr_func # # I_sub = 4 # K_sub = 4 # # beta = 0.9 # music_pred = np.zeros((mixed.shape[0],mixed.shape[1])) # music_pred[:,0] = music_spec[:,0] # for c in range(1,mixed.shape[1]): # music_pred[:,c] = np.multiply(beta,music_pred[:,(c-1)]) + np.multiply((1-beta),music_spec[:,c]) # # logerr_mean, logerr_over, logerr_under, logerr_var = logerr_func(music_smooth, music_pred, I_sub, K_sub) # # # print(logerr_mean) # # print(logerr_over) # # print(logerr_under) # # print(logerr_var) # # print(pesq_sp) # # print(estoi_sp) # # print(stoi_sp) # # if not math.isnan(pesq_diff) and not math.isnan(pesq_org) and not math.isnan(pesq_sp) and not math.isnan(estoi_diff) and not math.isnan(estoi_org) and not math.isnan(estoi_sp) and not math.isnan(stoi_diff) and not math.isnan(stoi_org) and not math.isnan(stoi_sp) and not math.isnan(logerr_mean) and not math.isnan(logerr_over) and not math.isnan(logerr_under) and not math.isnan(logerr_var): # # pesq_diff_whole.append(pesq_diff) # pesq_org_whole.append(pesq_org) # pesq_sp_whole.append(pesq_sp) # estoi_diff_whole.append(estoi_diff) # estoi_org_whole.append(estoi_org) # estoi_sp_whole.append(estoi_sp) # stoi_diff_whole.append(stoi_diff) # stoi_org_whole.append(stoi_org) # stoi_sp_whole.append(stoi_sp) # logerr_mean_whole.append(logerr_mean) # logerr_over_whole.append(logerr_over) # logerr_under_whole.append(logerr_under) # logerr_var_whole.append(logerr_var) # # else: # neval_indexes.append(i) # # # path_savecontents = path_save + '/Ausgewertet_' + str(alpha*10) + '.npz' # np.savez(path_savecontents, logerr_mean_whole=logerr_mean_whole, logerr_over_whole=logerr_over_whole, logerr_under_whole=logerr_under_whole, logerr_var_whole=logerr_var_whole, pesq_diff_whole=pesq_diff_whole, pesq_org_whole=pesq_org_whole, pesq_sp_whole=pesq_sp_whole, stoi_diff_whole=stoi_diff_whole, stoi_org_whole=stoi_org_whole, stoi_sp_whole=stoi_sp_whole, estoi_diff_whole=estoi_diff_whole, estoi_org_whole=estoi_org_whole, estoi_sp_whole=estoi_sp_whole, neval_indexes=neval_indexes) # plotten import matplotlib.pyplot as plt path_0 = '/media/aneumann/Harddisk/Bachelorarbeit/BATest/Test_alpha_WF/Ausgewertet_0.npz' content0 = np.load(path_0) logerr_mean_0, logerr_over_0, logerr_under_0, logerr_var_0, pesq_0, stoi_0, estoi_0 = content0['logerr_mean_whole'], content0['logerr_over_whole'], content0['logerr_under_whole'], content0['logerr_var_whole'], content0['pesq_diff_whole'], content0['stoi_diff_whole'], content0['estoi_diff_whole'] path_01 = '/media/aneumann/Harddisk/Bachelorarbeit/BATest/Test_alpha_WF/Ausgewertet_1.0.npz' content01 = np.load(path_01) logerr_mean_01, logerr_over_01, logerr_under_01, logerr_var_01, pesq_01, stoi_01, estoi_01 = content01['logerr_mean_whole'], content01['logerr_over_whole'], content01['logerr_under_whole'], content01['logerr_var_whole'], content01['pesq_diff_whole'], content01['stoi_diff_whole'], content01['estoi_diff_whole'] path_02 = '/media/aneumann/Harddisk/Bachelorarbeit/BATest/Test_alpha_WF/Ausgewertet_2.0.npz' content02 = np.load(path_02) logerr_mean_02, logerr_over_02, logerr_under_02, logerr_var_02, pesq_02, stoi_02, estoi_02 = content02['logerr_mean_whole'], content02['logerr_over_whole'], content02['logerr_under_whole'], content02['logerr_var_whole'], content02['pesq_diff_whole'], content02['stoi_diff_whole'], content02['estoi_diff_whole'] path_03 = '/media/aneumann/Harddisk/Bachelorarbeit/BATest/Test_alpha_WF/Ausgewertet_3.0.npz' content03 = np.load(path_03) logerr_mean_03, logerr_over_03, logerr_under_03, logerr_var_03, pesq_03, stoi_03, estoi_03 = content03['logerr_mean_whole'], content03['logerr_over_whole'], content03['logerr_under_whole'], content03['logerr_var_whole'], content03['pesq_diff_whole'], content03['stoi_diff_whole'], content03['estoi_diff_whole'] path_04 = '/media/aneumann/Harddisk/Bachelorarbeit/BATest/Test_alpha_WF/Ausgewertet_4.0.npz' content04 = np.load(path_04) logerr_mean_04, logerr_over_04, logerr_under_04, logerr_var_04, pesq_04, stoi_04, estoi_04 = content04['logerr_mean_whole'], content04['logerr_over_whole'], content04['logerr_under_whole'], content04['logerr_var_whole'], content04['pesq_diff_whole'], content04['stoi_diff_whole'], content04['estoi_diff_whole'] path_05 = '/media/aneumann/Harddisk/Bachelorarbeit/BATest/Test_alpha_WF/Ausgewertet_5.0.npz' content05 = np.load(path_05) logerr_mean_05, logerr_over_05, logerr_under_05, logerr_var_05, pesq_05, stoi_05, estoi_05 = content05['logerr_mean_whole'], content05['logerr_over_whole'], content05['logerr_under_whole'], content05['logerr_var_whole'], content05['pesq_diff_whole'], content05['stoi_diff_whole'], content05['estoi_diff_whole'] # logerr means labels = ['0','0.1','0.2','0.3','0.4','0.5'] log_mean_0 = np.mean(logerr_mean_0) log_mean_1 = np.mean(logerr_mean_01) log_mean_2 = np.mean(logerr_mean_02) log_mean_3 = np.mean(logerr_mean_03) log_mean_4 = np.mean(logerr_mean_04) log_mean_5 = np.mean(logerr_mean_05) log_over_0 = np.mean(logerr_over_0) log_over_1 = np.mean(logerr_over_01) log_over_2 = np.mean(logerr_over_02) log_over_3 = np.mean(logerr_over_03) log_over_4 = np.mean(logerr_over_04) log_over_5 = np.mean(logerr_over_05) log_under_0 = np.abs(np.mean(logerr_under_0)) log_under_1 = np.abs(np.mean(logerr_under_01)) log_under_2 = np.abs(np.mean(logerr_under_02)) log_under_3 = np.abs(np.mean(logerr_under_03)) log_under_4 = np.abs(np.mean(logerr_under_04)) log_under_5 = np.abs(np.mean(logerr_under_05)) log_var_0 = np.mean(logerr_var_0) log_var_1 = np.mean(logerr_var_01) log_var_2 = np.mean(logerr_var_02) log_var_3 = np.mean(logerr_var_03) log_var_4 = np.mean(logerr_var_04) log_var_5 = np.mean(logerr_var_05) means = [log_mean_0, log_mean_1, log_mean_2, log_mean_3, log_mean_4, log_mean_5] overs = [log_over_0, log_over_1, log_over_2, log_over_3, log_over_4, log_over_5] unders = [log_under_0, log_under_1, log_under_2, log_under_3, log_under_4, log_under_5] vars = [log_var_0, log_var_1, log_var_2, log_var_3, log_var_4, log_var_5] x = np.arange(len(labels)) width = 0.2 fig, ax = plt.subplots() rects1 = ax.bar(x - width*1.5, means, width, label='Mean') rects2 = ax.bar(x - width/2, overs, width, label='Over') rects3 = ax.bar(x + width/2, unders, width, label='Under') rects4 = ax.bar(x + width*1.5, vars, width, label='Var') ax.set_ylabel('scores') ax.set_title('Alpha - LogErr evaluation - Means') ax.set_xticks(x) ax.set_xticklabels(labels) ax.legend() fig.tight_layout() plt.savefig(path_save + '/plot_logerr_means' + '.png', dpi=400) # plt.show() # logerr vars labels = ['0','0.1','0.2','0.3','0.4','0.5'] vlog_mean_0 = np.var(logerr_mean_0) vlog_mean_1 = np.var(logerr_mean_01) vlog_mean_2 = np.var(logerr_mean_02) vlog_mean_3 = np.var(logerr_mean_03) vlog_mean_4 = np.var(logerr_mean_04) vlog_mean_5 = np.var(logerr_mean_05) vlog_over_0 = np.var(logerr_over_0) vlog_over_1 = np.var(logerr_over_01) vlog_over_2 = np.var(logerr_over_02) vlog_over_3 = np.var(logerr_over_03) vlog_over_4 = np.var(logerr_over_04) vlog_over_5 = np.var(logerr_over_05) vlog_under_0 = np.var(logerr_under_0) vlog_under_1 = np.var(logerr_under_01) vlog_under_2 = np.var(logerr_under_02) vlog_under_3 = np.var(logerr_under_03) vlog_under_4 = np.var(logerr_under_04) vlog_under_5 = np.var(logerr_under_05) vlog_var_0 = np.var(logerr_var_0) vlog_var_1 = np.var(logerr_var_01) vlog_var_2 = np.var(logerr_var_02) vlog_var_3 = np.var(logerr_var_03) vlog_var_4 = np.var(logerr_var_04) vlog_var_5 = np.var(logerr_var_05) means = [vlog_mean_0, vlog_mean_1, vlog_mean_2, vlog_mean_3, vlog_mean_4, vlog_mean_5] overs = [vlog_over_0, vlog_over_1, vlog_over_2, vlog_over_3, vlog_over_4, vlog_over_5] unders = [vlog_under_0, vlog_under_1, vlog_under_2, vlog_under_3, vlog_under_4, vlog_under_5] vars = [vlog_var_0, vlog_var_1, vlog_var_2, vlog_var_3, vlog_var_4, vlog_var_5] x = np.arange(len(labels)) width = 0.2 fig, ax = plt.subplots() rects1 = ax.bar(x - width*1.5, means, width, label='Mean') rects2 = ax.bar(x - width/2, overs, width, label='Over') rects3 = ax.bar(x + width/2, unders, width, label='Under') rects4 = ax.bar(x + width*1.5, vars, width, label='Var') ax.set_ylabel('scores') ax.set_title('Alpha - LogErr evaluation - Variances') ax.set_xticks(x) ax.set_xticklabels(labels) ax.legend() fig.tight_layout() plt.savefig(path_save + '/plot_logerr_vars' + '.png', dpi=400) # plt.show() # pesq stoi means labels = ['0','0.1','0.2','0.3','0.4','0.5'] mpesq_0 = np.mean(pesq_0) mstoi_0 = np.mean(stoi_0) mestoi_0 = np.mean(estoi_0) mpesq_1 = np.mean(pesq_01) mstoi_1 = np.mean(stoi_01) mestoi_1 = np.mean(estoi_01) mpesq_2 = np.mean(pesq_02) mstoi_2 = np.mean(stoi_02) mestoi_2 = np.mean(estoi_02) mpesq_3 = np.mean(pesq_03) mstoi_3 = np.mean(stoi_03) mestoi_3 = np.mean(estoi_03) mpesq_4 = np.mean(pesq_04) mstoi_4 = np.mean(stoi_04) mestoi_4 = np.mean(estoi_04) mpesq_5 = np.mean(pesq_05) mstoi_5 = np.mean(stoi_05) mestoi_5 = np.mean(estoi_05) pesq = [mpesq_0, mpesq_1, mpesq_2, mpesq_3, mpesq_4, mpesq_5] stoi = [mstoi_0, mstoi_1, mstoi_2, mstoi_3, mstoi_4, mstoi_5] estoi = [mestoi_0, mestoi_1, mestoi_2, mestoi_3, mestoi_4, mestoi_5] x = np.arange(len(labels)) width = 0.2 fig, ax = plt.subplots() rects1 = ax.bar(x - width, pesq, width, label='PESQ diff') rects2 = ax.bar(x, stoi, width, label='STOI diff') rects3 = ax.bar(x + width, estoi, width, label='ESTOI diff') ax.set_xlabel('smoothing factors') ax.set_ylabel('scores') ax.set_title('Alpha - PESQ/STOI evaluation - Means') ax.set_xticks(x) ax.set_xticklabels(labels) ax.legend() fig.tight_layout() plt.savefig(path_save + '/plot_pesq_stoi_means' + '.png', dpi=400) # plt.show() # pesq stoi vars labels = ['0','0.1','0.2','0.3','0.4','0.5'] vpesq_0 = np.var(pesq_0) vstoi_0 = np.var(stoi_0) vestoi_0 = np.var(estoi_0) vpesq_1 = np.var(pesq_01) vstoi_1 = np.var(stoi_01) vestoi_1 = np.var(estoi_01) vpesq_2 = np.var(pesq_02) vstoi_2 = np.var(stoi_02) vestoi_2 = np.var(estoi_02) vpesq_3 = np.var(pesq_03) vstoi_3 = np.var(stoi_03) vestoi_3 = np.var(estoi_03) vpesq_4 = np.var(pesq_04) vstoi_4 = np.var(stoi_04) vestoi_4 = np.var(estoi_04) vpesq_5 = np.var(pesq_05) vstoi_5 = np.var(stoi_05) vestoi_5 = np.var(estoi_05) pesq = [vpesq_0, vpesq_1, vpesq_2, vpesq_3, vpesq_4, vpesq_5] stoi = [vstoi_0, vstoi_1, vstoi_2, vstoi_3, vstoi_4, vstoi_5] estoi = [vestoi_0, vestoi_1, vestoi_2, vestoi_3, vestoi_4, vestoi_5] x = np.arange(len(labels)) width = 0.2 fig, ax = plt.subplots() rects1 = ax.bar(x - width, pesq, width, label='PESQ diff') rects2 = ax.bar(x, stoi, width, label='STOI diff') rects3 = ax.bar(x + width, estoi, width, label='ESTOI diff') ax.set_xlabel('smoothing factors') ax.set_ylabel('scores') ax.set_title('Alpha - PESQ/STOI evaluation - Variances') ax.set_xticks(x) ax.set_xticklabels(labels) ax.legend() fig.tight_layout() plt.savefig(path_save + '/plot_pesq_stoi_vars' + '.png', dpi=400) # plt.show() path_save_tab = path_save + '/alpha_tabelle.txt' file = open(path_save_tab, "w") file.write("LogErr Means\nMean, Over, Under, Var\n") file.write("0: " + str(log_mean_0) + " " + str(log_over_0) + " " + str(log_under_0) + " " + str(log_var_0) + "\n") file.write("0.1: " + str(log_mean_1) + " " + str(log_over_1) + " " + str(log_under_1) + " " + str(log_var_1) + "\n") file.write("0.2: " + str(log_mean_2) + " " + str(log_over_2) + " " + str(log_under_2) + " " + str(log_var_2) + "\n") file.write("0.3: " + str(log_mean_3) + " " + str(log_over_3) + " " + str(log_under_3) + " " + str(log_var_3) + "\n") file.write("0.4: " + str(log_mean_4) + " " + str(log_over_4) + " " + str(log_under_4) + " " + str(log_var_4) + "\n") file.write("0.5: " + str(log_mean_5) + " " + str(log_over_5) + " " + str(log_under_5) + " " + str(log_var_5) + "\n") file.write("LogErr Vars\nMean, Over, Under, Var\n") file.write("LogErr Vars\nMean, Over, Under, Var\n") file.write("0: " + str(vlog_mean_0) + " " + str(vlog_over_0) + " " + str(vlog_under_0) + " " + str(vlog_var_0) + "\n") file.write("0.1: " + str(vlog_mean_1) + " " + str(vlog_over_1) + " " + str(vlog_under_1) + " " + str(vlog_var_1) + "\n") file.write("0.2: " + str(vlog_mean_2) + " " + str(vlog_over_2) + " " + str(vlog_under_2) + " " + str(vlog_var_2) + "\n") file.write("0.3: " + str(vlog_mean_3) + " " + str(vlog_over_3) + " " + str(vlog_under_3) + " " + str(vlog_var_3) + "\n") file.write("0.4: " + str(vlog_mean_4) + " " + str(vlog_over_4) + " " + str(vlog_under_4) + " " + str(vlog_var_4) + "\n") file.write("0.5: " + str(vlog_mean_5) + " " + str(vlog_over_5) + " " + str(vlog_under_5) + " " + str(vlog_var_5) + "\n") file.write("PESQ/STOI Means\nPESQ, STOI, ESTOI\n") file.write("0: " + str(mpesq_0) + " " + str(mstoi_0) + " " + str(mestoi_0) + "\n") file.write("0.1: " + str(mpesq_1) + " " + str(mstoi_1) + " " + str(mestoi_1) + "\n") file.write("0.2: " + str(mpesq_2) + " " + str(mstoi_2) + " " + str(mestoi_2) + "\n") file.write("0.3: " + str(mpesq_3) + " " + str(mstoi_3) + " " + str(mestoi_3) + "\n") file.write("0.4: " + str(mpesq_4) + " " + str(mstoi_4) + " " + str(mestoi_4) + "\n") file.write("0.5: " + str(mpesq_5) + " " + str(mstoi_5) + " " + str(mestoi_5) + "\n") file.write("PESQ/STOI Vars\nPESQ, STOI, ESTOI\n") file.write("0: " + str(vpesq_0) + " " + str(vstoi_0) + " " + str(vestoi_0) + "\n") file.write("0.1: " + str(vpesq_1) + " " + str(vstoi_1) + " " + str(vestoi_1) + "\n") file.write("0.2: " + str(vpesq_2) + " " + str(vstoi_2) + " " + str(vestoi_2) + "\n") file.write("0.3: " + str(vpesq_3) + " " + str(vstoi_3) + " " + str(vestoi_3) + "\n") file.write("0.4: " + str(vpesq_4) + " " + str(vstoi_4) + " " + str(vestoi_4) + "\n") file.write("0.5: " + str(vpesq_5) + " " + str(vstoi_5) + " " + str(vestoi_5) + "\n") file.close()