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 usando la transformada de Hilbert

Descripción

ejemplo

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

ejemplo

x = hilbert(xr,n) utiliza una transformada rápida de Fourier (FFT) para computar la transformada de Hilbert.n Los datos de entrada tienen relleno cero o se truncan a la 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 transformada de Hilbert, 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 transformada discreta de Fourier (DFT) es cero.x (En este ejemplo, la última mitad de la transformación es sólo el último elemento.) Los elementos de 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.

Genere 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 Trazar 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 las estimaciones de Welch de las densidades espectrales de potencia de la secuencia original y la señal analítica. Divida las secuencias en secciones de longitud no solapadas de Hamming-windowed, 256. Verifique que la señal analítica no tenga potencia en las frecuencias negativas.

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

Utilice la función para diseñar un filtro de abeto de Hilbert de 60 º orden.designfilt Especifique un ancho 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)

Filtre 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 de filtro.grd Compensar este retraso. Quite las primeras muestras de la parte imaginaria y las últimas muestras de la parte real y el vector de tiempo.grdgrd Trace 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')

Estimar la densidad espectral de potencia (PSD) de la señal analítica aproximada y compararla 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 una sinusoide.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 de 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 denominada, a partir de una secuencia de datos real.hilbertanalytic signal

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 transformada de Hilbert. La parte imaginaria es una versión de la secuencia real original con un desplazamiento de fase de 90 °. Por lo tanto, los senos se transforman en cosenos, y por el contrario, las cosenos se transforman en senos. La serie transformada de 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 transformada de Hilbert es útil para calcular los atributos instantáneos de una serie temporal, especialmente la amplitud y la frecuencia. La amplitud instantánea es la amplitud de la transformada compleja de Hilbert; la frecuencia instantánea es la tasa de tiempo de cambio del ángulo de fase instantáneo. Para una sinusoide pura, 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 en un solo ciclo. Para las mezclas de sinusoides, los atributos son a corto plazo, o locales, promedios que abarcan no más de dos o tres puntos. Vea por ejemplos.Hilbert Transform y frecuencia instantánea

La referencia describe el método Kolmogorov para la reconstrucción de fase mínima, que consiste en tomar la transformada de Hilbert del logaritmo de la densidad espectral de una serie temporal.[1] La función de Toolbox realiza esta reconstrucción.rceps

Algoritmos

La señal analítica de una secuencia tiene un.xrone-sided Fourier transform Es decir, la transformación desaparece para las frecuencias negativas. Para aproximar la señal analítica, calcula la FFT de la secuencia de entrada, reemplaza esos coeficientes FFT que corresponden a las frecuencias negativas con ceros, y calcula la FFT inversa del resultado.hilbert

utiliza un algoritmo de cuatro pasos:hilbert

  1. Calcule la 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 = 1,i(n/2)+1

    • 2 para = 2, 3,...,i(n/2)

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

  3. Calcule el producto de elemento sabio y.xh

  4. Calcule la FFT inversa 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 asume que la señal de entrada,, es un bloque finito de datos.x Esta suposición permite que la función Quite la redundancia espectral exactamente.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 operan continuamente en los datos. Vea otro ejemplo de una transformada de 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