<!--
{
  "availability" : [
    "iOS: 15.0.0 -",
    "iPadOS: 15.0.0 -",
    "macCatalyst: -",
    "macOS: 12.0.0 -",
    "tvOS: 15.0.0 -",
    "visionOS: -",
    "watchOS: 8.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Accelerate",
  "identifier" : "/documentation/Accelerate/vDSP/DiscreteFourierTransform",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Accelerate"
    ],
    "preciseIdentifier" : "s:10Accelerate4vDSPO24DiscreteFourierTransformC"
  },
  "title" : "vDSP.DiscreteFourierTransform"
}
-->

# vDSP.DiscreteFourierTransform

An object that provides forward and inverse discrete Fourier transforms on single- or double-precision collections of interleaved or split-complex data.

```
class DiscreteFourierTransform<T> where T : vDSP_DiscreteFourierTransformable
```

## Overview

Use a [`vDSP.DiscreteFourierTransform`](/documentation/Accelerate/vDSP/DiscreteFourierTransform) to perform discrete Fourier transforms (DFTs) on split-complex or interleaved data. To learn more about working with split-complex and interleaved data, see <doc://com.apple.documentation/documentation/Accelerate/performing-fourier-transforms-on-interleaved-complex-data>.

To create a [`vDSP.DiscreteFourierTransform`](/documentation/Accelerate/vDSP/DiscreteFourierTransform) instance to work with interleaved data, pass either [`DSPComplex`](/documentation/Accelerate/DSPComplex) or [`DSPDoubleComplex`](/documentation/Accelerate/DSPDoubleComplex) to [`init(previous:count:direction:transformType:ofType:)`](/documentation/Accelerate/vDSP/DiscreteFourierTransform/init(previous:count:direction:transformType:ofType:)). The following code shows how to perform a forward complex-to-complex DFT on the interleaved single-precision values in the `interleavedInput` array:

```swift
// The `interleavedInput` array contains `complexValuesCount` `DSPComplex` elements.
let interleavedInput: [DSPComplex] = [ ... ]

let interleavedDFT = try? vDSP.DiscreteFourierTransform(previous: nil,
                                                        count: complexValuesCount,
                                                        direction: .forward,
                                                        transformType: .complexComplex,
                                                        ofType: DSPComplex.self)

// On return, the `interleavedOutput` array contains an array of `DSPComplex`
// structures.
let interleavedOutput = interleavedDFT?.transform(input: interleavedInput)
```

To create a [`vDSP.DiscreteFourierTransform`](/documentation/Accelerate/vDSP/DiscreteFourierTransform) instance to work with split-complex data, pass either <doc://com.apple.documentation/documentation/Swift/Float> or <doc://com.apple.documentation/documentation/Swift/Double> to [`init(previous:count:direction:transformType:ofType:)`](/documentation/Accelerate/vDSP/DiscreteFourierTransform/init(previous:count:direction:transformType:ofType:)). Split-complex data stores the real and imaginary parts of each complex value in separate arrays. The following code shows how to perform forward complex-to-complex DFT on the split-complex single-precision values in the `splitComplexRealInput` and `splitComplexImaginaryInput` arrays:

```swift
var splitComplexRealInput: [Float] = [ ... ]
var splitComplexImaginaryInput: [Float] = [ ... ]

let splitComplexDFT = try? vDSP.DiscreteFourierTransform(previous: nil,
                                                         count: complexValuesCount,
                                                         direction: .forward,
                                                         transformType: .complexComplex,
                                                         ofType: Float.self)

// The `splitComplexOutput` tuple contains two arrays that represent the
// real and imaginary parts of the output.
let splitComplexOutput = splitComplexDFT?.transform(real: splitComplexRealInput,
                                                    imaginary: splitComplexImaginaryInput)
```

If the underlying data in both the `interleavedInput` array and the split-complex input arrays is the same, for each `i` in `0 ..< complexValuesCount`, the following is true`:`

```c
interleavedOutput[i].real ≈ splitComplexOutput.real[i]
interleavedOutput[i].imag ≈ splitComplexOutput.imaginary[i]
```

``

## Topics

### Creating a Discrete Fourier Transform Instance

[`init(previous:count:direction:transformType:ofType:)`](/documentation/Accelerate/vDSP/DiscreteFourierTransform/init(previous:count:direction:transformType:ofType:))

Returns a new discrete Fourier transform instance.

### Performing Split-Complex Discrete Fourier Transforms

[`transform(real:imaginary:)`](/documentation/Accelerate/vDSP/DiscreteFourierTransform/transform(real:imaginary:)-4nwy9)

Returns the result of a single-precision discrete Fourier transform.

[`transform(real:imaginary:)`](/documentation/Accelerate/vDSP/DiscreteFourierTransform/transform(real:imaginary:)-82jag)

Returns the result of a double-precision discrete Fourier transform.

[`transform(inputReal:inputImaginary:outputReal:outputImaginary:)`](/documentation/Accelerate/vDSP/DiscreteFourierTransform/transform(inputReal:inputImaginary:outputReal:outputImaginary:)-sihh)

Computes a single-precision discrete Fourier transform.

[`transform(inputReal:inputImaginary:outputReal:outputImaginary:)`](/documentation/Accelerate/vDSP/DiscreteFourierTransform/transform(inputReal:inputImaginary:outputReal:outputImaginary:)-7115x)

Computes a double-precision discrete Fourier transform.

### Performing Interleaved Discrete Fourier Transforms

[`transform(input:)`](/documentation/Accelerate/vDSP/DiscreteFourierTransform/transform(input:)-92b3l)

Returns the result of a single-precision discrete Fourier transform.

[`transform(input:)`](/documentation/Accelerate/vDSP/DiscreteFourierTransform/transform(input:)-5si4h)

Returns the result of a double-precision discrete Fourier transform.

[`transform(input:output:)`](/documentation/Accelerate/vDSP/DiscreteFourierTransform/transform(input:output:)-1k3hd)

Computes a single-precision discrete Fourier transform.

[`transform(input:output:)`](/documentation/Accelerate/vDSP/DiscreteFourierTransform/transform(input:output:)-1tsod)

Computes a double-precision discrete Fourier transform.



---

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)