Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

hilbert

Señal analítica de tiempo discreto utilizando la transformación Hilbert

Descripción

ejemplo

x = hilbert(xr) devuelve la señal analítica, , de una secuencia de datos real, .xxr Si es una matriz, entonces encuentra la señal analítica correspondiente a cada columna.xrhilbert

ejemplo

x = hilbert(xr,n) utiliza una transformación Fourier rápida de puntos (FFT) para calcular la transformación Hilbert.n Los datos de entrada se rellenan con cero o se truncan a longitud, según corresponda.n

Ejemplos

contraer todo

Defina una secuencia y calcule su señal analítica utilizando .hilbert

xr = [1 2 3 4]; x = hilbert(xr)
x = 1×4 complex

   1.0000 + 1.0000i   2.0000 - 1.0000i   3.0000 - 1.0000i   4.0000 + 1.0000i

La parte imaginaria de es la transformación Hilbert de , y la parte real es en sí misma.xxrxr

imx = imag(x)
imx = 1×4

     1    -1    -1     1

rex = real(x)
rex = 1×4

     1     2     3     4

La última mitad de la transformación discreta de Fourier (DFT) es cero.x (En este ejemplo, la última mitad de la transformación es solo el último elemento.) Los elementos DC y Nyquist son puramente reales.fft(x)

dft = fft(x)
dft = 1×4 complex

  10.0000 + 0.0000i  -4.0000 + 4.0000i  -2.0000 + 0.0000i   0.0000 + 0.0000i

La función encuentra la señal analítica exacta para un bloque finito de datos.hilbert También puede generar la señal analítica utilizando un filtro de transformador Hilbert de respuesta de impulso finito (FIR) para calcular una aproximación a la parte imaginaria.

Generar una secuencia compuesta por tres sinusoides con frecuencias 203, 721 y 1001 Hz. La secuencia se muestrea a 10 kHz durante aproximadamente 1 segundo. Utilice la función para calcular la señal analítica.hilbert Trazarlo entre 0,01 segundos y 0,03 segundos.

fs = 1e4; t = 0:1/fs:1;   x = 2.5 + cos(2*pi*203*t) + sin(2*pi*721*t) + cos(2*pi*1001*t);  y = hilbert(x);  plot(t,real(y),t,imag(y)) xlim([0.01 0.03]) legend('real','imaginary') title('hilbert Function')

Calcular Welch estima las densidades espectrales de potencia de la secuencia original y la señal analítica. Divida las secuencias en secciones no superpuestas con ventanas de Hamming de longitud 256. Verifique que la señal analítica no tenga energía en frecuencias negativas.

