fft — Compute discrete Fourier transforms in MATLAB and RunMat.
fft(X) computes the discrete Fourier transform of input data. For arrays, it operates along the first non-singleton dimension by default, with explicit length/dimension forms following MATLAB semantics.
Syntax
Y = fft(X)
Y = fft(X, N)
Y = fft(X, N, DIM)Inputs
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
X | Any | Yes | — | Input signal/array. |
N | NumericScalar | No | [] | Transform length along selected dimension. |
DIM | NumericScalar | No | first non-singleton dimension | Dimension to transform along. |
Returns
| Name | Type | Description |
|---|---|---|
Y | NumericArray | Complex Fourier spectrum output. |
Errors
| Identifier | When | Message |
|---|---|---|
RunMat:fft:ArgCount | More than three input arguments are supplied. | fft: expected fft(X), fft(X, N), or fft(X, N, DIM) |
RunMat:fft:InvalidLength | Length argument N is invalid. | fft: invalid length argument |
RunMat:fft:InvalidDimension | Dimension argument DIM is invalid. | fft: invalid dimension argument |
RunMat:fft:InvalidInput | Input cannot be converted to supported numeric/complex domain. | fft: invalid input |
RunMat:fft:Internal | FFT execution or tensor shaping fails. | fft: internal error |
How fft works
fft(X)transforms along the first dimension whose size is greater than 1.fft(X, n)zero-pads or truncatesXto lengthnbefore transforming along the default dimension.fft(X, n, dim)applies the transform along dimensiondim.- Real inputs produce complex outputs; complex inputs are handled element-wise with no additional conversion.
- Empty inputs remain empty; zero-padding with
nproduces zero-valued spectra. - GPU arrays are gathered to the host when the selected provider has no FFT implementation.
Examples
Computing the FFT of a real time-domain vector
x = [1 2 3 4];
Y = fft(x)Expected output:
Y =
Columns 1 through 4
10 + 0i -2 + 2i -2 + 0i -2 - 2iApplying fft column-wise to a matrix
A = [1 2 3; 4 5 6];
F = fft(A)Expected output:
F =
5 + 0i 7 + 0i 9 + 0i
-3 + 0i -3 + 0i -3 + 0iZero-padding before the FFT
x = [1 2 3];
Y = fft(x, 5)Selecting the transform dimension for a row vector
x = [1 2 3 4];
Y = fft(x, [], 2)FFT of a complex-valued signal
t = 0:3;
x = exp(1i * pi/2 * t);
Y = fft(x)FFT with gpuArray inputs
g = gpuArray(rand(1, 1024)); % Residency is on the GPU
G = fft(g); % Falls back to host if provider FFT hooks are unavailable
result = gather(G)Using fft with coding agents
Open a RunMat example with live inputs, then ask the agent to explain how fft changes the result.
Run a small fft example, explain the result, then change one input and compare the output.
FAQ
Does fft always return complex values?⌄
Yes. Even when the imaginary part is zero, the result is stored as a complex array to match MATLAB semantics.
What happens if I pass [] as the second argument?⌄
Passing [] leaves the transform length unchanged. This is equivalent to omitting the n parameter.
Can I transform along a dimension larger than the current rank?⌄
Yes. RunMat automatically treats trailing dimensions as length-1 and will create the requested dimension on output.
How does zero-padding work?⌄
When n is larger than the size of X along the transform dimension, RunMat pads with zeros before evaluating the FFT.
What precision is used for the FFT?⌄
RunMat computes FFTs in double precision on the host. Providers may use single or double precision depending on device capabilities.
Will RunMat run the FFT on my GPU automatically?⌄
When a provider installs an FFT hook, RunMat executes on the GPU. Otherwise, the runtime gathers the data and performs the transform on the CPU.
Is inverse FFT (ifft) available?⌄
ifft will be provided in a companion builtin. Until then, you can recover a time-domain signal by dividing by the length and taking the complex conjugate manually.
How do I compute multi-dimensional FFTs?⌄
Call fft repeatedly along each dimension (fft(fft(X, [], 1), [], 2) for a 2-D FFT). Future releases will add dedicated helpers.
Does fft support complex strides or non-unit sampling intervals?⌄
fft assumes unit spacing. You can multiply the result by appropriate phase factors to account for custom sampling intervals.
Related Math functions
Elementwise
abs · angle · complex · conj · double · exp · expm1 · factorial · gamma · hypot · imag · ldivide · log · log10 · log1p · log2 · minus · nextpow2 · plus · pow2 · power · rdivide · real · sign · single · sqrt · times
Trigonometry
acos · acosh · asin · asinh · atan · atan2 · atanh · cos · cosd · cosh · deg2rad · rad2deg · sin · sind · sinh · tan · tand · tanh
Reduction
all · any · cummax · cummin · cumprod · cumsum · cumtrapz · diff · gradient · max · mean · median · min · nnz · prod · std · sum · trapz · var
Structure
Open-source implementation
Unlike proprietary runtimes, every RunMat function is open-source. Read exactly how fft is executed, line by line, in Rust.
- View the source for fft in Rust on GitHub
- Learn how the RunMat runtime works
- Found a bug? Open an issue with a minimal reproduction.
About RunMat
RunMat is an open-source runtime that executes MATLAB-syntax code blazing on any GPU. It is licensed under the Apache 2.0 license.
- RunMat automatically optimizes your math for GPU execution on Apple, Nvidia, and AMD hardware. No code changes needed. Simulations that took hours now take minutes.
- Start running code in seconds. RunMat runs in the browser, on the desktop, or from the CLI. No license server, no IT ticket.