Микропроцессоры и микроконтроллеры

 
 
 
«Трудность работы с програмистом заключается в том, что вы не можете понять что он делает до тех пор пока не стало слишком поздно.»
Seymour Cray
Русский | Українська


Микропроцессоры и микроконтроллеры :: Статьи :: Современный автоответчик на базе ARM.Часть шестая

Современный автоответчик на базе ARM.Часть шестая

ДЕТЕКТИРОВАНИЕ СИГНАЛА

Детектирование сигнала позволяет системе определять, когда звонящий повесит трубку. После этого телефонная компания посылает тональный сигнал, который в США представляет собой комбинацию частот 350 и 440 Гц. В некоторых странах используется модулированный сигнал, что может потребовать незначительного изменения в процедуре детектирования.

Детектирование тональных сигналов работает четко. Так как система буферирования уже имелась, я применил тот же метод для обнаружения сигнала. Я увеличил время обнаружения примерно до 1 с (40 буферов из 205 выборок). Процесс должен запускаться одновременно с записью звукового файла. Так как необходимо определить только две частоты, данная процедура в четыре раза легче по сравнению с детектированием DTMF-сигналов. Речь легко может включать один из двух фильтров. Она может запускать оба фильтра, но так как детектирование должно пройти без единой потери в течении секунды, это нежелательно.

Во время записи WAV-файла, в конце программы обработки прерывания, которая выводит выборки, пресловутая команда go to посылает поток данных на обработку DTMF-сигналов, где выборки собраны в пакеты по 205 значений. Затем значения из буфера посылаются в детектор сигнала в фоновом режиме.

СЕКРЕТЫ КОДИРОВАНИЯ СО СДВИГОМ 4ACTOTbI(FSK)

Демодулятор FSK извлекает из телефонной линии данные идентификатора номера звонящего абонента. Для демодуляции FSK может быть использован простой контурный детектор, управляемый счетчиком, в том числе и сверхминиатюрный 8-битный микроконтроллер. Такие демодуляторы хороши, если сигнал идеален, но в реальных (с шумами) приложениях они показывают ограниченную производительность. Я не смог запустить такой демодулятор на своей телефонной линии, оборудованной

DSL. Мне необходим высокопроизводительный детектор.

Интересно, что тяжело найти информацию о демодуляции FSK-сигналов без применения контурного детектора. Одна электронная компания, не буду ее называть, даже перенесла исходный код из руководства по применению в оператор ввода данных (.word xxxxh) в сердце демодулятора, явно пытаясь скрыть секрет метода. После некоторого поиска по сети я в конечном счете нашел статью «FSK: сигналы и методы демодуляции», в которой автор Боб Ватсон описывает подход к решению проблемы с помощью фильтров.

Также я нашел практическое решение в мире радиолюбителей: система передачи данных, называемая пакетной радиосвязью, может использовать такую модуляцию. Радиосвязь, как правило, имеет плохую среду передачи данных. Шумы, искажения, фазовый сдвиг являются типичными помехами, воздействующими на сигнал. Приемник должен быть достаточно устойчивым к таким помехам.

Система FSK, применяемая в радиолюбительской практике, подобна той, которую используют телефонные компании для передачи идентификационного номера звонящего абонента в соответствии со стандартом Bell 202. Скорость сигнала составляет 1200 бит в секунду. Частота 0 равна 2200 Гц. Частота 1 равна 1200 Гц.

Существуют и отличия. Например, пакетная радиосвязь синхронная, а идентификатор номера — асинхронный. Хотя в действительности это не оказывает влияния на обработку сигнала. Практическая реализация скрытой FSK-демодуляции включает в себя два фильтра, настроенных на частоты 0и1.

Демодулятор использует четыре таблицы. Таблицы coeffloi[] и coefflog[] содержат исходные значения синуса и косинуса восьми выборок на низкой частоте (1200 Гц). coeffhii[] и coefflhiq[] — значения синуса и косинуса восьми

Таблицы  coeffloi

выборок на высокой частоте (2200 Гц). Каждый раз, когда выборка извлекается из АЦП, запускаются низко- и высокочастотные фильтры, содержащие последние восемь выборок. Этот процесс подробно описан в листинге 2.

По окончании цикла фильтрации таблицы outloi и outloq представляют фазу и амплитуду низкочастотных (1200 Гц) компонентов входного сигнала. Таблицы outhii и outhiq — соответственно фазу и амплитуду сигнала частотой 2200 Гц. Мне не интересны значения фазы, так как я просто могу подсчитать полную энергию каждого фильтра, взяв сумму квадратов компонентов I и О (см- Рис\' 5). После этого я могу вычесть энергию, определенную нижним фильтром из энергии, взятой в верхнем фильтре. Если результат положительный, то принимается высокая частота (2200 Гц, бит 0). Если же разница отрицательная, то берется низкая частота (1200 Гц, бит 1).