# fftn

N-D fast Fourier transform

## Description

`Y = fftn(`

returns
the multidimensional
Fourier transform of an N-D array using a fast Fourier transform
algorithm. The N-D transform is equivalent to computing the 1-D transform
along each dimension of `X`

)`X`

. The output `Y`

is
the same size as `X`

.

`Y = fftn(`

truncates `X`

,`sz`

)`X`

or
pads `X`

with trailing zeros before taking the transform
according to the elements of the vector `sz`

. Each
element of `sz`

defines the length of the corresponding
transform dimensions. For example, if `X`

is a 5-by-5-by-5
array, then `Y = fftn(X,[8 8 8])`

pads each dimension
with zeros resulting in an 8-by-8-by-8 transform `Y`

.

## Examples

### 3-D Transform

You can use the `fftn`

function to compute a 1-D fast Fourier transform in each dimension of a multidimensional array.

Create a 3-D signal `X`

. The size of `X`

is 20-by-20-by-20.

x = (1:20)'; y = 1:20; z = reshape(1:20,[1 1 20]); X = cos(2*pi*0.01*x) + sin(2*pi*0.02*y) + cos(2*pi*0.03*z);

Compute the 3-D Fourier transform of the signal, which is also a 20-by-20-by-20 array.

Y = fftn(X);

Pad `X`

with zeros to compute a 32-by-32-by-32 transform.

m = nextpow2(20); Y = fftn(X,[2^m 2^m 2^m]); size(Y)

`ans = `*1×3*
32 32 32

## Input Arguments

`X`

— Input array

matrix | multidimensional array

Input array, specified as a matrix or a multidimensional array.
If `X`

is of type `single`

, then `fftn`

natively
computes in single precision, and `Y`

is also of
type `single`

. Otherwise, `Y`

is
returned as type `double`

.

**Data Types: **`double`

| `single`

| `int8`

| `int16`

| `int32`

| `uint8`

| `uint16`

| `uint32`

| `logical`

**Complex Number Support: **Yes

`sz`

— Length of transform dimensions

vector of positive integers

Length of the transform dimensions, specified as a vector of positive integers. The elements
of `sz`

correspond to the transformation lengths of the
corresponding dimensions of `X`

.
`length(sz)`

must be at least
`ndims(X)`

.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `uint8`

| `uint16`

| `uint32`

| `logical`

## More About

### N-D Fourier Transform

The discrete Fourier transform *Y* of
an *N*-D array *X* is defined as

$${Y}_{{p}_{1},{p}_{2},\mathrm{...},{p}_{N}}={\displaystyle \sum _{{j}_{1}=0}^{{m}_{1}-1}{\omega}_{{m}_{1}}^{{p}_{1}{j}_{1}}{\displaystyle \sum _{{j}_{2}=0}^{{m}_{2}-1}{\omega}_{{m}_{2}}^{{p}_{2}{j}_{2}}\mathrm{...}{\displaystyle \sum _{{j}_{N}}^{{m}_{N}-1}{\omega}_{{m}_{N}}^{{p}_{N}{j}_{N}}{X}_{{j}_{1},{j}_{2},\mathrm{...},{j}_{N}}}}.}$$

Each dimension has length *m _{k}* for

*k*= 1,2,...,

*N*, and $${\omega}_{{m}_{k}}={e}^{-2\pi i/{m}_{k}}$$ are complex roots of unity where

*i*is the imaginary unit.

## Extended Capabilities

### C/C++ Code Generation

Generate C and C++ code using MATLAB® Coder™.

Usage notes and limitations:

The

`sz`

argument must have a fixed size.For MEX output, MATLAB

^{®}Coder™ uses the library that MATLAB uses for FFT algorithms. For standalone C/C++ code, by default, the code generator produces code for FFT algorithms instead of producing FFT library calls. To generate calls to a specific installed FFTW library, provide an FFT library callback class. For more information about an FFT library callback class, see`coder.fftw.StandaloneFFTW3Interface`

(MATLAB Coder).For simulation of a MATLAB Function block, the simulation software uses the library that MATLAB uses for FFT algorithms. For C/C++ code generation, by default, the code generator produces code for FFT algorithms instead of producing FFT library calls. To generate calls to a specific installed FFTW library, provide an FFT library callback class. For more information about an FFT library callback class, see

`coder.fftw.StandaloneFFTW3Interface`

(MATLAB Coder).Using the Code Replacement Library (CRL), you can generate optimized code that runs on ARM

^{®}Cortex^{®}-A processors with Neon extension. To generate this optimized code, you must install the Embedded Coder^{®}Support Package for ARM Cortex-A Processors (Embedded Coder). The generated code for ARM Cortex-A uses the Ne10 library. For more information, see Ne10 Conditions for MATLAB Functions to Support ARM Cortex-A Processors (Embedded Coder).Using the Code Replacement Library (CRL), you can generate optimized code that runs on ARM Cortex-M processors. To generate this optimized code, you must install the Embedded Coder Support Package for ARM Cortex-M Processors (Embedded Coder). The generated code for ARM Cortex-M uses the CMSIS library. For more information, see CMSIS Conditions for MATLAB Functions to Support ARM Cortex-M Processors (Embedded Coder).

### GPU Code Generation

Generate CUDA® code for NVIDIA® GPUs using GPU Coder™.

Usage notes and limitations:

The

`sz`

argument must have a fixed size.

### Thread-Based Environment

Run code in the background using MATLAB® `backgroundPool`

or accelerate code with Parallel Computing Toolbox™ `ThreadPool`

.

This function fully supports thread-based environments. For more information, see Run MATLAB Functions in Thread-Based Environment.

### GPU Arrays

Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.

Usage notes and limitations:

The output

`Y`

is always complex even if all the imaginary parts are zero.

For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).

### Distributed Arrays

Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.

This function fully supports distributed arrays. For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).

## Version History

**Introduced before R2006a**

## Open Example

You have a modified version of this example. Do you want to open this example with your edits?

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)