Skip to content
Snippets Groups Projects
Test_alpha.py 17.6 KiB
Newer Older
Anna Neumann's avatar
Anna Neumann committed
import os
import numpy as np
import librosa
import soundfile
import math
from tqdm import tqdm
Anna Neumann's avatar
Anna Neumann committed

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 = []

Anna Neumann's avatar
Anna Neumann committed
# 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')
Anna Neumann's avatar
Anna Neumann committed
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()
Anna Neumann's avatar
Anna Neumann committed
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')
Anna Neumann's avatar
Anna Neumann committed
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()
Anna Neumann's avatar
Anna Neumann committed
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')
Anna Neumann's avatar
Anna Neumann committed
ax.set_xlabel('smoothing factors')
ax.set_ylabel('scores')
Anna Neumann's avatar
Anna Neumann committed
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()
Anna Neumann's avatar
Anna Neumann committed

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()