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.

Transformada de Hilbert y frecuencia instantánea

La transformada de Hilbert calcula la frecuencia instantánea de una señal solo para señales monocomponente. Una señal monocomponente se describe en el plano tiempo-frecuencia con una sola "cresta". El conjunto de señales monocomponente incluye sinusoides sencillas y señales como chirps.

Genere un chirp muestreado a 1 kHz durante dos segundos. Especifique el chirp para que su frecuencia sea inicialmente 100 Hz y aumente a 200 Hz al pasar un segundo.

fs = 1000;
t = 0:1/fs:2-1/fs;
y = chirp(t,100,1,200);

Calcule el espectrograma del chirp utilizando la transformada de Fourier de tiempo corto implementada en la función pspectrum. La señal está bien descrita por una frecuencia de pico simple en cada punto en el tiempo.

pspectrum(y,fs,'spectrogram')

Figure contains an axes object. The axes object with title Fres = 10.267 Hz, Tres = 250 ms, xlabel Time (s), ylabel Frequency (Hz) contains an object of type image.

Calcule la señal analítica y diferencie su fase para medir la frecuencia instantánea. La derivada escalada produce un cálculo significativo.

z = hilbert(y);
instfrq = fs/(2*pi)*diff(unwrap(angle(z)));

clf
plot(t(2:end),instfrq)
ylim([0 fs/2])

Figure contains an axes object. The axes object contains an object of type line.

La función instfreq calcula y muestra la frecuencia instantánea en un paso.

instfreq(y,fs,'Method','hilbert')

Figure contains an axes object. The axes object with title Instantaneous Frequency Estimate, xlabel Time (s), ylabel Frequency (Hz) contains an object of type line.

El método falla cuando la señal no es monocomponente.

Genere una suma de dos sinusoides de 60 Hz y 90 Hz de frecuencia, muestreadas a 1023 Hz durante dos segundos. Calcule y represente el espectrograma. Cada punto de tiempo muestra la presencia de los dos componentes.

fs = 1023;
t = 0:1/fs:2-1/fs;
x = sin(2*pi*60*t)+sin(2*pi*90*t);

pspectrum(x,fs,'spectrogram')
yticks([60 90])

Figure contains an axes object. The axes object with title Fres = 10.257 Hz, Tres = 250.2444 ms, xlabel Time (s), ylabel Frequency (Hz) contains an object of type image.

Calcule la señal analítica y diferencie su fase. Amplíe el zoom en la región que contiene las frecuencias de las sinusoides. La señal analítica predice una frecuencia instantánea que es la media de las frecuencias de las sinusoides.

z = hilbert(x);
instfrq = fs/(2*pi)*diff(unwrap(angle(z)));

plot(t(2:end),instfrq)
ylim([60 90])
xlabel('Time (s)')
ylabel('Frequency (Hz)')

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Frequency (Hz) contains an object of type line.

La función instfreq también calcula la media.

instfreq(x,fs,'Method','hilbert')

Figure contains an axes object. The axes object with title Instantaneous Frequency Estimate, xlabel Time (s), ylabel Frequency (Hz) contains an object of type line.

Para calcular ambas frecuencias como funciones de tiempo, utilice spectrogram para encontrar la densidad del espectro de potencia y tfridge para realizar un seguimiento de las dos crestas. En tfridge, especifique la penalización para cambiar la frecuencia a 0,1.

[s,f,tt] = pspectrum(x,fs,'spectrogram');

numcomp = 2;
[fridge,~,lr] = tfridge(s,f,0.1,'NumRidges',numcomp);

pspectrum(x,fs,'spectrogram')
hold on
plot3(tt,fridge,abs(s(lr)),'LineWidth',4)
hold off
yticks([60 90])

Figure contains an axes object. The axes object with title Fres = 10.257 Hz, Tres = 250.2444 ms, xlabel Time (s), ylabel Frequency (Hz) contains 3 objects of type image, line.

Consulte también

|

Temas relacionados