pwelch([x;y].',256,0,[],fs,'centered') legend('Original','hilbert')

Utilice la función para diseñar un filtro FIR de transformador Hilbert de orden 60.designfilt Especifique una anchura de transición de 400 Hz. Visualice la respuesta de frecuencia del filtro.

fo = 60;  d = designfilt('hilbertfir','FilterOrder',fo, ...        'TransitionWidth',400,'SampleRate',fs);   freqz(d,1024,fs)

Filtrar la secuencia sinusoidal para aproximar la parte imaginaria de la señal analítica.

hb = filter(d,x);

El retardo de grupo del filtro, , es igual a la mitad del orden del filtro.grd Compensar este retraso. Retire las primeras muestras de la parte imaginaria y las últimas muestras de la parte real y el vector de tiempo.grdgrd Trazar el resultado entre 0,01 segundos y 0,03 segundos.

grd = fo/2;     y2 = x(1:end-grd) + 1j*hb(grd+1:end); t2 = t(1:end-grd);  plot(t2,real(y2),t2,imag(y2)) xlim([0.01 0.03]) legend('real','imaginary') title('FIR Filter')

Calcule la densidad espectral de potencia (PSD) de la señal analítica aproximada y compárela con el resultado.hilbert

pwelch([y;[y2 zeros(1,grd)]].',256,0,[],fs,'centered') legend('hilbert','FIR Filter')

Argumentos de entrada

contraer todo

Señal de entrada, especificada como un vector o matriz de valor real. Si es complejo, ignora su parte imaginaria.xrhilbert

Ejemplo: especifica un período de un sinusoides.sin(2*pi*(0:15)/16)

Ejemplo: especifica una señal sinusoidal de dos canales.sin(2*pi*(0:15)'./[16 8])

Tipos de datos: single | double

Longitud DFT, especificada como un escalar entero positivo.

Tipos de datos: single | double

Argumentos de salida

contraer todo

Señal analítica, devuelta como vector o matriz.

Más acerca de

contraer todo

Señal analítica

devuelve una secuencia helicoidal compleja, a veces llamada , a partir de una secuencia de datos real.hilbertseñal analítica

La señal analítica x = xr + jxi tiene una parte real, Xr, que son los datos originales, y una parte imaginaria, Xi, que contiene la transformación Hilbert. La parte imaginaria es una versión de la secuencia real original con un cambio de fase de 90o. Por lo tanto, los pecados se transforman en cosenos, y por el contrario, los cosenos se transforman en senos. La serie transformada por Hilbert tiene el mismo contenido de amplitud y frecuencia que la secuencia original. La transformación incluye información de fase que depende de la fase del original.

La transformación Hilbert es útil para calcular atributos instantáneos de una serie temporal, especialmente la amplitud y la frecuencia. La amplitud instantánea es la amplitud de la compleja transformación Hilbert; la frecuencia instantánea es la tasa de tiempo de cambio del ángulo de fase instantánea. Para un sinusoides puro, la amplitud instantánea y la frecuencia son constantes. La fase instantánea, sin embargo, es un diente de sierra, que refleja cómo el ángulo de fase local varía linealmente durante un solo ciclo. Para las mezclas de sinusoides, los atributos son promedios a corto plazo, o locales, que abarcan no más de dos o tres puntos. Vea ejemplos.Transformación Hilbert y Frecuencia Instantánea

La referencia describe el método Kolmogorov para la reconstrucción de fase mínima, que implica tomar la transformación Hilbert del ritmoritmo de la densidad espectral de una serie temporal.[1] La función de caja de herramientas realiza esta reconstrucción.rceps

Algoritmos

La señal analítica de una secuencia tiene un archivo .xrtransformación de Fourier unilateral Es decir, la transformación desaparece para las frecuencias negativas. Para aproximar la señal analítica, calcula el FFT de la secuencia de entrada, reemplaza los coeficientes FFT que corresponden a frecuencias negativas con ceros y calcula el FFT inverso del resultado.hilbert

utiliza un algoritmo de cuatro pasos:hilbert

  1. Calcule el FFT de la secuencia de entrada, almacenando el resultado en un vector.x

  2. Cree un vector cuyos elementos tengan los valores:hh(i)

    • 1 para el número 1,i(n/2)+1

    • 2 para los números 2, 3, ... ,i(n/2)

    • 0 para , ... ,i(n/2)+2n

  3. Calcule el producto de elemento de y .xh

  4. Calcular el FFT inverso de la secuencia obtenida en el paso 3 y devuelve los primeros elementos del resultado.n

Este algoritmo se introdujo por primera vez en .[2] La técnica supone que la señal de entrada, , es un bloque finito de datos.x Esta suposición permite que la función elimine exactamente la redundancia espectral.x Los métodos basados en el filtrado FIR sólo pueden aproximarse a la señal analítica, pero tienen la ventaja de que funcionan continuamente en los datos. Vea otro ejemplo de una transformación Hilbert calculada con un filtro FIR.Modulación de amplitud de banda lateral única

Referencias

[1] Claerbout, Jon F. Fundamentals of Geophysical Data Processing with Applications to Petroleum Prospecting. Oxford, UK: Blackwell, 1985, pp. 59–62.

[2] Marple, S. L. “Computing the Discrete-Time Analytic Signal via FFT.” IEEE® Transactions on Signal Processing. Vol. 47, 1999, pp. 2600–2603.

[3] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Consulte también

| |

Introducido antes de R2006a