def test_AR_LD(): """ Test the Levinson Durbin estimate of the AR coefficients against the expercted PSD """ arsig, _, _ = utils.ar_generator(N=512) avg_pwr = (arsig * arsig.conjugate()).real.mean() order = 8 ak, sigma_v = tsa.AR_est_LD(arsig, order) w, psd = tsa.AR_psd(ak, sigma_v) # the psd is a one-sided power spectral density, which has been # multiplied by 2 to preserve the property that # 1/2pi int_{-pi}^{pi} Sxx(w) dw = Rxx(0) # evaluate this integral numerically from 0 to pi dw = np.pi / len(psd) avg_pwr_est = np.trapz(psd, dx=dw) / (2 * np.pi) npt.assert_almost_equal(avg_pwr, avg_pwr_est, decimal=0) # Test for providing the autocovariance as an input: ak, sigma_v = tsa.AR_est_LD(arsig, order, utils.autocov(arsig)) w, psd = tsa.AR_psd(ak, sigma_v) avg_pwr_est = np.trapz(psd, dx=dw) / (2 * np.pi) npt.assert_almost_equal(avg_pwr, avg_pwr_est, decimal=0)
def test_AR_est_consistency(): order = 10 # some even number ak = _random_poles(order // 2) x, v, _ = utils.ar_generator(N=512, coefs=-ak[1:], drop_transients=100) ak_yw, ssq_yw = tsa.AR_est_YW(x, order) ak_ld, ssq_ld = tsa.AR_est_LD(x, order) npt.assert_almost_equal(ak_yw, ak_ld) npt.assert_almost_equal(ssq_yw, ssq_ld)