braindecode.functional.hilbert_freq#

braindecode.functional.hilbert_freq(x, forward_fourier=True)[source]#

Compute the Hilbert transform using PyTorch, separating the real and imaginary parts.

The analytic signal \(x_a(t)\) of a real-valued signal \(x(t)\) is defined as:

\[x_a(t) = x(t) + i y(t) = \mathcal{F}^{-1} \{ U(f) \mathcal{F}\{x(t)\} \}\]

where: - \(\mathcal{F}\) is the Fourier transform, - \(U(f)\) is the unit step function, - \(y(t)\) is the Hilbert transform of \(x(t)\).

Parameters:
  • input (torch.Tensor) –

    Input tensor. The expected shape depends on the forward_fourier parameter:

    • If forward_fourier is True:

      (…, seq_len)

    • If forward_fourier is False:

      (…, seq_len / 2 + 1, 2)

  • forward_fourier (bool, optional) – Determines the format of the input tensor. - If True, the input is in the forward Fourier domain. - If False, the input contains separate real and imaginary parts. Default is True.

Returns:

Output tensor with shape (…, seq_len, 2), where the last dimension represents the real and imaginary parts of the Hilbert transform.

Return type:

torch.Tensor

Examples

>>> import torch
>>> input = torch.randn(10, 100)  # Example input tensor
>>> output = hilbert_transform(input)
>>> print(output.shape)
torch.Size([10, 100, 2])

Notes

The implementation is matching scipy implementation, but using torch. scipy/scipy