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")
#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:
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)