コード例 #1
0
ファイル: test_czt.py プロジェクト: z9876/CZT
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)
コード例 #2
0
ファイル: test_czt.py プロジェクト: PuhlUP/CZT
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)
コード例 #3
0
"""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,
)
コード例 #4
0
def test2():
    czt.iczt(X, simple=False)
    return
コード例 #5
0
def test1():
    czt.iczt(X, simple=True)
    return