|
| 1 | +#!/usr/bin/env python3 |
| 2 | +# |
| 3 | +# Tests the datkit spectral analysis methods. |
| 4 | +# |
| 5 | +# This file is part of Datkit. |
| 6 | +# For copyright, sharing, and licensing, see https://github.com/myokit/datkit/ |
| 7 | +# |
| 8 | +import unittest |
| 9 | + |
| 10 | +import numpy as np |
| 11 | + |
| 12 | +import datkit as d |
| 13 | + |
| 14 | + |
| 15 | +class SpectralTest(unittest.TestCase): |
| 16 | + """ Tests methods from the hidden _spectral module. """ |
| 17 | + |
| 18 | + def test_amplitude_spectrum(self): |
| 19 | + |
| 20 | + t = np.linspace(0, 10, 1000) |
| 21 | + v = 3 * np.sin(t * (2 * np.pi * 3)) + 10 * np.cos(t * (2 * np.pi * 7)) |
| 22 | + f, a = d.amplitude_spectrum(t, v) |
| 23 | + self.assertAlmostEqual(f[30], 2.997) |
| 24 | + self.assertAlmostEqual(f[70], 6.993) |
| 25 | + self.assertLess(a[29], 0.1) |
| 26 | + self.assertAlmostEqual(a[30], 3, 0) |
| 27 | + self.assertLess(a[31], 0.1) |
| 28 | + self.assertLess(a[69], 1) |
| 29 | + self.assertAlmostEqual(a[70], 10, 0) |
| 30 | + self.assertLess(a[71], 1) |
| 31 | + |
| 32 | + t = np.linspace(0, 10, 1235) |
| 33 | + v = 6 * np.sin(t * (2 * np.pi * 2)) + 4 * np.cos(t * (2 * np.pi * 5)) |
| 34 | + f, a = d.amplitude_spectrum(t, v) |
| 35 | + self.assertAlmostEqual(f[20], 1.998, 3) |
| 36 | + self.assertAlmostEqual(f[50], 4.996, 3) |
| 37 | + self.assertLess(a[19], 0.11) |
| 38 | + self.assertAlmostEqual(a[20], 6, 0) |
| 39 | + self.assertLess(a[21], 0.11) |
| 40 | + self.assertLess(a[49], 0.2) |
| 41 | + self.assertAlmostEqual(a[50], 4, 0) |
| 42 | + self.assertLess(a[51], 0.2) |
| 43 | + |
| 44 | + def test_power_spectral_density(self): |
| 45 | + |
| 46 | + t = np.linspace(0, 10, 1000) |
| 47 | + v = 3 * np.sin(t * (2 * np.pi)) + 7 * np.cos(t * (2 * np.pi * 3)) |
| 48 | + f, psd = d.power_spectral_density(t, v) |
| 49 | + self.assertAlmostEqual(f[10], 0.999, 3) |
| 50 | + self.assertAlmostEqual(f[30], 2.997, 3) |
| 51 | + |
| 52 | + self.assertLess(psd[9], 0.01) |
| 53 | + self.assertAlmostEqual(psd[10], 45, 1) |
| 54 | + self.assertLess(psd[11], 0.01) |
| 55 | + self.assertLess(psd[29], 0.3) |
| 56 | + self.assertAlmostEqual(psd[30], 245, 0) |
| 57 | + self.assertLess(psd[31], 0.3) |
| 58 | + |
| 59 | + |
| 60 | +if __name__ == '__main__': |
| 61 | + unittest.main() |
0 commit comments