.. _op_ai_onnx_STFT: STFT ==== - **Domain**: ``ai.onnx`` - **Since version**: 17 Computes the Short-time Fourier Transform of the signal. **Inputs** - **signal** (*T1*): Input tensor representing a real or complex valued signal. For real input, the following shape is expected: [batch_size][signal_length][1]. For complex input, the following shape is expected: [batch_size][signal_length][2], where [batch_size][signal_length][0] represents the real component and [batch_size][signal_length][1] represents the imaginary component of the signal. - **frame_step** (*T2*): The number of samples to step between successive DFTs. - **window** (*T1*): A tensor representing the window that will be slid over the signal.The window must have rank 1 with shape: [window_shape]. It's an optional value. - **frame_length** (*T2*): A scalar representing the size of the DFT. It's an optional value. **Outputs** - **output** (*T1*): The Short-time Fourier Transform of the signals.If onesided is 1, the output has the shape: [batch_size][frames][dft_unique_bins][2], where dft_unique_bins is frame_length // 2 + 1 (the unique components of the DFT) If onesided is 0, the output has the shape: [batch_size][frames][frame_length][2], where frame_length is the length of the DFT. **Attributes** - **onesided** (*int*): If onesided is 1, only values for w in [0, 1, 2, ..., floor(n_fft/2) + 1] are returned because the real-to-complex Fourier transform satisfies the conjugate symmetry, i.e., X[m, w] = X[m,w]=X[m,n_fft-w]\*. Note if the input or window tensors are complex, then onesided output is not possible. Enabling onesided with real inputs performs a Real-valued fast Fourier transform (RFFT).When invoked with real or complex valued input, the default value is 1. Values can be 0 or 1. **Type Constraints** - **T1**: Constrain signal and output to float tensors. Allowed types: tensor(bfloat16), tensor(double), tensor(float), tensor(float16). - **T2**: Constrain scalar length types to int64_t. Allowed types: tensor(int32), tensor(int64). Examples -------- **test_cc_stft** .. code-block:: text Node: STFT(signal, frame_step, "", frame_length) -> (output) Attributes: onesided = 1 .. code-block:: text Inputs: signal: shape=(1, 16, 1), dtype=float32 [[[1.], [2.], [3.], [4.], [5.], [6.], [7.], [8.], [8.], [7.], [6.], [5.], [4.], [3.], [2.], [1.]]] frame_step: shape=(), dtype=int64 4 frame_length: shape=(), dtype=int64 8 Outputs: output: shape=(1, 3, 5, 2), dtype=float32 [[[[ 3.6000000e+01, 0.0000000e+00], [-4.0000000e+00, 9.6568546e+00], [-4.0000000e+00, 4.0000000e+00], [-4.0000000e+00, 1.6568543e+00], [-4.0000000e+00, -3.9188699e-15]], [[ 5.2000000e+01, 0.0000000e+00], [-5.8284273e+00, -2.4142137e+00], [-2.1431318e-15, -8.8817842e-16], [-1.7157288e-01, -4.1421357e-01], [ 0.0000000e+00, -2.2043643e-15]], [[ 3.6000000e+01, 0.0000000e+00], [ 4.0000000e+00, -9.6568546e+00], [ 4.0000000e+00, -4.0000000e+00], [ 4.0000000e+00, -1.6568543e+00], [ 4.0000000e+00, -4.8985874e-16]]]] **test_cc_stft_complex_batched** .. code-block:: text Node: STFT(signal, frame_step, "", frame_length) -> (output) Attributes: onesided = 0 .. code-block:: text Inputs: signal: shape=(2, 128, 2), dtype=float32 [[[ 1., 0.], [ 1., 0.], [ 1., 0.], ..., [ 1., 0.], [ 1., 0.], [ 1., 0.]], [[99., 0.], [99., 0.], [99., 0.], ..., [99., 0.], [99., 0.], [99., 0.]]] frame_step: shape=(), dtype=int64 16 frame_length: shape=(), dtype=int64 32 Outputs: output: shape=(2, 7, 32, 2), dtype=float32 [[[[ 3.2000000e+01, 0.0000000e+00], [-2.3314684e-15, -2.2482016e-15], [-3.3306691e-16, 0.0000000e+00], ..., [-3.2973624e-14, -3.2751579e-14], [ 6.1395333e-14, -3.2418512e-14], [ 4.9960036e-14, -2.8810287e-14]], [[ 3.2000000e+01, 0.0000000e+00], [-2.3314684e-15, -2.2482016e-15], [-3.3306691e-16, 0.0000000e+00], ..., [-3.2973624e-14, -3.2751579e-14], [ 6.1395333e-14, -3.2418512e-14], [ 4.9960036e-14, -2.8810287e-14]], [[ 3.2000000e+01, 0.0000000e+00], [-2.3314684e-15, -2.2482016e-15], [-3.3306691e-16, 0.0000000e+00], ..., [-3.2973624e-14, -3.2751579e-14], [ 6.1395333e-14, -3.2418512e-14], [ 4.9960036e-14, -2.8810287e-14]], ..., [[ 3.2000000e+01, 0.0000000e+00], [-2.3314684e-15, -2.2482016e-15], [-3.3306691e-16, 0.0000000e+00], ..., [-3.2973624e-14, -3.2751579e-14], [ 6.1395333e-14, -3.2418512e-14], [ 4.9960036e-14, -2.8810287e-14]], [[ 3.2000000e+01, 0.0000000e+00], [-2.3314684e-15, -2.2482016e-15], [-3.3306691e-16, 0.0000000e+00], ..., [-3.2973624e-14, -3.2751579e-14], [ 6.1395333e-14, -3.2418512e-14], [ 4.9960036e-14, -2.8810287e-14]], [[ 3.2000000e+01, 0.0000000e+00], [-2.3314684e-15, -2.2482016e-15], [-3.3306691e-16, 0.0000000e+00], ..., [-3.2973624e-14, -3.2751579e-14], [ 6.1395333e-14, -3.2418512e-14], [ 4.9960036e-14, -2.8810287e-14]]], [[[ 3.1680000e+03, 0.0000000e+00], [ 2.8421709e-14, -9.5923269e-14], [-8.5265128e-14, -8.5265128e-14], ..., [-3.2827074e-12, -3.2329694e-12], [ 6.1533001e-12, -3.1405989e-12], [ 5.1727511e-12, -3.0588865e-12]], [[ 3.1680000e+03, 0.0000000e+00], [ 2.8421709e-14, -9.5923269e-14], [-8.5265128e-14, -8.5265128e-14], ..., [-3.2827074e-12, -3.2329694e-12], [ 6.1533001e-12, -3.1405989e-12], [ 5.1727511e-12, -3.0588865e-12]], [[ 3.1680000e+03, 0.0000000e+00], [ 2.8421709e-14, -9.5923269e-14], [-8.5265128e-14, -8.5265128e-14], ..., [-3.2827074e-12, -3.2329694e-12], [ 6.1533001e-12, -3.1405989e-12], [ 5.1727511e-12, -3.0588865e-12]], ..., [[ 3.1680000e+03, 0.0000000e+00], [ 2.8421709e-14, -9.5923269e-14], [-8.5265128e-14, -8.5265128e-14], ..., [-3.2827074e-12, -3.2329694e-12], [ 6.1533001e-12, -3.1405989e-12], [ 5.1727511e-12, -3.0588865e-12]], [[ 3.1680000e+03, 0.0000000e+00], [ 2.8421709e-14, -9.5923269e-14], [-8.5265128e-14, -8.5265128e-14], ..., [-3.2827074e-12, -3.2329694e-12], [ 6.1533001e-12, -3.1405989e-12], [ 5.1727511e-12, -3.0588865e-12]], [[ 3.1680000e+03, 0.0000000e+00], [ 2.8421709e-14, -9.5923269e-14], [-8.5265128e-14, -8.5265128e-14], ..., [-3.2827074e-12, -3.2329694e-12], [ 6.1533001e-12, -3.1405989e-12], [ 5.1727511e-12, -3.0588865e-12]]]] **test_cc_stft_twosided** .. code-block:: text Node: STFT(signal, frame_step, "", frame_length) -> (output) Attributes: onesided = 0 .. code-block:: text Inputs: signal: shape=(1, 16, 1), dtype=float32 [[[1.], [2.], [3.], [4.], [5.], [6.], [7.], [8.], [8.], [7.], [6.], [5.], [4.], [3.], [2.], [1.]]] frame_step: shape=(), dtype=int64 4 frame_length: shape=(), dtype=int64 8 Outputs: output: shape=(1, 3, 8, 2), dtype=float32 [[[[ 3.6000000e+01, 0.0000000e+00], [-4.0000000e+00, 9.6568546e+00], [-4.0000000e+00, 4.0000000e+00], [-4.0000000e+00, 1.6568543e+00], [-4.0000000e+00, -3.9188699e-15], [-4.0000000e+00, -1.6568543e+00], [-4.0000000e+00, -4.0000000e+00], [-4.0000000e+00, -9.6568546e+00]], [[ 5.2000000e+01, 0.0000000e+00], [-5.8284273e+00, -2.4142137e+00], [-2.1431318e-15, -8.8817842e-16], [-1.7157288e-01, -4.1421357e-01], [ 0.0000000e+00, -2.2043643e-15], [-1.7157288e-01, 4.1421357e-01], [-1.7551422e-14, -2.6645353e-15], [-5.8284273e+00, 2.4142137e+00]], [[ 3.6000000e+01, 0.0000000e+00], [ 4.0000000e+00, -9.6568546e+00], [ 4.0000000e+00, -4.0000000e+00], [ 4.0000000e+00, -1.6568543e+00], [ 4.0000000e+00, -4.8985874e-16], [ 4.0000000e+00, 1.6568543e+00], [ 4.0000000e+00, 4.0000000e+00], [ 4.0000000e+00, 9.6568546e+00]]]] **test_cc_stft_with_window** .. code-block:: text Node: STFT(signal, frame_step, window, frame_length) -> (output) Attributes: onesided = 1 .. code-block:: text Inputs: signal: shape=(1, 16, 1), dtype=float32 [[[1.], [2.], [3.], [4.], [5.], [6.], [7.], [8.], [8.], [7.], [6.], [5.], [4.], [3.], [2.], [1.]]] frame_step: shape=(), dtype=int64 4 window: shape=(8,), dtype=float32 [1., 1., 1., 1., 1., 1., 1., 1.] frame_length: shape=(), dtype=int64 8 Outputs: output: shape=(1, 3, 5, 2), dtype=float32 [[[[ 3.6000000e+01, 0.0000000e+00], [-4.0000000e+00, 9.6568546e+00], [-4.0000000e+00, 4.0000000e+00], [-4.0000000e+00, 1.6568543e+00], [-4.0000000e+00, -3.9188699e-15]], [[ 5.2000000e+01, 0.0000000e+00], [-5.8284273e+00, -2.4142137e+00], [-2.1431318e-15, -8.8817842e-16], [-1.7157288e-01, -4.1421357e-01], [ 0.0000000e+00, -2.2043643e-15]], [[ 3.6000000e+01, 0.0000000e+00], [ 4.0000000e+00, -9.6568546e+00], [ 4.0000000e+00, -4.0000000e+00], [ 4.0000000e+00, -1.6568543e+00], [ 4.0000000e+00, -4.8985874e-16]]]]