# FFT Functions¶

## Standard FFTs¶

`cupy.fft.fft` |
Compute the one-dimensional FFT. |

`cupy.fft.ifft` |
Compute the one-dimensional inverse FFT. |

`cupy.fft.fft2` |
Compute the two-dimensional FFT. |

`cupy.fft.ifft2` |
Compute the two-dimensional inverse FFT. |

`cupy.fft.fftn` |
Compute the N-dimensional FFT. |

`cupy.fft.ifftn` |
Compute the N-dimensional inverse FFT. |

## Real FFTs¶

`cupy.fft.rfft` |
Compute the one-dimensional FFT for real input. |

`cupy.fft.irfft` |
Compute the one-dimensional inverse FFT for real input. |

`cupy.fft.rfft2` |
Compute the two-dimensional FFT for real input. |

`cupy.fft.irfft2` |
Compute the two-dimensional inverse FFT for real input. |

`cupy.fft.rfftn` |
Compute the N-dimensional FFT for real input. |

`cupy.fft.irfftn` |
Compute the N-dimensional inverse FFT for real input. |

## Hermitian FFTs¶

`cupy.fft.hfft` |
Compute the FFT of a signal that has Hermitian symmetry. |

`cupy.fft.ihfft` |
Compute the FFT of a signal that has Hermitian symmetry. |

## Helper routines¶

`cupy.fft.fftfreq` |
Return the FFT sample frequencies. |

`cupy.fft.rfftfreq` |
Return the FFT sample frequencies for real input. |

`cupy.fft.fftshift` |
Shift the zero-frequency component to the center of the spectrum. |

`cupy.fft.ifftshift` |
The inverse of `fftshift()` . |

## Normalization¶

The default normalization has the direct transforms unscaled and the inverse transforms are scaled by \(1/n\).
If the ketyword argument `norm`

is `"ortho"`

, both transforms will be scaled by \(1/\sqrt{n}\).

## Code compatibility features¶

FFT functions of NumPy alway return numpy.ndarray which type is `numpy.complex128`

or `numpy.float64`

.
CuPy functions do not follow the behavior, they will return `numpy.complex64`

or `numpy.float32`

if the type of the input is `numpy.float16`

, `numpy.float32`

, or `numpy.complex64`

.

Internally, `cupy.fft`

always generates a *cuFFT plan* (see the cuFFT documentation for detail) corresponding to the desired transform. When possible, an n-dimensional plan will be used, as opposed to applying separate 1D plans for each axis to be transformed. Using n-dimensional planning can provide better performance for multidimensional transforms, but requires more GPU memory than separable 1D planning. The user can disable n-dimensional planning by setting `cupy.fft.config.enable_nd_planning = False`

. This ability to adjust the planning type is a deviation from the NumPy API, which does not use precomputed FFT plans.

Moreover, the automatic plan generation can be suppressed by using an existing plan returned by `cupyx.scipy.fftpack.get_fft_plan()`

as a context manager. This is again a deviation from NumPy.