Обнаружение огибающей

Этот пример показывает, как реализовать два распространенных метода обнаружения огибающей. Один из методов использует квадратурную и lowpass фильтрацию. Другой использует преобразование Гильберта. Этот пример иллюстрирует реализации MATLAB ® и Simulink ®.

Введение

Огибающая сигнала эквивалентна его контуру, и детектор огибающей соединяет весь peaks в этом сигнале. Обнаружение огибающей имеет многочисленные приложения в областях обработки сигналов и связи, одним из которых является обнаружение амплитудной модуляции (АМ). Следующий блок показывает реализацию обнаружения огибающей с помощью этих двух методов.

Метод 1: Квадратурная и Lowpass фильтрация

Этот способ обнаружения огибающей включает в себя квадрирование входного сигнала и передачу этого сигнала через lowpass. Квадратура сигнала эффективно демодулирует вход, используя себя как собственную несущую волну. Это означает, что половина энергии сигнала подталкивается к более высоким частотам и половина смещается вниз к DC. Затем вы понижаете этот сигнал, чтобы уменьшить частоту дискретизации. Вы можете сделать понижающую дискретизацию, если сигнал не имеет каких-либо высоких частот, которые могут вызвать сглаживание. В противном случае следует использовать десятикратное уменьшение конечной импульсной характеристики, которая применяет lowpass перед понижением дискретизации сигнала. После этого пропустите сигнал через минимально-фазовый lowpass, чтобы исключить энергию высоких частот. Наконец, у вас остается только огибающая сигнала.

Для поддержания правильной шкалы необходимо выполнить две дополнительные операции. Во-первых, вы должны усилить сигнал в два раза. Поскольку вы сохраняете только нижнюю половину энергии сигнала, это усиление соответствует конечной энергии своей исходной энергии. Во-вторых, вы должны взять квадратный корень сигнала, чтобы обратить искажение масштабирования, вызванное квадратурой сигнала.

Этот способ обнаружения огибающей легко реализовать и может быть выполнен с помощью фильтра низкого порядка, который минимизирует задержку выхода.

Метод 2: Преобразование Гильберта

Этот метод обнаружения огибающей включает создание аналитического сигнала входа с помощью преобразования Гильберта. Аналитический сигнал является комплексным сигналом, где вещественная часть является исходным сигналом, а мнимая часть является преобразованием Гильберта исходного сигнала.

Математически огибающая e (t) сигнала x (t) определяется как величина аналитического сигнала, как показано следующим уравнением.

$$e(t) = \sqrt{x({t})^{2} + \hat{x}(t)^{2}}$$

где

$$\hat{x}(t)$$

- преобразование Гильберта x (t).

Вы можете найти преобразование Гильберта сигнала с помощью 32-точечного фильтра конечной импульсной характеристики Паркса-Макклеллана. Чтобы сформировать аналитический сигнал, вы умножаете преобразование Гильберта сигнала на sqrt (-1) (мнимый модуль) и добавляете его к задержанному во времени исходному сигналу. Необходимо задержать входной сигнал, потому что преобразование Гильберта, которое реализовано конечная импульсная характеристика, введет задержку в половине длины фильтра.

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

Пример MATLAB: инициализация

Инициализируйте необходимые переменные, такие как переменные для формата кадра и имени файла. Создание и инициализация системных объектов перед их использованием в цикле обработки имеет решающее значение для получения оптимальной эффективности.

Fs = 22050;
numSamples = 10000;
DownsampleFactor = 15;
frameSize = 10*DownsampleFactor;

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

sine = dsp.SineWave([0.4 1],[10 200], ...
    'SamplesPerFrame',frameSize, ...
    'SampleRate',Fs);

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

lp1 = dsp.FIRFilter('Numerator',firpm(20,[0 0.03 0.1 1],[1 1 0 0]));

Создайте трёх цифровых Системных объектов фильтра. Первый реализует трансформатор Гильберта, второй компенсирует задержку, введенную трансформатором Гильберта, а третий является lowpass для обнаружения огибающей сигнала.

N = 60; % Filter order
hilbertTransformer = dsp.FIRFilter( ...
        'Numerator',firpm(N,[0.01 .95],[1 1],'hilbert'));
delay = dsp.Delay('Length',N/2);
lp2 = dsp.FIRFilter('Numerator',firpm(20,[0 0.03 0.1 1],[1 1 0 0]));

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

scope1 = timescope( ...
  'Name','Envelope detection using Amplitude Modulation', ...
  'SampleRate',[Fs,Fs/DownsampleFactor], ...
  'TimeDisplayOffset',[(N/2+frameSize)/Fs,0], ...
  'TimeSpanSource','property', ...
  'TimeSpan',0.45, ...
  'YLimits',[-2.5 2.5], ...
  'Position', [100 200 560 500]);
