Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Señal analítica y transformada de Hilbert

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

Genere una secuencia compuesta por tres sinusoides con frecuencias de 203, 721 y 1001 Hz. La secuencia se muestrea a 10 kHz durante aproximadamente 1 segundo. Utilice la función hilbert para calcular la señal analítica. Represéntela 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')
xlabel('Time (s)')

Figure contains an axes object. The axes object with title hilbert Function, xlabel Time (s) contains 2 objects of type line. These objects represent real, imaginary.

Calcule las estimaciones de Welch de las densidades espectrales de potencia de la secuencia original y de la señal analítica. Divida las secuencias en secciones no solapadas de Hamming de longitud 256. Compruebe que la señal analítica no tiene potencia en las frecuencias negativas.

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

Figure contains an axes object. The axes object with title Power Spectral Density, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 2 objects of type line. These objects represent Original, hilbert.

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

fo = 60;

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

freqz(d,1024,fs)

Figure Figure 1: Magnitude Response (dB) and Phase Response contains an axes object. The axes object with title Magnitude Response (dB) and Phase Response, xlabel Frequency (kHz), ylabel Magnitude (dB) contains an object of type line.

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, grd, es igual a la mitad del orden del filtro. Compense dicho retardo. Elimine las primeras muestras grd de la parte imaginaria y las últimas muestras grd de la parte real y del vector temporal. Represente 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')
xlabel('Time (s)')

Figure contains an axes object. The axes object with title FIR Filter, xlabel Time (s) contains 2 objects of type line. These objects represent real, imaginary.

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')

Figure contains an axes object. The axes object with title Power Spectral Density, xlabel Frequency (kHz), ylabel Power/frequency (dB/Hz) contains 2 objects of type line. These objects represent hilbert, FIR Filter.

Consulte también

|