def test_iczt(): """Test inverse CZT.""" # Time data t = np.arange(0, 20e-3, 1e-4) dt = t[1] - t[0] Fs = 1 / dt N = len(t) # Signal data def model(t): output = (1.0 * np.sin(2 * np.pi * 1e3 * t) + 0.3 * np.sin(2 * np.pi * 2e3 * t) + 0.1 * np.sin(2 * np.pi * 3e3 * t)) * np.exp(-1e3 * t) return output x = model(t) # CZT (defaults to FFT) X_czt = czt.czt(x) # ICZT x_iczt = czt.iczt(X_czt) # # Debug # import matplotlib.pyplot as plt # plt.figure() # plt.plot(x.real) # plt.plot(x_iczt.real) # plt.figure() # plt.plot(x.imag) # plt.plot(x_iczt.imag) # plt.show() # Compare np.testing.assert_almost_equal(x, x_iczt, decimal=12)
def test_czt_to_iczt(debug=False): print("Test CZT -> ICZT") # Create time-domain signal t = np.arange(0, 20e-3, 1e-4) x = _signal_model(t) # CZT (defaults to FFT) X_czt = czt.czt(x) # ICZT x_iczt1 = czt.iczt(X_czt) x_iczt2 = czt.iczt(X_czt, simple=False) # Try unsupported t_method with pytest.raises(ValueError): czt.iczt(X_czt, simple=False, t_method='unsupported_t_method') # Try M != N with pytest.raises(ValueError): czt.iczt(X_czt, simple=False, N=len(X_czt) + 1) # Plot for debugging purposes if debug: plt.figure() plt.title("Imaginary") plt.plot(t * 1e3, x.imag) plt.plot(t * 1e3, x_iczt1.imag) plt.plot(t * 1e3, x_iczt2.imag) plt.figure() plt.title("Real") plt.plot(t * 1e3, x.real) plt.plot(t * 1e3, x_iczt1.real) plt.plot(t * 1e3, x_iczt2.real) plt.show() # Compare np.testing.assert_almost_equal(x, x_iczt1, decimal=12) np.testing.assert_almost_equal(x, x_iczt2, decimal=12)
"""Benchmark czt.iczt function.""" import numpy as np import czt import perfplot def model(t): output = (1.0 * np.sin(2 * np.pi * 1e3 * t) + 0.3 * np.sin(2 * np.pi * 2e3 * t) + 0.1 * np.sin(2 * np.pi * 3e3 * t)) * np.exp(-1e3 * t) return output perfplot.show( setup=lambda n: czt.czt(model(np.linspace(0, 20e-3, n))), kernels=[ lambda a: czt.iczt(a, simple=True), lambda a: czt.iczt(a, simple=False), ], labels=["simple=True", "simple=False"], n_range=[10**k for k in range(1, 8)], xlabel="Input length", # equality_check=np.allclose, equality_check=False, target_time_per_measurement=0.1, )
def test2(): czt.iczt(X, simple=False) return
def test1(): czt.iczt(X, simple=True) return