示例#1
0
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)
示例#2
0
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)
示例#3
0
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)
示例#4
0
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)
示例#5
0
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)
示例#7
0
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)
示例#9
0
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)
示例#10
0
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)
示例#11
0
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)
示例#12
0
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)
示例#13
0
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)