Этот пример показывает, как реализовать две общепринятых методики обнаружения конверта. Одна обработка на квадрат использования метода и фильтрация 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 = dsp.TimeScope( ... 'NumInputPorts',2, ... '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], ... 'TimeSpanOverrunAction','Scroll'); pos = scope1.Position; scope2 = dsp.TimeScope( ... 'NumInputPorts',2, ... '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], ... 'TimeSpanOverrunAction','Scroll');
Создайте цикл обработки, чтобы выполнить обнаружение конверта на входном сигнале. Этот цикл использует Системные объекты, которых вы инстанцировали.
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 график показывает вывод первого детектора конверта. Это - результат обработки на квадрат исходному сигналу и отправки его через фильтр нижних частот. Можно ясно видеть, что конверт был успешно извлечен от речевого сигнала.
Второй выходной scope график показывает вывод второго детектора конверта, который использует Гильбертово преобразование. Хотя вывод этого детектора конверта выглядит очень похожим на первый метод, вы видите различия между ними.
Все-платформа версия с плавающей точкой: dspenvdet