def test_ipdft(self): """correctly compute integer discrete fourier transform""" s = [0, 1, 0, -1, 0, 1, 0, -1] X, periods = ipdft(s, llim=1, ulim=len(s)) exp_X = abs(array([0, 0, -1.5+0.866j, -4j, 2.927-0.951j, 1.5+0.866j, 0.302+0.627j, 0])) X = abs(X) self.assertFloatEqual(X, exp_X, eps=1e-3) ipdft_x, ipdft_periods = ipdft(self.sig, llim=2, ulim=50) ipdft_x = abs(ipdft_x) max_idx = list(ipdft_x).index(max(ipdft_x)) ipdft_p = ipdft_periods[max_idx] self.assertEqual(ipdft_p, self.p)
def test_hybrid_returns_all(self): """correctly returns hybrid, ipdft and autocorr statistics""" ipdft_pwr, ipdft_prd = ipdft(self.sig, llim=2, ulim=50) auto_x, auto_periods = auto_corr(self.sig, llim=2, ulim=50) hybrid_x, hybrid_periods = hybrid(self.sig, llim=None, ulim=50) hybrid_ipdft_autocorr_stats, hybrid_periods = hybrid(self.sig, llim=None, ulim=50, return_all=True) self.assertEqual(hybrid_ipdft_autocorr_stats[0], hybrid_x) self.assertEqual(hybrid_ipdft_autocorr_stats[1], ipdft_pwr) self.assertEqual(hybrid_ipdft_autocorr_stats[2], auto_x) ipdft_pwr, ipdft_prd = ipdft(self.sig, llim=10, ulim=10) auto_x, auto_periods = auto_corr(self.sig, llim=10, ulim=10) hybrid_x, hybrid_periods = hybrid(self.sig, llim=10, ulim=10) hybrid_ipdft_autocorr_stats, hybrid_periods = hybrid(self.sig, llim=10, ulim=10, return_all=True) self.assertEqual(hybrid_ipdft_autocorr_stats[0], hybrid_x) self.assertEqual(hybrid_ipdft_autocorr_stats[1], ipdft_pwr) self.assertEqual(hybrid_ipdft_autocorr_stats[2], auto_x)
def test_g_statitic(self): """calc g-stat correctly""" X, periods = ipdft(self.sig, llim=2, ulim=39) g_obs, p_val = g_statistic(X) self.assertFloatEqual(p_val, 0.9997, eps=1e-3) self.assertFloatEqual(g_obs, 0.0577, eps=1e-3)
def test_goertzel(self): """goertzel and ipdft should be the same""" ipdft_pwr, ipdft_prd = ipdft(self.sig, llim=10, ulim=10) self.assertFloatEqual(goertzel(self.sig, 10), ipdft_pwr)