В этом примере показано, как реализовать две общепринятых методики обнаружения конверта. Одна обработка на квадрат использования метода и фильтрация lowpass. Другое использование преобразование Гильберта. Этот пример иллюстрирует реализации Simulink® и MATLAB®.
Конверт сигнала эквивалентен своей схеме, и детектор конверта соединяет весь peaks в этом сигнале. Обнаружение конверта имеет многочисленные приложения в областях обработки сигналов и коммуникаций, одна из которых является обнаружением амплитудной модуляции (AM). Следующая блок-схема показывает реализацию обнаружения конверта с помощью этих двух методов.
Этот метод обнаружения конверта включает обработку на квадрат входному сигналу и отправку этого сигнала через фильтр lowpass. Обработка на квадрат сигналу эффективно демодулирует вход при помощи себя как его собственная несущая. Это означает, что половина энергии сигнала продвинута до более высоких частот, и половина смещена вниз к DC. Вы затем прореживаете этот сигнал уменьшить частоту дискретизации. Можно сделать субдискретизацию, если сигнал не имеет никаких высоких частот, которые могли бы вызвать искажение. В противном случае КИХ-децимация должна использоваться, который применяет фильтр lowpass прежде, чем проредить сигнал. После этого передайте сигнал через минимальную фазу, фильтр lowpass, чтобы устранить высокочастотную энергию. Наконец вас оставляют только с огибающей сигнала.
Чтобы обеспечить правильную шкалу, необходимо выполнить две дополнительных операции. Во-первых, необходимо усилить сигнал на коэффициент два. Поскольку вы сохраняете только более низкую половину энергии сигнала, это усиление совпадает с итоговой энергией к своей исходной энергии. Во-вторых, необходимо пустить квадратный корень из сигнала инвертировать масштабирующееся искажение, которое следовало из обработки на квадрат сигналу.
Этот метод обнаружения конверта легко реализовать и может быть сделан с фильтром младшего разряда, который минимизирует задержку выхода.
Этот метод обнаружения конверта включает создание аналитического сигнала входа с помощью преобразования Гильберта. Аналитический сигнал является комплексным сигналом, где действительная часть является исходным сигналом, и мнимая часть является преобразованием Гильберта исходного сигнала.
Математически конверт e (t) сигнала x (t) задан как величина аналитического сигнала как показано следующим уравнением.
где
преобразование Гильберта x (t).
Можно найти преобразование Гильберта сигнала с помощью КИХ-фильтра Парков-McClellan с 32 точками. Чтобы сформировать аналитический сигнал, вы затем умножаете преобразование Гильберта сигнала sqrt (-1) (мнимая единица) и добавляете его в задержанный временем исходный сигнал. Необходимо задержать входной сигнал, потому что преобразование Гильберта, которое реализовано КИХ-фильтром, введет задержку половины длины фильтра.
Вы находите конверт сигнала путем принятия абсолютное значение аналитического сигнала. Конверт является низкочастотным сигналом по сравнению с исходным сигналом. Чтобы уменьшить его частоту дискретизации, устранить вызов и сглаживать конверт, вы прореживаете этот сигнал и передаете результат через фильтр lowpass.
Инициализируйте необходимые переменные, такие как те для формата кадра и имени файла. Создание и инициализация ваших Системных объектов, прежде чем они будут использоваться в цикле обработки, очень важны для получения оптимальной эффективности.
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]);
Создайте цикл обработки, чтобы выполнить обнаружение конверта на входном сигнале. Этот цикл использует Системные объекты, которых вы инстанцировали.
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 работает путем обработки на квадрат входному сигналу и отправки его через фильтр lowpass.
В этом примере Simulink простая минимальная фаза фильтр lowpass используется, чтобы удалить высокочастотную энергию. Для того, чтобы обеспечить правильное масштабирование, еще две операции включены. Первое должно поместить усиление 2 на сигнале. Поскольку мы только сохраняем более низкую половину энергии сигнала, это усиление повышает итоговую энергию совпадать с ее исходной энергией. Наконец, квадратный корень из сигнала пущен, чтобы инвертировать масштабирующееся искажение от операции обработки на квадрат входного сигнала.
Этот метод полезен, потому что это очень легко реализовать и может быть сделано с фильтром младшего разряда, минимизировав задержку выхода.
Как выше, Метод 2 работает путем создания аналитического сигнала входа с помощью Гильбертова трансформатора.
В этом примере Simulink преобразование Гильберта сигнала найдено с помощью КИХ-фильтра Парков-McClellan с 32 точками. Преобразование Гильберта сигнала затем умножается на i (мнимая единица) и добавило к исходному сигналу. Исходный сигнал задерживается временем прежде чем быть добавленным к преобразованию Гильберта, чтобы совпадать с задержкой, вызванной преобразованием Гильберта, которое является половиной длины Гильбертова фильтра.
Конверт сигнала может быть найден путем принятия абсолютное значение аналитического сигнала. Для того, чтобы устранить вызов и сглаживать конверт, результат подвергается фильтру lowpass.
Обратите внимание на то, что блок Analytic Signal, найденный в DSP System Toolbox™, мог также использоваться, чтобы реализовать этот проект обнаружения конверта.
Все-платформу версия с плавающей точкой модели Simulink показывают ниже. Когда вы запустите модель, вы будете видеть исходный сигнал и результаты обоих детекторов конверта.
Этот пример показывает результаты двух различных детекторов конверта для двух различных типов входных сигналов. Входным выбором является демонстрационный речевой сигнал или синусоида на 100 Гц, которая включает и выключает.
Модель имеет переключаемый вход и два выходных параметров, которые направляются к осциллографам для легкого просмотра. Если сигнал не отображается, дважды кликните на блоке Scope, чтобы открыть его.
Входной scope график показывает исходный сигнал. Сигнал длится в общей сложности 5 секунд с 1 секундой данных, показываемых за один раз.
Первый выходной scope график показывает выход первого детектора конверта. Это - результат обработки на квадрат исходному сигналу и отправки его через фильтр lowpass. Можно ясно видеть, что конверт был успешно извлечен из речевого сигнала.
Второй выходной scope график показывает выход второго детектора конверта, который использует преобразование Гильберта. Хотя выход этого детектора конверта выглядит очень похожим на первый метод, вы видите различия между ними.
Все-платформа версия с плавающей точкой: dspenvdet