예제 #1
0
파일: test_model.py 프로젝트: syyunn/KurSL
    def test_method_access_generate(self):
        oscN = 3
        nH = 1
        params = self.generate_params(oscN, nH)
        kursl = KurSL(params)
        model = ModelWrapper(kursl)

        t = np.linspace(0, 1, 200)
        s_kursl = np.array(kursl.generate(t))
        s_model = np.array(model.generate(t))
        self.assertTrue(np.all(s_kursl == s_model),
                        "Both calls should return the same")
예제 #2
0
#oscN = 3
#nH = 2
F = [3., 5, 10]
W = np.array([f * 2 * np.pi for f in F])
R = np.array([1, 2, 1])
Y = np.array([0, 0.5, np.pi])
K = np.array([
    [2.1, 3.2, -2.5, 1.2],
    [-1.2, 0.3, -6.1, -5.2],
    [7.9, 3.4, 0.1, 4.2],
])

params = np.column_stack((W, Y, R, K))

kursl = KurSL(params)
phase, amp, signals = kursl.generate(t)

# Precalculate Fourier transform parameters
freq = np.fft.fftfreq(len(t) - 1, dt)
idx = np.r_[freq >= 0] & np.r_[freq < 20]

f, axes = plt.subplots(3, 2, figsize=(8, 8))
for osc in range(len(W)):
    ax = axes[osc, 0]
    ax.plot(t[:-1], signals[osc], 'b')
    ax.plot(t[:-1], amp[osc], 'r')
    ax.plot(t[:-1], -amp[osc], 'r')

    if osc == 0:
        ax.set_title("Time series")
    elif osc == len(W) - 1:
예제 #3
0
    K_MIN, K_MAX = -5, 5

    # Making sure that there's W_MIN_DIFF between all W
    while True:
        W = np.random.random(oscN) * W_MAX + W_MIN
        if np.all(np.diff(W) > W_MIN_DIFF): break

    R = np.random.random(oscN) * R_MAX + R_MIN
    Y0 = np.random.random(oscN) * Y_MAX + Y_MIN
    K = np.random.random((oscN, nH * (oscN - 1))) * K_MAX + K_MIN
    K[:] = 0.8 * W[:, None] * K / np.sum(K, axis=1)[:, None]

    theta = np.column_stack((W, Y0, R, K))

    kursl = KurSL(theta)
    _, _, s_gen = kursl.generate(t)
    s_gen = np.sum(s_gen, axis=0)
    t = t[:-1]

    ####################################################
    ## Estimate peaks present in signal
    preprocess = Preprocessor(max_osc=oscN, nH=nH)
    theta_init = preprocess.compute_prior(t, s_gen)
    peaks = theta_init[:, 0] * 0.5 / np.pi

    ####################################################
    ## Plot extracted frequencies in spectrum
    plt.figure()

    freq = np.fft.fftfreq(len(t), dt)
    f_min = max(0, W_MIN / 6.28 - 2)