"""
Copyright 2018 Johns Hopkins University (Author: Jesus Villalba)
Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
Miscellaneous functions
"""
import numpy as np
[docs]def generate_data(g):
while 1:
yield g.get_next_batch()
[docs]def str2bool(s):
"""Convert string to bool for argparse"""
if isinstance(s, bool):
return s
values = {
"true": True,
"t": True,
"yes": True,
"y": True,
"false": False,
"f": False,
"no": False,
"n": False,
}
if s.lower() not in values:
raise ValueError("Need bool; got %r" % s)
return values[s.lower()]
[docs]def apply_gain_logx(x, AdB):
"""Applies A dB gain to log(x)"""
return x + AdB / (20.0 * np.log10(np.exp(1)))
[docs]def apply_gain_logx2(x, AdB):
"""Applies A dB gain to log(x^2)"""
return x + AdB / (10.0 * np.log10(np.exp(1)))
[docs]def apply_gain_x(x, AdB):
"""Applies A dB gain to x"""
return x * 10 ** (AdB / 20)
[docs]def apply_gain_x2(x, AdB):
"""Applies A dB gain to x^2"""
return x * 10 ** (AdB / 10)
[docs]def apply_gain(x, feat_type, AdB):
f_dict = {
"fft": apply_gain_x,
"logfft": apply_gain_logx,
"fb": apply_gain_x,
"fb2": apply_gain_x2,
"logfb": apply_gain_logx,
"logfb2": apply_gain_logx2,
}
f = f_dict[feat_type]
return f(x, AdB)
[docs]def energy_vad(P):
thr = np.max(P) - 35
return P > thr
[docs]def compute_snr(x, n, axis=-1):
P_x = 10 * np.log10(np.mean(x ** 2, axis=axis))
P_n = 10 * np.log10(np.mean(n ** 2, axis=axis))
return P_x - P_n
[docs]def filter_args(valid_args, kwargs):
"""Filters arguments from a dictionary
Args:
valid_args: list/tuple of valid arguments
kwargs: dictionary containing program config arguments
Returns
Dictionary with only valid_args keys if they exists
"""
return dict((k, kwargs[k]) for k in valid_args if k in kwargs)