fft — Compute the discrete Fourier transform (DFT) of vectors, matrices, or N-D tensors.
fft(X) computes the discrete Fourier transform (DFT) of the input data. When X is a vector, fft returns the frequency-domain representation of the vector. When X is a matrix or an N-D tensor, the transform is applied along the first non-singleton dimension unless another dimension is specified.
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)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 works, line by line, in Rust.
- View fft.rs on GitHub
- Learn how the 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 — faster, on any GPU, with no license required.
- Simulations that took hours now take minutes. RunMat automatically optimizes your math for GPU execution on Apple, Nvidia, and AMD hardware. No code changes needed.
- Start running code in seconds. Open the browser sandbox or download a single binary. No license server, no IT ticket, no setup.
- A full development environment. GPU-accelerated 2D and 3D plotting, automatic versioning on every save, and a browser IDE you can share with a link.