Compartilhar via


series_fft()

Aplica-se a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Aplica a FFT (Transformada Rápida de Fourier) em uma série.

A função series_fft() pega uma série de números complexos no domínio do tempo/espacial e os transforma no domínio da frequência usando a Transformada Rápida de Fourier. A série complexa transformada representa a magnitude e a fase das frequências que aparecem na série original. Use a função complementar series_ifft para transformar do domínio da frequência de volta para o domínio do tempo/espacial.

Sintaxe

series_fft( x_real [, x_imaginary])

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Digitar Obrigatória Descrição
x_real dynamic ✔️ Uma matriz numérica que representa o componente real da série a ser transformada.
x_imaginary dynamic Uma matriz semelhante representando o componente imaginário da série. Esse parâmetro só deve ser especificado se a série de entrada contiver números complexos.

Devoluções

A função retorna o inverso complexo fft em duas séries. A primeira série para o componente real e a segunda para o componente imaginário.

Exemplo

  • Gere uma série complexa, onde os componentes reais e imaginários são ondas senoidais puras em diferentes frequências. Use a FFT para transformá-la no domínio da frequência:

    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)
    

    Essa consulta retorna fft_y_real e fft_y_imag:

    Série fft.

  • Transforme uma série no domínio da frequência e, em seguida, aplique a transformação inversa para recuperar a série original:

    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)
    

    Essa consulta retorna y_real2 e *y_imag2, que são iguais a y_real e y_imag:

    Série ifft.