def test_mbstoi(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename, squeeze_me=True) sii = MBSTOI.mbstoi(data["xl"], data["xr"], data["yl"], data["yr"]) npt.assert_allclose(sii, data["sii"], atol=ATOL, rtol=RTOL) print(utils.hash_numpy(sii), file=regtest)
def test_FilterbankAndRecruitment(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename, squeeze_me=False) filtrecruited = filterbank_and_recruitment( data["coch_sig"], data["SPLequiv0dBfile"][0], data["nchans"], data["erbn_centfrq"][0], data["fs"], data["ngamma"], data["gtn_denoms"], data["gtn_nums"], data["gtn_delays"][0], data["start2poleHP"], data["hp_denoms"], data["hp_nums"], data["expnsn_ratios"][0], data["eq_loud_db"][0], data["recombination_dB"], ) sdr = utils.compute_siSDR(filtrecruited.flatten(), data["coch_sig_out"].flatten()) assert sdr > MIN_SDR if all(x == 1.0 for x in data["expnsn_ratios"][0]): # No recruitment, results should be very, very close npt.assert_allclose(filtrecruited, data["coch_sig_out"]) else: # With recruitment, small diffs between MATLAB and Python # due to differences in low pass filter design. npt.assert_allclose(filtrecruited, data["coch_sig_out"], atol=1e-8, rtol=0.02) print(utils.hash_numpy(filtrecruited), file=regtest)
def test_audfilt(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename) audfiltered = MSBG.audfilt(data["rl"], data["ru"], data["sampfreq"], data["asize"]) npt.assert_allclose(audfiltered, data["filter"]) print(utils.hash_numpy(audfiltered), file=regtest)
def test_ec(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename, squeeze_me=True) xl_hat = data["xl_hat"] N = data["N"] J = data["J"] d = np.zeros((J, np.shape(xl_hat)[1] - N + 1)) p_ec_max = np.zeros((J, np.shape(xl_hat)[1] - N + 1)) d1, p_ec_max1 = MBSTOI.ec( xl_hat, data["xr_hat"], data["yl_hat"], data["yr_hat"], J, N, data["fids"], data["cf"], data["taus"], data["ntaus"], data["gammas"], data["ngammas"], d, p_ec_max, data["sigma_epsilon"], data["sigma_delta"], ) npt.assert_allclose(d1, data["d"], atol=ATOL, rtol=RTOL) npt.assert_allclose(p_ec_max1, data["p_ec_max"], atol=ATOL, rtol=RTOL) print(utils.hash_numpy(d1), file=regtest)
def test_stft(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename) win_size = int(data["N"]) fft_size = int(data["N_fft"]) stft_out = MBSTOI.stft(data["x"], win_size, fft_size) npt.assert_allclose(stft_out, data["x_stdft"], atol=ATOL, rtol=RTOL) print(utils.hash_numpy(stft_out), file=regtest)
def test_generate_key_percent(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename, squeeze_me=True) key, used_thr_dB = MSBG.generate_key_percent( data["sig"], data["thr_dB"], data["winlen"] ) npt.assert_allclose(key, data["key"] - 1, rtol=RTOL) npt.assert_allclose(used_thr_dB, data["used_thr_dB"], rtol=RTOL) print(utils.hash_numpy(key), file=regtest) print(used_thr_dB, file=regtest)
def test_gains(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename) g = GHA.gains( data["compr_thr_inputs"], data["compr_thr_gains"], data["compression_ratios"], data["levels"], ) npt.assert_allclose(g, data["g"], atol=ATOL, rtol=RTOL) print(utils.hash_numpy(g), file=regtest)
def test_measure_rms(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename, squeeze_me=True) rms, key, rel_dB_thresh, active = MSBG.measure_rms(data["signal"], data["fs"], data["dB_rel_rms"]) npt.assert_allclose(rms, data["rms"], rtol=RTOL) npt.assert_allclose(key, data["key"] - 1, rtol=RTOL) # index so subtract 1 OK npt.assert_allclose(rel_dB_thresh, data["rel_dB_thresh"], rtol=RTOL) print(rms, file=regtest) print(utils.hash_numpy(key), file=regtest) print(rel_dB_thresh, file=regtest)
def test_thirdoct(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename) fs = int(data["fs"]) N_fft = int(data["N_fft"]) numBands = int(data["numBands"]) mn = int(data["mn"]) obm, cf, fids, freq_low, freq_high = MBSTOI.thirdoct( fs, N_fft, numBands, mn) npt.assert_allclose(obm, data["A"], atol=ATOL, rtol=RTOL) npt.assert_allclose(cf, data["cf"], atol=ATOL, rtol=RTOL) npt.assert_allclose(fids, data["fids"], atol=ATOL, rtol=RTOL) print(utils.hash_numpy(obm), file=regtest)
def test_gen_eh2008_speech_noise_supplied_b(filename, regtest): np.random.seed(0) filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename, squeeze_me=True) # Use filter computed by MATLAB. eh2008_nse = MSBG.gen_eh2008_speech_noise(data["durn"], data["fs"], supplied_b=data["b"]) assert len(eh2008_nse) == len(data["eh2008_nse"]) sdr = utils.compute_siSDR(eh2008_nse, data["eh2008_nse"]) assert sdr > MIN_SDR npt.assert_allclose(eh2008_nse, data["eh2008_nse"], atol=ATOL, rtol=RTOL) print(utils.hash_numpy(eh2008_nse), file=regtest)
def test_remove_silent_frames(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename, squeeze_me=True) xl_sil, xr_sil, yl_sil, yr_sil = MBSTOI.remove_silent_frames( data["xl"], data["xr"], data["yl"], data["yr"], data["range"], data["N"], data["K"], ) npt.assert_allclose(xl_sil, data["xl_sil"], atol=ATOL, rtol=RTOL) npt.assert_allclose(xr_sil, data["xr_sil"], atol=ATOL, rtol=RTOL) npt.assert_allclose(yl_sil, data["yl_sil"], atol=ATOL, rtol=RTOL) npt.assert_allclose(xr_sil, data["xr_sil"], atol=ATOL, rtol=RTOL) print(utils.hash_numpy(xl_sil), file=regtest)
def test_gainrule_camfit_compr2(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename) sFitModel = {} sFitModel["frequencies"] = np.array([ 177.0, 297.0, 500.0, 841.0, 1414.0, 2378.0, 3999.99976, 6726.99951, 11314.0 ]) sFitModel["edge_frequencies"] = np.array([ 9.99999994e-09, 2.29279297e02, 3.85356964e02, 6.48459717e02, 1.09049243e03, 1.83370972e03, 3.08415283e03, 5.18729199e03, 8.72406250e03, 1.00000010e07, ]) sFitModel["levels"] = np.linspace(-10, 110, 121) l = np.array([45, 45, 35, 45, 60, 65, 70, 65]) r = np.array([40, 40, 45, 45, 60, 65, 80, 80]) audf = np.array([250, 500, 1000, 2000, 3000, 4000, 6000, 8000]) noisegatelevels = np.array([38, 38, 36, 37, 32, 26, 23, 22, 8]) noisegateslope = 0 level = 0 # variable audiogram = GHA.Audiogram(levels_l=l, levels_r=r, cfs=audf) sGt = GHA.gainrule_camfit_compr(audiogram, sFitModel, noisegatelevels, noisegateslope, level=level) newl = sGt["sGt"][:, :, 0] newr = sGt["sGt"][:, :, 1] npt.assert_allclose(newl, data["l"], atol=ATOL, rtol=RTOL) npt.assert_allclose(newr, data["r"], atol=ATOL, rtol=RTOL) print(utils.hash_numpy(newl), file=regtest)
def test_get_gaintable(filename, regtest): filename = os.path.dirname( os.path.abspath(__file__)) + "/auddata/" + filename data = scipy.io.loadmat(filename) audfn = filename.split("/")[-1] audfn = "aud" + audfn[3:] audfilename = os.path.dirname(filename) + "/" + audfn # Set audiogram frequencies if "ex" in audfilename: audf = [125, 250, 500, 1000, 2000, 4000, 6000, 8000] else: audf = [125, 250, 500, 750, 1000, 1500, 2000, 3000, 4000, 6000, 8000] # If importing audiogram from mat file dirname = os.path.dirname(__file__) dirname = os.path.split(dirname)[0] # go to parent folder GHA filename = os.path.join(dirname, audfilename) auddata = spio.loadmat(filename) audiogram = GHA.Audiogram(levels_l=auddata["L"], levels_r=auddata["R"], cfs=np.array(audf)) noisegatelevels = 45 noisegateslope = 1 output = GHA.get_gaintable(audiogram, noisegatelevels, noisegateslope, cr_level=110, max_output_level=100) npt.assert_allclose(output["sGt"][0:9, :], data["gaintable1"][0:9, :], atol=ATOL, rtol=RTOL) npt.assert_allclose(output["sGt"][9:, :], data["gaintable1"][9:, :], atol=ATOL, rtol=RTOL) print(utils.hash_numpy(output["sGt"]), file=regtest)
def test_multifit_apply_noisegate(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename) noisegatelevel = np.transpose( np.tile(np.array(data["sGt"].item()[1][0][0][0][0][0][0]), (2, 1))) noisegateslope = np.transpose( np.tile(np.array(data["sGt"].item()[1][0][0][0][0][0][1]), (2, 1))) l = data["sGt"]["l"].item() sGt = np.zeros((np.shape(l)[0], np.shape(l)[1], 2)) sGt[:, :, 0] = l sGt[:, :, 1] = data["sGt"]["r"].item() output = GHA.multifit_apply_noisegate( sGt, data["sGt"]["frequencies"][0][0], data["sGt"]["levels"][0][0][0], noisegatelevel, noisegateslope, ) npt.assert_allclose(output["sGt"], sGt, atol=ATOL, rtol=RTOL) print(utils.hash_numpy(output["sGt"]), file=regtest)
def test_smear3(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename, squeeze_me=True) outbuffer = MSBG.smear3(data["fsmear"], data["inbuffer"]) npt.assert_allclose(outbuffer, data["outbuffer"], rtol=RTOL) print(utils.hash_numpy(outbuffer), file=regtest)
def test_isothr(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename) vIsoThrDB = GHA.isothr(data["vsDesF"]) npt.assert_allclose(vIsoThrDB, data["vIsoThrDB"], atol=ATOL, rtol=RTOL) print(utils.hash_numpy(vIsoThrDB), file=regtest)
def test_freq_interp_sh(filename, regtest): filename = os.path.dirname(os.path.abspath(__file__)) + "/data/" + filename data = scipy.io.loadmat(filename) y = GHA.freq_interp_sh(data["f_in"], data["y_in"], data["f"]) npt.assert_allclose(y, data["y"], atol=ATOL, rtol=RTOL) print(utils.hash_numpy(y), file=regtest)