Compartir a través de


series_fft()

Aplica la transformación de Fourier rápida (FFT) en una serie.

La función series_fft() toma una serie de números complejos en el dominio espacial o temporal y lo transforma en el dominio de frecuencia mediante la transformación Fast Fourier. La serie compleja transformada representa la magnitud y la fase de las frecuencias que aparecen en la serie original. Use la función complementaria series_ifft para transformar de nuevo el dominio de frecuencia al dominio de tiempo o espacial.

Syntax

series_fft(x_real [,x_imaginary])

Obtenga más información sobre las convenciones de sintaxis.

Parámetros

Nombre Tipo Requerido Descripción
x_real dynamic ✔️ Matriz numérica que representa el componente real de la serie que se va a transformar.
x_imaginary dynamic Matriz similar que representa el componente imaginario de la serie. Este parámetro solo se debe especificar si la serie de entrada contiene números complejos.

Devoluciones

La función devuelve el fft inverso complejo en dos series. La primera serie para el componente real y la segunda para el componente imaginario.

Ejemplo

  • Genere una serie compleja, donde los componentes reales e imaginarios son ondas de seno puros en diferentes frecuencias. Use FFT para transformarlo en el dominio de frecuencia:

    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)
    

    Esta consulta devuelve fft_y_real y fft_y_imag:

    Serie fft.

  • Transforme una serie en el dominio de frecuencia y, a continuación, aplique la transformación inversa para recuperar la serie 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)
    

    Esta consulta devuelve y_real2 y *y_imag2, que son iguales que y_real y y_imag:

    Serie ifft.