RunMat
GitHub

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

NameTypeRequiredDefaultDescription
XAnyYesInput signal/array.
NNumericScalarNo[]Transform length along selected dimension.
DIMNumericScalarNofirst non-singleton dimensionDimension to transform along.

Returns

NameTypeDescription
YNumericArrayComplex Fourier spectrum output.

Errors

IdentifierWhenMessage
RunMat:fft:ArgCountMore than three input arguments are supplied.fft: expected fft(X), fft(X, N), or fft(X, N, DIM)
RunMat:fft:InvalidLengthLength argument N is invalid.fft: invalid length argument
RunMat:fft:InvalidDimensionDimension argument DIM is invalid.fft: invalid dimension argument

How fft works

  • fft(X) transforms along the first dimension whose size is greater than 1.
  • fft(X, n) zero-pads or truncates X to length n before transforming along the default dimension.
  • fft(X, n, dim) applies the transform along dimension dim.
  • Real inputs produce complex outputs; complex inputs are handled element-wise with no additional conversion.
  • Empty inputs remain empty; zero-padding with n produces 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 - 2i

Applying 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 + 0i

Zero-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.

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

Signal

blackman · butter · conv · conv2 · deconv · filter · hamming · hann · sawtooth · sinc · square

Rounding

ceil · fix · floor · mod · rem · round

Factor

chol · eig · lu · qr · svd

Solve

cond · det · inv · linsolve · norm · pinv · rank · rcond · rref

Interpolation

interp1 · interp2 · pchip · ppval · spline

Ode

ode15s · ode23 · ode45

Open-source implementation

Unlike proprietary runtimes, every RunMat function is open-source. Read exactly how fft is executed, line by line, in Rust.

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.

Getting started · Benchmarks · Pricing

Download RunMat

Download RunMat for full performance, or use RunMat in your browser for zero setup.