Skip to content

Signal Processing ​

Discrete transforms for frequency-domain analysis (FFT, real FFT, and DCT).

All methods on this page are instance methods on NDArray.

Global functions

FFT and DCT entry points are also exposed as functions under PhpMlKit\NDArray\Fft (for example, fft($a, …) calls $a->fft(…)). See Global functions — FFT and DCT.

Normalization

Transforms accept a Normalization enum (backward, ortho, forward, none). Default: Normalization::Backward.

Unnormalized transforms (Normalization::None)

Normalization::None returns the raw backend scaling. This is useful for low-level work, but it means round-trips like $x->fft(norm: Normalization::None)->ifft(norm: Normalization::None) will generally return a scaled version of x (not x itself).


fft() ​

php
public function fft(?int $n = null, int $axis = -1, Normalization $norm = Normalization::Backward): NDArray

Complex discrete Fourier transform along one axis. Real inputs are promoted to a complex dtype.

Parameters ​

ParameterTypeDescription
$nint|nullTransform length along axis. If null, uses the current axis length.
$axisintAxis index (negative indices allowed). Default: -1 (last axis).
$normNormalizationNormalization mode. Default: Normalization::Backward.

Returns ​

  • NDArray - Complex array (Complex64 or Complex128).

Examples ​

php
use PhpMlKit\NDArray\NDArray;
use PhpMlKit\NDArray\Normalization;

$x = NDArray::array([0.0, 1.0, 2.0, 3.0]);
$X = $x->fft(norm: Normalization::Backward);

ifft() ​

php
public function ifft(?int $n = null, int $axis = -1, Normalization $norm = Normalization::Backward): NDArray

Inverse complex FFT along one axis.

Parameters ​

ParameterTypeDescription
$nint|nullTransform length along axis. If null, uses the current axis length.
$axisintAxis index (negative indices allowed). Default: -1.
$normNormalizationNormalization mode. Default: Normalization::Backward.

Returns ​

  • NDArray - Complex array.

Examples ​

php
use PhpMlKit\NDArray\Normalization;

$x = NDArray::array([0.0, 1.0, 2.0, 3.0]);
$X = $x->fft(norm: Normalization::Backward);
$x2 = $X->ifft(norm: Normalization::Backward);

fftn() ​

php
public function fftn(?array $axes = null, Normalization $norm = Normalization::Backward): NDArray

N-dimensional complex FFT. If axes is null or empty, transforms all axes in order.

Parameters ​

ParameterTypeDescription
$axesarray<int>|nullAxes to transform (negative indices allowed). Null/empty means all axes.
$normNormalizationNormalization mode. Default: Normalization::Backward.

Returns ​

  • NDArray - Complex array.

Examples ​

php
use PhpMlKit\NDArray\Normalization;

$a = NDArray::array([[1.0, 0.0], [0.0, 0.0]]);
$F = $a->fftn(norm: Normalization::Backward);

ifftn() ​

php
public function ifftn(?array $axes = null, Normalization $norm = Normalization::Backward): NDArray

N-dimensional inverse complex FFT.

Parameters ​

ParameterTypeDescription
$axesarray<int>|nullAxes to transform (negative indices allowed). Null/empty means all axes.
$normNormalizationNormalization mode. Default: Normalization::Backward.

Returns ​

  • NDArray - Complex array.

fft2() ​

php
public function fft2(Normalization $norm = Normalization::Backward): NDArray

2-D FFT on the last two axes. Requires ndim >= 2.

Parameters ​

ParameterTypeDescription
$normNormalizationNormalization mode. Default: Normalization::Backward.

Returns ​

  • NDArray - Complex array.

ifft2() ​

php
public function ifft2(Normalization $norm = Normalization::Backward): NDArray

2-D inverse FFT on the last two axes. Requires ndim >= 2.


rfft() ​

php
public function rfft(?int $n = null, int $axis = -1, Normalization $norm = Normalization::Backward): NDArray

Real-input FFT along one axis. The output is complex and has length n//2 + 1 along the transformed axis.

Parameters ​

ParameterTypeDescription
$nint|nullReal transform length along axis. If null, uses current axis length.
$axisintAxis index (negative indices allowed). Default: -1.
$normNormalizationNormalization mode. Default: Normalization::Backward.

Returns ​

  • NDArray - Complex array.

irfft() ​

php
public function irfft(?int $n = null, int $axis = -1, Normalization $norm = Normalization::Backward): NDArray

Inverse real FFT: complex Hermitian spectrum → real signal.

Parameters ​

ParameterTypeDescription
$nint|nullReal output length along axis. If null, it is inferred from the spectrum length.
$axisintAxis index (negative indices allowed). Default: -1.
$normNormalizationNormalization mode. Default: Normalization::Backward.

Returns ​

  • NDArray - Real array (Float32 or Float64).

Length inference

If you want an exact output length, pass $n. When omitted, irfft() infers a length from the frequency axis size.


dct() ​

php
public function dct(int $type = 2, ?int $n = null, int $axis = -1, Normalization $norm = Normalization::Backward): NDArray

Discrete cosine transform (types I–IV) along one axis. This method only supports real inputs.

Parameters ​

ParameterTypeDescription
$typeintDCT type: 1, 2, 3, or 4. Default: 2.
$nint|nullTransform length along axis. If null, uses current axis length.
$axisintAxis index (negative indices allowed). Default: -1.
$normNormalizationNormalization mode. Default: Normalization::Backward.

Returns ​

  • NDArray - Real array with the same float dtype as the input (Float32 or Float64).

Raises ​

  • InvalidArgumentException - If $type is not in 1..4.
  • DTypeException - If the input is complex.

Examples ​

php
use PhpMlKit\NDArray\Normalization;

$x = NDArray::array([1.0, 2.0, 3.0, 4.0]);
$y = $x->dct(2, norm: Normalization::Backward);

idct() ​

php
public function idct(int $type = 2, ?int $n = null, int $axis = -1, Normalization $norm = Normalization::Backward): NDArray

Inverse DCT along one axis. For reconstructing norms (backward, ortho, forward), pairing with the same type and norm reconstructs the original signal:

php
$x2 = $x->dct(2, norm: Normalization::Ortho)->idct(2, norm: Normalization::Ortho);

dctn() ​

php
public function dctn(?array $axes = null, int $type = 2, Normalization $norm = Normalization::Backward): NDArray

N-dimensional DCT. If axes is null or empty, transforms all axes in order.

Parameters ​

ParameterTypeDescription
$axesarray<int>|nullAxes to transform (negative indices allowed). Null/empty means all axes.
$typeintDCT type (1..4). Default: 2.
$normNormalizationNormalization mode. Default: Normalization::Backward.

idctn() ​

php
public function idctn(?array $axes = null, int $type = 2, Normalization $norm = Normalization::Backward): NDArray

N-dimensional inverse DCT.


dct2() / idct2() ​

php
public function dct2(int $type = 2, Normalization $norm = Normalization::Backward): NDArray
public function idct2(int $type = 2, Normalization $norm = Normalization::Backward): NDArray

2-D DCT on the last two axes (and inverse). Requires ndim >= 2.

Released under the MIT License.