Signal Processing
Discrete transforms for frequency-domain analysis (FFT, real FFT, and DCT).
All methods on this page are instance methods on NDArray.
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()
public function fft(?int $n = null, int $axis = -1, Normalization $norm = Normalization::Backward): NDArrayComplex discrete Fourier transform along one axis. Real inputs are promoted to a complex dtype.
Parameters
| Parameter | Type | Description |
|---|---|---|
$n | int|null | Transform length along axis. If null, uses the current axis length. |
$axis | int | Axis index (negative indices allowed). Default: -1 (last axis). |
$norm | Normalization | Normalization mode. Default: Normalization::Backward. |
Returns
NDArray- Complex array (Complex64orComplex128).
Examples
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()
public function ifft(?int $n = null, int $axis = -1, Normalization $norm = Normalization::Backward): NDArrayInverse complex FFT along one axis.
Parameters
| Parameter | Type | Description |
|---|---|---|
$n | int|null | Transform length along axis. If null, uses the current axis length. |
$axis | int | Axis index (negative indices allowed). Default: -1. |
$norm | Normalization | Normalization mode. Default: Normalization::Backward. |
Returns
NDArray- Complex array.
Examples
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()
public function fftn(?array $axes = null, Normalization $norm = Normalization::Backward): NDArrayN-dimensional complex FFT. If axes is null or empty, transforms all axes in order.
Parameters
| Parameter | Type | Description |
|---|---|---|
$axes | array<int>|null | Axes to transform (negative indices allowed). Null/empty means all axes. |
$norm | Normalization | Normalization mode. Default: Normalization::Backward. |
Returns
NDArray- Complex array.
Examples
use PhpMlKit\NDArray\Normalization;
$a = NDArray::array([[1.0, 0.0], [0.0, 0.0]]);
$F = $a->fftn(norm: Normalization::Backward);ifftn()
public function ifftn(?array $axes = null, Normalization $norm = Normalization::Backward): NDArrayN-dimensional inverse complex FFT.
Parameters
| Parameter | Type | Description |
|---|---|---|
$axes | array<int>|null | Axes to transform (negative indices allowed). Null/empty means all axes. |
$norm | Normalization | Normalization mode. Default: Normalization::Backward. |
Returns
NDArray- Complex array.
fft2()
public function fft2(Normalization $norm = Normalization::Backward): NDArray2-D FFT on the last two axes. Requires ndim >= 2.
Parameters
| Parameter | Type | Description |
|---|---|---|
$norm | Normalization | Normalization mode. Default: Normalization::Backward. |
Returns
NDArray- Complex array.
ifft2()
public function ifft2(Normalization $norm = Normalization::Backward): NDArray2-D inverse FFT on the last two axes. Requires ndim >= 2.
rfft()
public function rfft(?int $n = null, int $axis = -1, Normalization $norm = Normalization::Backward): NDArrayReal-input FFT along one axis. The output is complex and has length n//2 + 1 along the transformed axis.
Parameters
| Parameter | Type | Description |
|---|---|---|
$n | int|null | Real transform length along axis. If null, uses current axis length. |
$axis | int | Axis index (negative indices allowed). Default: -1. |
$norm | Normalization | Normalization mode. Default: Normalization::Backward. |
Returns
NDArray- Complex array.
irfft()
public function irfft(?int $n = null, int $axis = -1, Normalization $norm = Normalization::Backward): NDArrayInverse real FFT: complex Hermitian spectrum → real signal.
Parameters
| Parameter | Type | Description |
|---|---|---|
$n | int|null | Real output length along axis. If null, it is inferred from the spectrum length. |
$axis | int | Axis index (negative indices allowed). Default: -1. |
$norm | Normalization | Normalization mode. Default: Normalization::Backward. |
Returns
NDArray- Real array (Float32orFloat64).
Length inference
If you want an exact output length, pass $n. When omitted, irfft() infers a length from the frequency axis size.
dct()
public function dct(int $type = 2, ?int $n = null, int $axis = -1, Normalization $norm = Normalization::Backward): NDArrayDiscrete cosine transform (types I–IV) along one axis. This method only supports real inputs.
Parameters
| Parameter | Type | Description |
|---|---|---|
$type | int | DCT type: 1, 2, 3, or 4. Default: 2. |
$n | int|null | Transform length along axis. If null, uses current axis length. |
$axis | int | Axis index (negative indices allowed). Default: -1. |
$norm | Normalization | Normalization mode. Default: Normalization::Backward. |
Returns
NDArray- Real array with the same float dtype as the input (Float32orFloat64).
Raises
InvalidArgumentException- If$typeis not in1..4.DTypeException- If the input is complex.
Examples
use PhpMlKit\NDArray\Normalization;
$x = NDArray::array([1.0, 2.0, 3.0, 4.0]);
$y = $x->dct(2, norm: Normalization::Backward);idct()
public function idct(int $type = 2, ?int $n = null, int $axis = -1, Normalization $norm = Normalization::Backward): NDArrayInverse DCT along one axis. For reconstructing norms (backward, ortho, forward), pairing with the same type and norm reconstructs the original signal:
$x2 = $x->dct(2, norm: Normalization::Ortho)->idct(2, norm: Normalization::Ortho);dctn()
public function dctn(?array $axes = null, int $type = 2, Normalization $norm = Normalization::Backward): NDArrayN-dimensional DCT. If axes is null or empty, transforms all axes in order.
Parameters
| Parameter | Type | Description |
|---|---|---|
$axes | array<int>|null | Axes to transform (negative indices allowed). Null/empty means all axes. |
$type | int | DCT type (1..4). Default: 2. |
$norm | Normalization | Normalization mode. Default: Normalization::Backward. |
idctn()
public function idctn(?array $axes = null, int $type = 2, Normalization $norm = Normalization::Backward): NDArrayN-dimensional inverse DCT.
dct2() / idct2()
public function dct2(int $type = 2, Normalization $norm = Normalization::Backward): NDArray
public function idct2(int $type = 2, Normalization $norm = Normalization::Backward): NDArray2-D DCT on the last two axes (and inverse). Requires ndim >= 2.
