def fft(fx,gamma=0,delta=0,scale=1): from numpy import sqrt, roll, arange, exp, sign from numpy.fft import fft as ft from scipy import pi from spyctral.common.indexing import integer_range try: from pymbolic.algorithm import fft except: from numpy.fft import fft from connection import int_connection N = fx.size if fx.dtype==object: import pymbolic.algorithm as pyalg modes = pyalg.sym_fft(fx)*float(sqrt(2*pi)/N) else: modes = fft(fx)*sqrt(2*pi)/N ks = integer_range(N) modes = roll(modes,N/2) flags = ks!=0 flags2 = ((ks%2)==1) modes[flags] *= exp(-1j*ks[flags]*pi/N) modes[flags2] *= -1 return int_connection(modes,0,0,gamma,delta)
def fft_online(fx,overhead): from numpy.fft import fft as ft from numpy import roll from connection import int_connection_online as int_connection try: from pymbolic.algorithm import fft except: from numpy.fft import fft if fx.dtype==object: modes = fft(fx) else: modes = ft(fx) N = fx.size modes = roll(modes,N/2) modes *= overhead[0] return int_connection(modes,overhead[1])