<!--
{
  "documentType" : "article",
  "framework" : "Accelerate",
  "identifier" : "/documentation/Accelerate/out-of-place-functions-for-1d-complex-fft",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Out-of-Place Functions for 1D Complex FFT"
}
-->

# Out-of-Place Functions for 1D Complex FFT

Perform fast Fourier transforms out of place on 1D complex data.

## Discussion

The functions in this group use the following operation for a complex-to-complex transform:

```c
N = 1 << Log2N;

scale = 0 < Direction ? 1 : 1./N;

// Define a complex vector, h:
for (j = 0; j < N; ++j)
    h[j] = A->realp[j*IA] + i * A->imagp[j*IA];

// Perform Discrete Fourier Transform.
for (k = 0; k < N; ++k)
    H[k] = scale * sum(h[j] * e**(-Direction*2*pi*i*j*k/N), 0 <= j < N);

// Store result.
for (k = 0; k < N; ++k)
{
    C->realp[k*IC] = Re(H[k]);
    C->imagp[k*IC] = Im(H[k]);
}
```

The temporary buffer versions perform the same operation but use a temporary buffer for improved performance.

## Topics

### Out-of-Place FFT Functions

[`extern void vDSP_fft_zop(FFTSetup __Setup, const DSPSplitComplex *__A, vDSP_Stride __IA, const DSPSplitComplex *__C, vDSP_Stride __IC, vDSP_Length __Log2N, FFTDirection __Direction);`](/documentation/Accelerate/vDSP_fft_zop)

Computes a forward or inverse out-of-place, single-precision complex FFT.

[`extern void vDSP_fft_zopD(FFTSetupD __Setup, const DSPDoubleSplitComplex *__A, vDSP_Stride __IA, const DSPDoubleSplitComplex *__C, vDSP_Stride __IC, vDSP_Length __Log2N, FFTDirection __Direction);`](/documentation/Accelerate/vDSP_fft_zopD)

Computes a forward or inverse out-of-place, double-precision complex FFT.

### Out-of-Place FFT Functions with Temporary Buffer

[`extern void vDSP_fft_zopt(FFTSetup __Setup, const DSPSplitComplex *__A, vDSP_Stride __IA, const DSPSplitComplex *__C, vDSP_Stride __IC, const DSPSplitComplex *__Buffer, vDSP_Length __Log2N, FFTDirection __Direction);`](/documentation/Accelerate/vDSP_fft_zopt)

Computes a forward or inverse out-of-place, single-precision complex FFT using a temporary buffer.

[`extern void vDSP_fft_zoptD(FFTSetupD __Setup, const DSPDoubleSplitComplex *__A, vDSP_Stride __IA, const DSPDoubleSplitComplex *__C, vDSP_Stride __IC, const DSPDoubleSplitComplex *__Buffer, vDSP_Length __Log2N, FFTDirection __Direction);`](/documentation/Accelerate/vDSP_fft_zoptD)

Computes a forward or inverse out-of-place, double-precision complex FFT using a temporary buffer.

### Fixed-Length FFT Functions

[`void vDSP_FFT16_copv(float *__Output, const float *__Input, FFTDirection __Direction);`](/documentation/Accelerate/vDSP_FFT16_copv)

Performs a 16-element FFT on interleaved-complex data.

[`void vDSP_FFT32_copv(float *__Output, const float *__Input, FFTDirection __Direction);`](/documentation/Accelerate/vDSP_FFT32_copv)

Performs a 32-element FFT on interleaved-complex data.

[`void vDSP_FFT16_zopv(float *__Or, float *__Oi, const float *__Ir, const float *__Ii, FFTDirection __Direction);`](/documentation/Accelerate/vDSP_FFT16_zopv)

Performs a 16-element FFT on split-complex data.

[`void vDSP_FFT32_zopv(float *__Or, float *__Oi, const float *__Ir, const float *__Ii, FFTDirection __Direction);`](/documentation/Accelerate/vDSP_FFT32_zopv)

Performs a 32-element FFT on split-complex data.

### Radix 3 and Radix 5 FFT Functions

[`extern void vDSP_fft3_zop(FFTSetup __Setup, const DSPSplitComplex *__A, vDSP_Stride __IA, const DSPSplitComplex *__C, vDSP_Stride __IC, vDSP_Length __Log2N, FFTDirection __Direction);`](/documentation/Accelerate/vDSP_fft3_zop)

Computes a single-precision out-of-place radix-3 complex FFT, either forward or inverse.

[`extern void vDSP_fft3_zopD(FFTSetupD __Setup, const DSPDoubleSplitComplex *__A, vDSP_Stride __IA, const DSPDoubleSplitComplex *__C, vDSP_Stride __IC, vDSP_Length __Log2N, FFTDirection __Direction);`](/documentation/Accelerate/vDSP_fft3_zopD)

Computes a double-precision out-of-place radix-3 complex FFT, either forward or inverse.

[`extern void vDSP_fft5_zop(FFTSetup __Setup, const DSPSplitComplex *__A, vDSP_Stride __IA, const DSPSplitComplex *__C, vDSP_Stride __IC, vDSP_Length __Log2N, FFTDirection __Direction);`](/documentation/Accelerate/vDSP_fft5_zop)

Computes a single-precision out-of-place radix-5 complex FFT, either forward or inverse.

[`extern void vDSP_fft5_zopD(FFTSetupD __Setup, const DSPDoubleSplitComplex *__A, vDSP_Stride __IA, const DSPDoubleSplitComplex *__C, vDSP_Stride __IC, vDSP_Length __Log2N, FFTDirection __Direction);`](/documentation/Accelerate/vDSP_fft5_zopD)

Computes a double-precision out-of-place radix-5 complex FFT, either forward or inverse.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)