pos = scope1.Position;

scope2 = timescope( ...
  'Name','Envelope detection using Hilbert Transform', ...
  'Position',[pos(1) + pos(3), pos(2:4)], ...
  'SampleRate',[Fs,Fs/DownsampleFactor], ...
  'TimeDisplayOffset',[(N/2+frameSize)/Fs,0], ...
  'TimeSpanSource','Property', ...
  'TimeSpan',0.45, ...
  'YLimits',[-2.5 2.5]);

Пример MATLAB: цикл обработки потока

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

for i = 1:numSamples/frameSize
    sig = sine();
    sig = (1 + sig(:,1)) .* sig(:, 2);      % Amplitude modulation

    % Envelope detector by squaring the signal and lowpass filtering
    sigsq = 2 * sig .* sig;
    sigenv1 = sqrt(lp1(downsample(sigsq,DownsampleFactor)));

    % Envelope detector using the Hilbert transform in the time domain
    sige = abs(complex(0, hilbertTransformer(sig)) + delay(sig));
    sigenv2 = lp2(downsample(sige,DownsampleFactor));

    % Plot the signals and envelopes
    scope1(sig,sigenv1);
    scope2(sig,sigenv2);
end
release(scope1);
release(scope2);

Пример MATLAB: Результаты детектора огибающей

На графиках для метода обнаружения огибающей, использующего преобразование Гильберта, амплитуда огибающей не совпадает с фактическим сигналом, потому что преобразование Гильберта, которое было реализовано с использованием конечной импульсной характеристики, не идеально. То есть, характеристика величины не является единичной для всех частот. Форма огибающей все еще соответствует фактической огибающей сигнала.

Пример Simulink: Метод 1 (квадратурная и Lowpass фильтрация)

Как и выше, метод 1 работает путем квадратуры входного сигнала и передачи его через lowpass.

В этом примере Simulink, простой минимально-фазовый lowpass используется, чтобы удалить энергию высокой частоты. В порядок поддержания правильного масштабирования включены еще две операции. Первый - поместить усиление 2 на сигнал. Поскольку мы сохраняем только нижнюю половину энергии сигнала, этот коэффициент усиления увеличивает конечную энергию, чтобы соответствовать ее исходной энергии. Наконец, квадратный корень сигнала принимается, чтобы обратить искажение масштабирования из операции квадрирования входного сигнала.

Этот метод полезен, потому что он очень прост в реализации и может быть выполнен с фильтром низкого порядка, минимизируя задержку выхода.

Пример Simulink: Метод 2 (преобразование Гильберта)

Как и выше, Метод 2 работает путем создания аналитического сигнала входа с помощью трансформатора Гильберта.

В этом примере Simulink преобразование Гильберта сигнала находят с помощью 32-точечной конечной импульсной характеристики фильтра Паркса-Макклеллана. Преобразование Гильберта сигнала затем умножается на i (мнимый модуль) и добавляется к исходному сигналу. Исходный сигнал задерживается до добавления к преобразованию Гильберта, чтобы соответствовать задержке, вызванной преобразованием Гильберта, которое составляет половину длины фильтра Гильберта.

Огибающая сигнала может быть найдена путем взятия абсолютного значения аналитического сигнала. В порядке устранения вызывного сигнала и сглаживания огибающей результат подвергается фильтру lowpass.

Обратите внимание, что блок Analytic Signal, найденный в DSP System Toolbox™, также может использоваться, чтобы реализовать этот проект обнаружения огибающей.

Пример Simulink: модель детектора огибающей

Полноплатформенная версия модели Simulink с плавающей точкой показана ниже. Когда вы запускаете модель, вы увидите исходный сигнал и результаты обоих детекторов огибающей.

Пример Simulink: Результаты детектора огибающей

Этот пример показывает результаты двух различных огибающих детекторов для двух разных типов входных сигналов. Вариантами входа являются речевой сигнал выборки или синусоиды 100 Гц, который включается и выключается.

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

График входа возможностей показывает исходный сигнал. Сигнал длится в общей сложности 5 секунд, при этом 1 секунду данных показывается за раз.

Первый выходной график показывает выход первого огибающего детектора. Это результат квадрирования исходного сигнала и передачи его через lowpass. Ясно видно, что огибающая была успешно извлечена из речевого сигнала.

Второй график выходной области показывает выход второго детектора огибающей, который использует преобразование Гильберта. Несмотря на то, что выход этого детектора огибающей выглядит очень похожим на первый метод, вы можете увидеть различия между ними.

Модель Simulink

Полноплатформенная версия с плавающей точкой: dspenvdet