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

Этот способ обнаружения огибающей включает в себя возведение входного сигнала в квадрат и передачу этого сигнала через фильтр нижних частот. Возведение сигнала в квадрат эффективно демодулирует входной сигнал, используя его в качестве собственной несущей. Это означает, что половина энергии сигнала подается на более высокие частоты, а половина смещается вниз к постоянному току. Затем вы понижаете этот сигнал, чтобы уменьшить частоту дискретизации. Вы можете выполнить понижающую выборку, если сигнал не имеет высоких частот, которые могут вызвать наложение. В противном случае следует использовать децимацию КИХ, которая применяет фильтр нижних частот перед понижающей дискретизацией сигнала. После этого пропускайте сигнал через фильтр нижних частот с минимальной фазой для устранения высокочастотной энергии. Наконец, остается только огибающая сигнала.
Для поддержания правильного масштаба необходимо выполнить две дополнительные операции. Во-первых, вы должны усилить сигнал в два раза. Так как вы сохраняете только нижнюю половину энергии сигнала, этот коэффициент усиления соответствует его исходной энергии. Во-вторых, необходимо взять квадратный корень сигнала, чтобы обратить искажение масштабирования, возникшее в результате возведения сигнала в квадрат.
Этот способ обнаружения огибающей легко реализовать и может быть выполнен с помощью фильтра низкого порядка, который минимизирует запаздывание выходного сигнала.
Этот способ обнаружения огибающей включает в себя создание аналитического сигнала входного сигнала с использованием преобразования Гильберта. Аналитический сигнал является комплексным сигналом, где действительная часть является исходным сигналом, а мнимая часть является преобразованием Гильберта исходного сигнала.
Математически огибающая e (t) сигнала x (t) определяется как величина аналитического сигнала, как показано следующим уравнением.

где

- преобразование Гильберта x (t).
Преобразование Гильберта сигнала можно найти с помощью 32-точечного КИО-фильтра Паркса-Макклеллана. Чтобы сформировать аналитический сигнал, затем умножьте преобразование Гильберта сигнала на sqrt (-1) (мнимая единица) и добавьте его к задержанному во времени исходному сигналу. Необходимо задержать входной сигнал, потому что преобразование Гильберта, которое реализуется КИХ-фильтром, введет задержку в половину длины фильтра.
Вы находите огибающую сигнала, принимая абсолютное значение аналитического сигнала. Огибающая представляет собой низкочастотный сигнал по сравнению с исходным сигналом. Чтобы уменьшить частоту дискретизации, устранить вызывной сигнал и сгладить огибающую, вы понижаете этот сигнал и пропускаете результат через фильтр нижних частот.
Инициализируйте необходимые переменные, например, для размера кадра и имени файла. Создание и инициализация системных объектов перед их использованием в цикле обработки имеет решающее значение для достижения оптимальной производительности.
Fs = 22050; numSamples = 10000; DownsampleFactor = 15; frameSize = 10*DownsampleFactor;
Создайте объект sine wave System и задайте его свойства для генерации двух sine waves. Одна синусоидальная волна будет действовать как сигнал сообщения, а другая синусоидальная волна будет сигналом несущей для получения амплитудной модуляции.
sine = dsp.SineWave([0.4 1],[10 200], ... 'SamplesPerFrame',frameSize, ... 'SampleRate',Fs);
Создайте фильтр КИХ нижних частот для фильтрации квадратного сигнала для обнаружения его огибающей.
lp1 = dsp.FIRFilter('Numerator',firpm(20,[0 0.03 0.1 1],[1 1 0 0]));
Создайте три объекта системы цифрового фильтра. Первый реализует преобразователь Гильберта, второй компенсирует задержку, введённую преобразователем Гильберта, а третий является фильтром нижних частот для детектирования огибающей сигнала.
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]);
Создайте контур обработки для определения огибающей входного сигнала. В этом цикле используются созданные вами системные объекты.
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);


На графиках для способа обнаружения огибающей с использованием преобразования Гильберта амплитуда огибающей не соответствует действительному сигналу, потому что преобразование Гильберта, которое было реализовано с использованием КИХ-фильтра, не является идеальным. То есть отклик на величину не равен единице для всех частот. Форма огибающей по-прежнему соответствует огибающей фактического сигнала.
Как описано выше, способ 1 работает путем возведения входного сигнала в квадрат и передачи его через фильтр нижних частот.
В этом примере Simulink для удаления высокочастотной энергии используется простой фильтр нижних частот с минимальной фазой. Для поддержания правильного масштабирования включены еще две операции. Первый заключается в том, чтобы разместить коэффициент усиления 2 на сигнале. Так как мы сохраняем только нижнюю половину энергии сигнала, это усиление увеличивает конечную энергию, чтобы соответствовать его исходной энергии. Наконец, квадратный корень сигнала принимается для обращения искажения масштабирования от операции возведения входного сигнала в квадрат.
Этот способ полезен, поскольку он очень прост в реализации и может быть выполнен с фильтром низкого порядка, минимизируя запаздывание выходного сигнала.
Как и выше, метод 2 работает путем создания аналитического сигнала входа с помощью трансформатора Гильберта.
В этом примере Симулинка преобразование Гильберта сигнала обнаруживается с помощью 32-точечного КИО-фильтра Паркса-Макклеллана. Преобразование Гильберта сигнала затем умножается на i (мнимая единица) и добавляется к исходному сигналу. Исходный сигнал задерживается по времени перед добавлением к преобразованию Гильберта, чтобы соответствовать задержке, вызванной преобразованием Гильберта, которое составляет половину длины фильтра Гильберта.
Огибающую сигнала можно найти, взяв абсолютное значение аналитического сигнала. Для устранения звонка и сглаживания огибающей результат подвергают фильтру нижних частот.
Следует отметить, что блок аналитического сигнала, найденный в Toolbox™ системы DSP, также может быть использован для реализации этой схемы обнаружения огибающей.
Общеплатформенная версия модели Simulink с плавающей запятой показана ниже. При запуске модели вы увидите исходный сигнал и результаты обоих детекторов огибающей.

В этом примере показаны результаты работы двух различных детекторов огибающей для двух различных типов входных сигналов. Входными вариантами являются выборочный речевой сигнал или синусоидальная волна 100 Гц, которая включается и выключается.
Модель имеет переключаемый вход и два выхода, которые направляются в области для удобства просмотра. Если сигнал не виден, дважды щелкните по блоку «Scope», чтобы открыть его.
На графике объема входного сигнала показан исходный сигнал. Сигнал длится в общей сложности 5 секунд, при этом одновременно отображается 1 секунда данных.

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

Общеплатформенная версия с плавающей запятой: dspenvdet