Экстракция огибающей

Этот пример показывает, как извлечь огибающую сигнала.

Создайте сигнал с двойной боковой амплитудой. Несущая частота составляет 1 кГц. Частота модуляции составляет 50 Гц. Глубина модуляции составляет 100%. Частота дискретизации составляет 10 кГц.

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. The axes contains an object of type line.

Извлеките огибающую с помощью hilbert функция. Огибающая является величиной аналитического сигнала, вычисленной hilbert. Постройте график огибающей вместе с исходным сигналом. Сохраните аргументы пары "имя-значение" plot функция в массиве ячеек для дальнейшего использования. Величина аналитического сигнала захватывает медленно изменяющиеся функции сигнала, в то время как фаза содержит информацию высокой частоты.

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. The axes with title Hilbert Envelope contains 3 objects of type line.

Можно также использовать envelope функция, чтобы сгенерировать огибающую сигнала непосредственно и изменить способ ее вычисления. Например, можно настроить длину фильтра Гильберта, используемого для поиска аналитической огибающей. Использование слишком маленькой длины фильтра приводит к искажению огибающей.

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. The axes with title Analytic Envelope contains 5 objects of type line. These objects represent fl = 12, fl = 30.

Можно сгенерировать скользящие огибающие RMS с помощью скользящего окна. Использование слишком маленькой длины окна приводит к искажению огибающей. Использование слишком большой длины окна сглаживает огибающую.

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. The axes with title RMS Envelope contains 7 objects of type line. These objects represent wl = 3, wl = 5, wl = 300.

Можно сгенерировать пиковые огибающие при помощи сплайн интерполяции по локальным максимумам, разделенным регулируемым количеством выборок. Слишком большое распределение выборок сглаживает огибающую.

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. The axes with title Peak Envelope contains 5 objects of type line. These objects represent np = 5, np = 50.

Увеличение параметра разделения пиков может уменьшить эффект паразитного peaks из-за шума. Вводите случайный шум в сигнал. Используйте интервал с 5 выборками, чтобы увидеть эффект шума на пиковой огибающей. Повторите упражнение с использованием интервала с 25 образцами.

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. The axes with title Peak Envelope contains 5 objects of type line. These objects represent np = 5, np = 25.

См. также

|