예제 #1
0
def direct_shift(x, a, period=None):
    n = len(x)
    if period is None:
        k = fftfreq(n) * 1j * n
    else:
        k = fftfreq(n) * 2j * pi / period * n
    return ifft(fft(x) * exp(k * a)).real
예제 #2
0
 def test_definition(self):
     x = [0, 1, 2, 3, 4, -4, -3, -2, -1]
     assert_array_almost_equal(9 * fftfreq(9), x)
     assert_array_almost_equal(9 * pi * fftfreq(9, pi), x)
     x = [0, 1, 2, 3, 4, -5, -4, -3, -2, -1]
     assert_array_almost_equal(10 * fftfreq(10), x)
     assert_array_almost_equal(10 * pi * fftfreq(10, pi), x)
예제 #3
0
def direct_itilbert(x, h=1, period=None):
    fx = fft(x)
    n = len(fx)
    if period is None:
        period = 2 * pi
    w = fftfreq(n) * h * 2 * pi / period * n
    w = -1j * tanh(w)
    return ifft(w * fx)
예제 #4
0
def direct_tilbert(x, h=1, period=None):
    fx = fft(x)
    n = len(fx)
    if period is None:
        period = 2 * pi
    w = fftfreq(n) * h * 2 * pi / period * n
    w[0] = 1
    w = 1j / tanh(w)
    w[0] = 0j
    return ifft(w * fx)
예제 #5
0
def direct_diff(x, k=1, period=None):
    fx = fft(x)
    n = len(fx)
    if period is None:
        period = 2 * pi
    w = fftfreq(n) * 2j * pi / period * n
    if k < 0:
        w = 1 / w**k
        w[0] = 0.0
    else:
        w = w**k
    if n > 2000:
        w[250:n - 250] = 0.0
    return ifft(w * fx).real
예제 #6
0
def direct_hilbert(x):
    fx = fft(x)
    n = len(fx)
    w = fftfreq(n) * n
    w = 1j * sign(w)
    return ifft(w * fx)