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.