Main Content

Extraer envolventes

Este ejemplo muestra cómo extraer la envolvente de una señal.

Cree una señal modulada por amplitud de doble banda lateral. La frecuencia portadora es 1 kHz. La frecuencia de modulación es 50 Hz. La profundidad de modulación es 100%. La tasa de muestreo es 10 kHz.

t = 0:1e-4:0.1;
x = (1+cos(2*pi*50*t)).*cos(2*pi*1000*t);

plot(t,x)
xlim([0 0.04])

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

Extraiga la envolvente utilizando la función hilbert. La envolvente es la magnitud de la señal analítica calculada por hilbert. Represente la envolvente junto con la señal original. Almacene los argumentos de par nombre-valor de la función plot en un arreglo de celdas para usarlos más tarde. La magnitud de la señal analítica captura las características de la señal que varían lentamente, mientras que la fase contiene la información de alta frecuencia.

y = hilbert(x);
env = abs(y);
plot_param = {'Color', [0.6 0.1 0.2],'Linewidth',2}; 

plot(t,x)
hold on
plot(t,[-1;1]*env,plot_param{:})
hold off
xlim([0 0.04])
title('Hilbert Envelope')

Figure contains an axes object. The axes object with title Hilbert Envelope contains 3 objects of type line.

También puede utilizar la función envelope para generar directamente la envolvente de la señal y modificar la forma en la que se calcula. Por ejemplo, puede ajustar la longitud del filtro Hilbert utilizado para buscar la envolvente analítica. Utilizar una longitud de filtro demasiado corta da como resultado una envolvente distorsionada.

fl1 = 12;
[up1,lo1] = envelope(x,fl1,'analytic');
fl2 = 30;
[up2,lo2] = envelope(x,fl2,'analytic');
param_small = {'Color',[0.9 0.4 0.1],'Linewidth',2};
param_large = {'Color',[0 0.4 0],'Linewidth',2};

plot(t,x)
hold on
p1 = plot(t,up1,param_small{:});
plot(t,lo1,param_small{:});
p2 = plot(t,up2,param_large{:});
plot(t,lo2,param_large{:});
hold off

legend([p1 p2],'fl = 12','fl = 30')
xlim([0 0.04])
title('Analytic Envelope')

Figure contains an axes object. The axes object with title Analytic Envelope contains 5 objects of type line. These objects represent fl = 12, fl = 30.

Puede generar envolventes de RMS variables utilizando una ventana deslizante. Utilizar una longitud de ventana demasiado corta da como resultado una envolvente distorsionada. Utilizar una longitud de ventana demasiado larga suaviza la envolvente.

wl1 = 3;
[up1,lo1] = envelope(x,wl1,'rms');
wl2 = 5;
[up2,lo2] = envelope(x,wl2,'rms');
wl3 = 300;
[up3,lo3] = envelope(x,wl3,'rms');

plot(t,x)
hold on
p1 = plot(t,up1,param_small{:});
plot(t,lo1,param_small{:});
p2 = plot(t,up2,plot_param{:});
plot(t,lo2,plot_param{:});
p3 = plot(t,up3,param_large{:});
plot(t,lo3,param_large{:})
hold off

legend([p1 p2 p3],'wl = 3','wl = 5','wl = 300')
xlim([0 0.04])
title('RMS Envelope')

Figure contains an axes object. The axes object with title RMS Envelope contains 7 objects of type line. These objects represent wl = 3, wl = 5, wl = 300.

Puede generar envolventes pico utilizando la interpolación por splines sobre máximos locales separados por un número de muestras ajustable. Si se reparten demasiado las muestras, la envolvente se suaviza.

np1 = 5;
[up1,lo1] = envelope(x,np1,'peak');
np2 = 50;
[up2,lo2] = envelope(x,np2,'peak');

plot(t,x)
hold on
p1 = plot(t,up1,param_small{:});
plot(t,lo1,param_small{:})
p2 = plot(t,up2,param_large{:});
plot(t,lo2,param_large{:})
hold off

legend([p1 p2],'np = 5','np = 50')
xlim([0 0.04])
title('Peak Envelope')

Figure contains an axes object. The axes object with title Peak Envelope contains 5 objects of type line. These objects represent np = 5, np = 50.

Si se aumenta el parámetro de separación de los picos, puede disminuir el efecto de los picos espurios debido al ruido. Introduzca ruido aleatorio en la señal. Utilice un intervalo de cinco muestras para ver el efecto del ruido en la envolvente pico. Repita el ejercicio utilizando un intervalo de 25 muestras.

rng default
q = x + randn(size(x))/10;
np1 = 5;
[up1,lo1] = envelope(q,np1,'peak');
np2 = 25;
[up2,lo2] = envelope(q,np2,'peak');

plot(t,q)
hold on
p1 = plot(t,up1,param_small{:});
plot(t,lo1,param_small{:})
p2 = plot(t,up2,param_large{:});
plot(t,lo2,param_large{:})
hold off

legend([p1 p2],'np = 5','np = 25')
xlim([0 0.04])
title('Peak Envelope')

Figure contains an axes object. The axes object with title Peak Envelope contains 5 objects of type line. These objects represent np = 5, np = 25.

Consulte también

|