FFT
==============================

.. py:class:: mindradar.FFT(n=-1, dim=-1, norm="backward")

    傅里叶变换FFT。计算表达式为:

    .. math::
        X[\omega_1, \dots, \omega_d] =
            \sum_{n_1=0}^{N_1-1} \dots \sum_{n_d=0}^{N_d-1} x[n_1, \dots, n_d]
             e^{-j\ 2 \pi \sum_{i=0}^d \frac{\omega_i n_i}{N_i}},

    其中， :math:`d` = `signal_ndim` 是信号的维度，:math:`N_i` 则是信号第 :math:`i` 个维度的大小。

    参数：
        - **n** (int，可选) - 输出转换轴的长度。如果n小于输入的长度，则裁剪输入。如果它更大，则输入将填充零。如果未给出n，则使用沿轴指定的轴的输入长度。默认值： ``-1`` 。

        - **dim** (int，可选) - 计算FFT的轴。如果没有给出，则使用最后一个轴。默认值： ``-1`` 。

        - **norm** (str，可选) - 表示该操作的规范化方式，可选值：[ ``"backward"`` , ``"forward"`` , ``"ortho"`` ]。默认值： ``"backward"`` 。

          - "backward"，正向变换不缩放，逆变换按 :math:`1/n` 缩放，其中 `n` 表示输入 `x` 的元素数量。
          - "ortho"，正向变换与逆变换均按 :math:`1/\sqrt n` 缩放。
          - "forward"，正向变换按 :math:`1/n` 缩放，逆变换不缩放。

    输入：
        - **x** (Tensor) - 输入Tensor的维数必须大于或等于 `dim` 。数据类型应为复数。

    输出：
        Tensor，表示复数到复数傅里叶变换FFT的结果。

    支持平台：
         ``CPU``

    .. note::
        FFT要求complex64或complex128类型的输入，返回complex64或complex128类型的输出。

    示例：

    .. code-block:: python
        :linenos:
        :emphasize-lines: 7

        import mindspore as ms
        import mindradar as mr
        import numpy as np

        x = np.exp(3j * np.pi * np.arange(10) / 10).reshape(2, 5).astype(np.complex64)
        x_tensor = ms.Tensor(x)
        fft = mr.FFT()
        out = fft(x_tensor)
        print(out)