Exemplo n.º 1
0
    def test_compute_prior_energy_ratio(self):
        "Currently almost copy of test_determine_params_*"
        pi2 = np.pi * 2
        t = np.arange(0, 5, 0.001)
        c1 = self._cos(t, 2, 2, 0)
        c2 = self._cos(t, 5, 1.1, 1.5)
        c3 = self._cos(t, 8, 6, np.pi)  # Highest amplitude
        c4 = self._cos(t, 15, 3, 0)
        S = c1 + c2 + c3 + c4

        mid_energy = 0.5
        preprocessor = Preprocessor(energy_ratio=mid_energy)
        params = preprocessor.compute_prior(t, S)
        self.assertEqual(len(params), 2, "Two oscillators identified")
        self.assertTrue(
            abs(params[0, 0] - 15 * pi2) < 0.05,
            "Expected {} rad/s, Got {} [rad/s]: ".format(
                15 * pi2, params[0, 0] * pi2))
        self.assertTrue(
            abs(params[1, 0] - 8 * pi2) < 0.05,
            "Expected {} rad/s, Got {} [rad/s]: ".format(
                8 * pi2, params[1, 0] * pi2))

        low_energy = 0.1
        preprocessor = Preprocessor(energy_ratio=low_energy)
        params = preprocessor.compute_prior(t, S)
        self.assertEqual(len(params), 4, "All oscillators identified")
        self.assertTrue(
            abs(params[0, 0] - 15 * pi2) < 0.05, "First osc with 15 Hz")
        self.assertTrue(
            abs(params[1, 0] - 8 * pi2) < 0.05, "Second osc with 8 Hz")
        self.assertTrue(
            abs(params[2, 0] - 5 * pi2) < 0.05, "Third osc with 5 Hz")
        self.assertTrue(
            abs(params[3, 0] - 2 * pi2) < 0.05, "Fourth osc with 2 Hz")
Exemplo n.º 2
0
    def test_compute_prior_1_oscillator(self):
        "Currently almost copy of test_determine_params_*"
        t = np.arange(0, 5, 0.001)
        c1 = self._cos(t, 2, 2, 0)
        c2 = self._cos(t, 5, 1.1, 1.5)
        S = c1 + c2

        max_osc = 1
        preprocessor = Preprocessor(max_osc=max_osc)
        with self.assertRaises(Exception) as context:
            preprocessor.compute_prior(t, S)

        self.assertTrue("Single oscillator detected" in str(context.exception))
Exemplo n.º 3
0
    def test_compute_prior_max_oscillators(self):
        "Currently almost copy of test_determine_params_*"
        t = np.arange(0, 5, 0.001)
        c1 = self._cos(t, 2, 2, 0)
        c2 = self._cos(t, 5, 1.1, 1.5)
        c3 = self._cos(t, 8, 6, np.pi)  # Highest amplitude
        c4 = self._cos(t, 15, 3, 0)
        S = c1 + c2 + c3 + c4

        max_osc_2 = 2
        preprocessor = Preprocessor(max_osc=max_osc_2)
        params = preprocessor.compute_prior(t, S)
        self.assertEqual(len(params), max_osc_2, "Two oscillators identified")

        max_osc_3 = 3
        preprocessor = Preprocessor(max_osc=max_osc_3)
        params = preprocessor.compute_prior(t, S)
        self.assertEqual(len(params), max_osc_3,
                         "Three oscillators identified")
Exemplo n.º 4
0
    def test_compute_prior_custom_nH(self):
        "Currently almost copy of test_determine_params_*"
        t = np.arange(0, 5, 0.001)
        c1 = self._cos(t, 2, 2, 0)
        c2 = self._cos(t, 5, 1.1, 1)
        S = c1 + c2

        preprocessor = Preprocessor(nH=3)
        params = preprocessor.compute_prior(t, S)
        # Testing for number
        self.assertEqual(params.shape, (2, 6),
                         "Two oscillators (W, ph, A, K1, K2, K3)")
        # Testing for coupling
        self.assertTrue(np.all(params[:, 3:] == 0),
                        "All couplings should be zero")
Exemplo n.º 5
0
    def test_compute_prior_default(self):
        "Currently almost copy of test_determine_params_*"
        pi2 = np.pi * 2
        t = np.arange(0, 5, 0.001)
        c1 = self._cos(t, 2, 2, 0)
        c2 = self._cos(t, 5, 1.1, 1)
        S = c1 + c2

        preprocessor = Preprocessor()
        params = preprocessor.compute_prior(t, S)
        params[:, 1] = (params[:, 1] + pi2) % pi2

        # Testing for number
        self.assertEqual(params.shape, (2, 4), "Two oscillators (W, ph, A, K)")

        # Testing for frequency
        self.assertTrue(
            abs(params[0, 0] - 5 * pi2) < 0.05,
            "Expected {} rad/s, Got {} [rad/s]".format(5 * pi2, params[0, 0]))
        self.assertTrue(
            abs(params[1, 0] - 2 * pi2) < 0.05,
            "Expected {} rad/s, Got {} [rad/s]".format(2 * pi2, params[1, 0]))

        # Testing for phase
        self.assertTrue(
            abs(params[0, 1] - 1) < 0.001,
            "Expected phase {}, Got {}.".format(1, params[0, 1]))
        self.assertTrue(
            abs(params[1, 1] - 0) < 0.001,
            "Expected phase {}, Got {}.".format(0, params[1, 1]))

        # Testing for amplitude
        self.assertTrue(
            abs(params[0, 2] - 1.1) < 0.1,
            "Expected amp {}, Got {}.".format(1.1, params[0, 2]))
        self.assertTrue(
            abs(params[1, 2] - 2) < 0.1,
            "Expected amp {}, Got {}.".format(2, params[1, 2]))

        # Testing for coupling
        self.assertEqual(params[0, 3], 0, "First->Second coupling should be 0")
        self.assertEqual(params[1, 3], 0, "Second->First coupling should be 0")