implement DiscreteFourierTransform