Documentation

# fftw

Define method for determining FFT algorithm

## Syntax

``method = fftw('planner')``
``previous = fftw('planner',method)``
``fftinfo = fftw(wisdom)``
``previous = fftw(wisdom,fftinfo)``

## Description

````method = fftw('planner')` returns the method that the fast Fourier transform functions `fft`, `fft2`, `fftn`, `ifft`, `ifft2`, and `ifftn` use to determine a transform algorithm. The default method is `'estimate'`, which determines the algorithm based on the size of the data.```

example

````previous = fftw('planner',method)` sets the method and optionally returns the previous method. For example, `fftw('planner','measure')` chooses the fastest algorithm based on the size and type of the data.```

example

````fftinfo = fftw(wisdom)` returns the optimal transform parameters established in the current MATLAB® session for the precision specified in `wisdom`. For example, ```fftinfo = fftw('dwisdom')``` saves the current double-precision transform parameters.```

example

````previous = fftw(wisdom,fftinfo)` applies the parameters in `fftinfo` to the transform algorithm for the precision specified in `wisdom`.```

## Examples

collapse all

The `fftw` function can improve the performance of Fourier transform functions by trying to optimize computation based on the size and type of the data.

Clear any existing double-precision transform parameters.

`fftw('dwisdom',[]);`

Set the method for optimizing Fourier transforms within the current MATLAB® session to `'measure'`.

`fftw('planner','measure');`

Define a random vector and use the `fft` function to compute the Fourier transform. `fft` uses an algorithm that tries to optimize computation for the 500-by-1 transform. The first call to `fft` can be slower than normal, but subsequent calls will be significantly faster.

```X = rand(500,1); tic; fft(X); toc;```
```Elapsed time is 0.011216 seconds. ```
`tic; fft(X); toc;`
```Elapsed time is 0.000126 seconds. ```

Assign the current double-precision transform algorithm parameters to the variable `fftinfo` for later use.

`fftinfo = fftw('dwisdom');`

Apply the parameter information stored in the variable `fftinfo` to future transform function calls.

`fftw('dwisdom',fftinfo);`

## Input Arguments

collapse all

Method for setting transform parameters, specified as one of the following:

• `'estimate'` — Determine a best-guess transform algorithm based on the size of problem.

• `'measure'` — Find a better algorithm by computing multiple transforms and measuring the run times.

• `'patient'` — Run a wider range of testing compared to `'measure'`, resulting in a better transform algorithm, but at the expense of higher computational cost to determine the parameters.

• `'exhaustive'` — Runs all tests including ones unlikely to be optimal, resulting in the best algorithm, but with the highest computational cost to determine the parameters.

• `'hybrid'` — Use a combination of `'measure'` for transforms with dimension length 8192 or smaller and `'estimate'` for transforms with dimension length larger than 8192.

Data Types: `char` | `string`

Transform parameter precision, specified as either `'swisdom'` or `'dwisdom'`. The option `'swisdom'` specifies transform parameters for single-precision computation, and `'dwisdom'` specifies parameters for double-precision computation.

Data Types: `char`

Transform parameters, specified as a character array of transform parameters returned by `fftw(wisdom)` or the empty array `[]`. The empty array `[]` clears the database.

Data Types: `char`

## Tips

• Transform parameters returned by `fftw` are most useful when saved and applied on one computer using the same version of MATLAB each session. Transferring saved parameters between computers can result in degraded performance, even if both computers have the same operating system and MATLAB version.

## Algorithms

• For transform lengths that are powers of 2 between 214 and 222, MATLAB uses pre-loaded information from its internal database to optimize the transform computation. Tuning is not executed for exact powers of 2 unless you clear the database using the command `fftw(wisdom,[])`.