series_fft()

对系列应用快速傅立叶变换 (FFT)。

series_fft() 函数接受时间/空间域中的一系列复数,并使用快速傅里叶变换将其变换为频域。 变换后的复数序列表示原始序列中出现的频率的幅值和相位。 使用互补函数 series_ifft 从频域变换回时间/空间域。

语法

series_fft(x_real [,x_imaginary])

详细了解语法约定

参数

客户 类型​​ 必需 说明
x_real dynamic 数值数组,表示要变换的序列的实数部分。
x_imaginary dynamic 一个类似的数组,表示序列的虚数部分。 仅当输入序列包含复数时才应指定此参数。

返回

此函数以两个序列返回复合反向 fft。 第一个序列表示实数部分,第二个序列表示虚数部分。

示例

  • 生成一个复杂的序列,其中的实数部分和虚数部分是不同频率的纯正弦波。 使用 FFT 将其变换为频域:

    let sinewave=(x:double, period:double, gain:double=1.0, phase:double=0.0)
    {
        gain*sin(2*pi()/period*(x+phase))
    }
    ;
    let n=128;      //  signal length
    range x from 0 to n-1 step 1 | extend yr=sinewave(x, 8), yi=sinewave(x, 32)
    | summarize x=make_list(x), y_real=make_list(yr), y_imag=make_list(yi)
    | extend (fft_y_real, fft_y_imag) = series_fft(y_real, y_imag)
    | render linechart with(ysplit=panels)
    

    此查询返回 fft_y_real 和 fft_y_imag:

    Series fft.

  • 将序列变换为频域,然后应用反向变换以返回原始序列:

    let sinewave=(x:double, period:double, gain:double=1.0, phase:double=0.0)
    {
        gain*sin(2*pi()/period*(x+phase))
    }
    ;
    let n=128;      //  signal length
    range x from 0 to n-1 step 1 | extend yr=sinewave(x, 8), yi=sinewave(x, 32)
    | summarize x=make_list(x), y_real=make_list(yr), y_imag=make_list(yi)
    | extend (fft_y_real, fft_y_imag) = series_fft(y_real, y_imag)
    | extend (y_real2, y_image2) = series_ifft(fft_y_real, fft_y_imag)
    | project-away fft_y_real, fft_y_imag   //  too many series for linechart with panels
    | render linechart with(ysplit=panels)
    

    此查询返回 y_real2 和 *y_imag2(与 y_real 和 y_imag 相同):

    Series ifft.