from fft import fft from bits import bitrev, bitlen t = [ 1+2j, 3+4j ] # since fft() overwrites the input values, to keep the original t # we have to explicitly copy the values, not the complex objects # x = [complex(t[i].real,t[i].imag) for i in range(len(t))] print( "x =", x) fft(x,pre=False) print( "fft(x,pre=False) =", x) # precompute W # x = [complex(t[i].real,t[i].imag) for i in range(len(t))] print( "\nx =", x) fft(x) print( "fft(x) =", x) # use precomputed W # x = [complex(t[i].real,t[i].imag) for i in range(len(t))] print( "\nx =", x) fft(x) print( "fft(x) =", x) # conjugate W # print( "\nx =", x) fft(x,inv=True) print( "fft(x,inv=True) =", x) # x size change, should precompute new W # t = [ 1+2j, 3+4j, 3+4j, 1+2j ] x = [complex(t[i].real,t[i].imag) for i in range(len(t))] print( "\nx =", x) fft(x) print( "fft(x) =", x) # test inverse # N = len(x) nbits = bitlen(N-1) y = [x[bitrev(i,nbits)] for i in range(N)] print( "\ny =", y) fft(y,inv=True) print( "fft(y,inv=True) =", y) z = [y[bitrev(i,nbits)]/N for i in range(N)] print( "z =", z)