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_YW(): arsig, _, _ = utils.ar_generator(N=512) avg_pwr = (arsig * arsig.conjugate()).mean() order = 8 ak, sigma_v = tsa.AR_est_YW(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) # consistency on the order of 10**0 is pretty good for this test 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_YW(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)