예제 #1
0
def test_complex_2_real_imag_array_equality_imag(array):
    array_real_imag = complex_2_real_imag(array)
    assert_equal(array_real_imag[:, len(array_real_imag[0]) // 2:],
                 np.imag(array))
예제 #2
0
def test_complex_2_real_imag_array_len(array):
    array_real_imag = complex_2_real_imag(array)
    assert_equal(len(array_real_imag), len(array))
    assert_equal(array_real_imag.shape[1], array.shape[1] * 2)
예제 #3
0
def test_complex_2_real_imag_vector_len(array):
    assert_equal(len(complex_2_real_imag(array)), len(array) * 2)
예제 #4
0
def test_complex_2_real_imag_vector_equality_imag(array):
    array_real_imag = complex_2_real_imag(array)
    assert_equal(array_real_imag[len(array_real_imag) // 2:], np.imag(array))
예제 #5
0
def monte_carlo(
    measurement_system,
    random_number_generator,
    sampling_freq,
    freqs,
    complex_freq_resp,
    reference_array_path,
):
    udelta = 0.1 * measurement_system["delta"]
    uS0 = 0.001 * measurement_system["S0"]
    uf0 = 0.01 * measurement_system["f0"]

    runs = 10000
    MCS0 = random_number_generator.normal(
        loc=measurement_system["S0"], scale=uS0, size=runs
    )
    MCd = random_number_generator.normal(
        loc=measurement_system["delta"], scale=udelta, size=runs
    )
    MCf0 = random_number_generator.normal(
        loc=measurement_system["f0"], scale=uf0, size=runs
    )
    HMC = np.empty((runs, len(freqs)), dtype=complex)
    for index, mcs0_mcd_mcf0 in enumerate(zip(MCS0, MCd, MCf0)):
        bc_, ac_ = sos_phys2filter(mcs0_mcd_mcf0[0], mcs0_mcd_mcf0[1], mcs0_mcd_mcf0[2])
        b_, a_ = dsp.bilinear(bc_, ac_, sampling_freq)
        HMC[index, :] = dsp.freqz(b_, a_, 2 * np.pi * freqs / sampling_freq)[1]

    H = complex_2_real_imag(complex_freq_resp)
    assert_allclose(
        H,
        np.load(
            os.path.join(reference_array_path, "test_LSFIR_H.npz"),
        )["H"],
    )
    uAbs = np.std(np.abs(HMC), axis=0)
    assert_allclose(
        uAbs,
        np.load(
            os.path.join(reference_array_path, "test_LSFIR_uAbs.npz"),
        )["uAbs"],
        rtol=3.5e-2,
    )
    uPhas = np.std(np.angle(HMC), axis=0)
    assert_allclose(
        uPhas,
        np.load(
            os.path.join(reference_array_path, "test_LSFIR_uPhas.npz"),
        )["uPhas"],
        rtol=4.3e-2,
    )
    UH = np.cov(np.hstack((np.real(HMC), np.imag(HMC))), rowvar=False)
    UH = make_semiposdef(UH)
    assert_allclose(
        UH,
        np.load(
            os.path.join(reference_array_path, "test_LSFIR_UH.npz"),
        )["UH"],
        atol=1,
    )
    return {"H": H, "uAbs": uAbs, "uPhas": uPhas, "UH": UH}