Поиск по сайту: |
|
По базе: |
|
Главная страница > Применение > Микроконтроллеров > MSP430 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Генерация и распознавание DTMF-сигналов. Часть II1 ВведениеВо второй части данного примера применения описан приём и распознавание сигналов DTMF при помощи микроконтроллера MSP430. Рассматриваются теоретические и математические вопросы, связанные с реализацией цифровых фильтров. Отдельно рассмотрено применение таких фильтров для выделения требуемых компонентов из аналоговых сигналов. Для аналого-цифрового преобразования используется АЦП, имеющийся в конфигурации C32x. 8 цифровых фильтров обрабатываются в режиме реального времени, из их выходных значений восстанавливаются символы DTMF. Также в данном разделе приведена принципиальная схема, поясняющая подключение аналоговых сигналов к MSP430. 2 Приём сигналов DTMF при помощи цифровых фильтров-резонаторовС целью приёма сигналов DTMF при помощи микроконтроллера без использования специализированных дорогостоящих компонентов, входные импульсы должны быть оцифрованы с помощью аналогово-цифрового преобразователя (АЦП) и распознаны методами цифровой фильтрации. MSP430 подходит для этих целей благодаря следующим особенностям: Несмотря на сравнительно низкую тактовую частоту (до 3.3 МГц)(в современных моделях – до 8МГц, прим. перев.), микроконтроллер имеет достаточно высокую вычислительную мощность благодаря наличию команд, выполняемых за один цикл, аналогичных архитектуре RISC . Благодаря наличию встроенного АЦП, подключение МК к аналоговым системам не представляет сложностей. Необходимость во внешнем АЦП отсутствует. 3 Основы цифровых фильтровВ аналоговой схемотехнике для фильтрации сигналов используются активные и пассивные фильтры, состоящие из резисторов, конденсаторов, катушек индуктивности и усилителей. Обрабатываемые сигналы при этом непрерывны во времени. При использовании цифровой обработки сигналов имеется ряд преимуществ, таких, как повышенная точность и хорошая повторяемость, недостижимых в аналоговой схемотехнике из-за разброса и старения компонентов. Основными компонентами цифровых фильтров являются память и вычислительное устройство, таким образом, они имеют также преимущества с точки зрения структурной простоты. Тем не менее, для их работы также требуются аналогово-цифровые и цифроаналоговые преобразователи. В отличие от аналоговых фильтров, имеющих дело с непрерывно меняющимися сигналами, цифровые фильтры обрабатывают последовательности дискретных отсчётов. Эти значения получаются в процессе «выборки» непрерывного сигнала через фиксированные промежутки времени при помощи АЦП, который в данном случае должен содержать устройство выборки-хранения (УВХ). По теореме о дискретизации [2] частота выборки должна быть не менее, чем в два раза выше максимальной частоты, присутствующей во входном сигнале. Исходя из этого, перед АЦП установлен аналоговый ФВЧ [3]. Если на выходе цифрового фильтра требуется получить аналоговый сигнал, вычисленные значения преобразуются цифроаналоговым преобразователем, на выходе которого сигнал фильтруется при помощи ФВЧ [3]. В данном примере внимание обращено только на обработку отфильтрованного сигнала, обратное преобразование в аналоговый сигнал не требуется. 3.1 Свойства цифровых фильтров-резонаторов Алгоритмы цифровой фильтрации, как правило, требуют большого числа операций умножения. С целью уменьшения числа переполнений и ошибок округления, разрядность операндов должна быть достаточно высокой. По этой причине, желательно использовать для вычислений сигнальные процессоры с аппаратным умножителем. Разрядность при этом имеет диапазон от 16 до 24 бит. Некоторые сигнальные процессоры также имеют возможность работы с числами в формате «плавающая точка», в котором обрабатываемые данные представлены с соответствующей точностью. В этом случае для цифровой фильтрации используются цифровые фильтры-резонаторы (ЦФР) (Wave Digital Filters (WDFs)). Такие фильтры {5,107} аналогичны аналоговым LC – цепям и микрополосковым фильтрам, их характеристики также идентичны характеристикам соответствующих аналоговых фильтров. Особенностью ЦФР является пониженная чувствительность к изменениям коэффициентов {5}. Это особенно важно в нашем случае, т.к. все операции умножения из-за отсутствия аппаратного умножителя выполняются методом «сдвиг-сложение». Таким образом, укорочение и оптимизация коэффициентов экономит время вычислений. При этом, такое упрощение не наносит вреда стабильности частотных характеристик фильтра. В результате применения более коротких коэффициентов понижается ошибка округления, возникающая при умножении. Ещё одно положительное свойство ЦФР – большой динамический диапазон {12, 22}. Стабильность ЦФР не нарушается при разрывах входного сигнала. Это его свойство позволяет обрабатывать запросы прерываний, после чего возвращаться к обработке фильтров. Благодаря «пассивной» природе таких фильтров, к их положительным свойствам можно также отнести быстрое восстановление при перегрузках и других искажениях входного сигнала. Такое поведение известно как «Стабильность ИХ фильтра» (“Response Stability”) {120}. Для обычных цифровых БИХ-фильтров эта проблема нерешаема {5, S 302; 136}, в то время, как ЦФР остаются стабильными даже при «закольцевании» {19}. 3.2 Структура используемых цифровых фильтров-резонаторов
В нашей задаче требуется определение наличия конкретной частоты во входном сигнале. С этой целью используется фильтр, изображенный на рис. 13 и состоящий из контура с последовательным резонансом и «согласующей цепи» с наличием потерь [4]. Амплитудная характеристика такого фильтра показана на рис. 14.
Фильтры рассчитаны таким образом, чтобы резонансная частота в точности соответствовала искомой. Если интересующая нас частота появляется в спектре входного сигнала, она будет усилена, в то время, как остальные частоты будут ослаблены. Коэффициент усиления резонансной частоты, либо коэффициент ослабления остальных частот определяется параметром K в виде -20 log K (дБ). Полоса пропускания фильтра определяется как полоса частот по уровню -10 log K (дБ). Превышение амплитудой на выходе фильтра определённого порога означает присутствие искомой частоты в спектре. Регулировка усиления производится при помощи согласующей цепи с наличием потерь. Структура этой цепи идентична для всех фильтров (см. рис. 15). Цепь с последовательным резонансом состоит из двух элементов задержки и адаптера. Существуют четыре различных конфигурации в зависимости от требуемой резонансной частоты (рис.16).
Т.к. в данном примере арифметика с плавающей точкой не используется, алгоритм фильтра вычисляется с целочисленной точностью 16 бит; коэффициенты умножения присутствуют в конфигурациях A и D, что улучшает динамические характеристики фильтра.
4 Представление чисел и арифметикаТ.к. из ценовых соображений MSP430X325 не содержит аппаратного умножителя, все операции умножения выполняются при помощи сдвигов и сложений либо вычитаний. Любое умножение двух чисел может быть представлено как многократное прибавление множителя. Если над двоичным числом произвести n операций сдвига вправо, результат будет идентичен умножению на 2-n. Т.к. представления коэффициентов в интервале 2n как правило недостаточно, каждая ‘1’ в двоичном числе должна быть заменена при помощи сдвига и последующего сложения. Поясним это на примере умножения с использованием метода сдвига-сложения (shift-and-add): Ввиду того, что в таких числах слишком много знаков после запятой, требуется большое число сложений для того, чтобы представить число в виде дополнения до 2-х. Чтобы повысить скорость обработки в таких случаях, используется кодировка Canonically Signed Digit Code (CSD) [5]. В результате использования кода CSD, число знаков коэффициента после запятой уменьшено до минимума. Это достигнуто введением величины -1 для представления двоичных чисел. Эта величина появляется в вычислениях при вычитании. Вышеприведенный пример при использовании кода CSD будет выглядеть следующим образом: В результате использования кода CSD, процедура данного вычисления сокращена на два сложения путём замены одним вычитанием. Практическая выгода использования кода CSD имеет место только в случае, когда двоичные числа состоят из большого количества единиц. Учитывая, что результат умножения n бит на m бит имеет разрядность n+m бит, а разрядность операндов не может увеличиваться от одного умножения к другому, результат должен быть округлён или младшие биты должны быть отброшены, желательно при этом не потерять требуемую точность. С минимальной ошибкой это может быть обеспечено использованием метода Хорнера [5]. В нижеприведенном примере 12-битный результат формируется умножением 12-битного и 9-битного множителей. Обычное умножение выглядит так: При использовании метода сдвига-сложения: Как видно из примера, ошибка превышает 2 МЗР, из-за того, что большое количество бит было утеряно в результате сдвига вправо. Метод Хорненра лишён этого недостатка, в нём младшие биты сохраняются до тех пор, пока это возможно: Процесс начинается с младшей ‘1’ множителя, в дальнейшем происходит накопление, после чего промежуточный результат сдвигается вправо (на разницу положений бит до следующей ‘1’), с последующим сложением, сдвигом и т.д. Операции абсолютного сдвига (в данном случае 2-8, 2-5, 2-2) выполняются корректно. Вышеописанный процесс используется для введения и оптимизации коэффициентов фильтра, с целью минимизировать вычислительные ресурсы при максимальном сохранении точности. Т.к. арифметические вычисления в микроконтроллере обычно осуществляются с 16-битными целыми операндами, следует договориться о представлении значений сигнала. Для программной обработки операций с плавающей точкой потребуется слишком много времени, таким образом, следует использовать арифметику с фиксированной точкой. Примем следующее распределение бит для алгоритма фильтрации:
2 Бита переполнения 13 Бит данных с фиксированной точкой Таким образом, двоичное число 0.01111B будет представлено в данной системе, как показано на рис. 17:
Отрицательный коэффициент представляется при помощи разделения на две части. Первая часть равна -1, вторая представляет дополнение до требуемого отрицательного значения. Таким образом, -0,3 будет представлено как -1 + 0,7. 5 Расчёт 8-ми цифровых фильтров-резонаторов и оптимизация коэффициентовЦФР используются для распознавания частоты, расчёт таких фильтров требует определения следующих параметров [4]:
Так как наивысшая частота DTMF равна 1633 Гц, по теореме о квантовании частота выборок в 3640 Гц будет достаточной. Это соответствует 1/9 частоты ACLK, равной 32.768 кГц присутствующей в MSP430, и по этой причине она легко может быть сгенерирована таймером. Несмотря на то, что речевые сигналы, попадая на вход АЦП оцифровываются с очень низкой частотой, это не приведёт к некорректному поведению при распознавании DTMF, т.к. сигнал распознаётся как корректный DTMF символ только в том случае, если в спектре присутствуют обе частоты DTMF одновременно на протяжении определённого промежутка времени. Кроме этого, во время передачи сигнала DTMF все посторонние сигналы, включая речевые, должны быть ослаблены не менее, чем на 23 дБ [1]. Резонансные частоты фильтров соответствуют каждой индивидуальной частоте DTMF. Такие частоты должны проходить через фильтр без ослабления. Подавление для остальных частот -20 log K (дБ) выбрано на уровне -40дБ. Это соответствует коэффициенту ослабления K=100. Если сигнал с частотой, равной граничной частоте фильтра (по уровню -10 log K) попадёт в соседний канал DTMF, то при этом гарантируется, что уровень искомой частоты будет в 10 раз выше, чем у соседней частоты. Это соответствует разности в 20 дБ. Однако, в результате укорочения и оптимизации коэффициентов, достичь коэффициента 10 не удается, но при том реальная разница уровней является полностью достаточной для надёжного распознавания частот. При сравнении выходных значений фильтров, частота DTMF считается присутствующей в спектре, если значение на выходе соответствующего фильтра в 10 раз превышает значение на выходах остальных фильтров. Учитывая вышеописанные требования, коэффициенты для 8 фильтров вычислим следующим образом [4]:
Т.к. данные коэффициенты затруднительно представить в двоичной системе и вычисления с их использованием потребуют больших ресурсозатрат, в дальнейшем произведём укорочение и оптимизацию коэффициентов. Величины n1 и n2 являются масштабирующими коэффициентами и довольно свободно могут быть изменены. Поэтому они были округлены до следующей минимальной степени двух, что позволило упростить вычисления до нескольких операций сдвига. Значения коэффициента alpha требуют большего внимания, т.к. они влияют на резонансную частоту. Чтобы удостовериться в корректности проведенного укорочения данных коэффициентов, резонансная частота была пересчитана заново с учётом новых значений. В результате успешной оптимизации были получены следующие значения:
Несмотря на значительное укорочение коэффициентов и, благодаря этому, времени вычисления, отклонение частоты от номинальной несущественно. При внимательном рассмотрении выясняется подобие коэффициентов согласующей цепи с наличием потерь. Это легко объяснимо с учётом того фактора, что данные коэффициенты зависят в основном от параметра -10 log K, который выбран одинаковым для всех фильтров исходя из критерия: соседняя частота DTMF должна быть подавлена на -10 log K . В результате этого, для всех 8-ми фильтров DTMF была выбрана единственная согласующая цепь с округлённым значением. Такое решение имеет массу преимуществ:
Оптимальные значения коэффициентов представлены в таблице:
6 Проверка расчёта фильтров с помощью программ математического моделированияВстроенный в MSP430 АЦП даёт возможность перехода от аналоговых к цифровым сигналам. Однако, для проверки характеристик фильтров, нам потребуются точные значения на выходе фильтров. Получить их непосредственно невозможно (т.к. встроенный ЦАП отсутствует), поэтому проверить амплитудные характеристики фильтра также невозможно. Чтобы получить в этом случае информацию о достигнутых характеристиках фильтров, алгоритм был смоделирован математической программой, с её помощью были получены амплитудные характеристики. В отличие от микроконтроллера, осуществляющего вычисления с 16-битной точностью, алгоритм в данном случае оперирует с точностью плавающей запятой. При этом были использованы укороченные коэффициенты. В качестве примера приведена программа моделирования и результат - амплитудная характеристика фильтра на 770 Гц. Для сравнения также приведена характеристика фильтра с неокруглёнными коэффициентами. (Рис.18): Программа для проверки фильтра на 770 Гц методом математического моделирования Функция с неокруглёнными значениями gamma_1_n1, gamma_2 и n1 Функция с округлёнными значениями Резонансная частота равна 773 Гц, поэтому предварительно полученное значение alpha=0.234375 достигается точно. Усиление фильтра уменьшилось до -36 дБ взамен -40 дБ. Причиной этого является округление коэффициентов gamma_1 и gamma_2. При моделировании с использованием точных значений коэффициентов достигается расчётное значение -40 дБ. Соседняя частота DTMF (697 Гц) имеет усиление -18.5 дБ, что соответствует 1/8 входного значения. Такого разделения достаточно для безошибочного распознавания частоты. Этот пример демонстрирует весьма важное свойство цифровых фильтров-резонаторов – их низкую чувствительность к округлению коэффициентов: несмотря на значительное укорочение коэффициентов и сокращение времени расчёта, характеристики фильтра существенно не изменились.
7 Программное обеспечение для реализации цифровых фильтровАлгоритмы цифровых фильтров требуют большой вычислительной мощности, ввиду большого числа умножений и сложений, требуемых при расчётах – особенно в тех случаях, когда умножение производится без помощи аппаратных умножителей, а осуществляется методом сдвигов-сложений. По этой причине для таких задач часто применяются цифровые сигнальные процессоры, т.к. они имеют быстрый умножитель с накоплением (MAC), или, как минимум, многорегистровый циклический сдвигатель (Barrel Shifter), позволяющий осуществлять операцию сдвига на несколько позиций одной командой. Таким образом, реализовать алгоритм фильтра в реальном времени с использованием медленного микроконтроллера невозможно. Тем не менее, микроконтроллер MSP430 позволяет реализовать такой алгоритм благодаря тому, что инструкции, операнды которых находятся в регистрах, выполняются за один такт. Кроме этого, для повышения вычислительной мощности системная частота повышена с 1 МГц до 3.3 МГц (прим. перев. – на момент перевода макс. частота семейства – 8МГц). Аналоговая часть легко сопрягается с цифровой при помощи встроенного АЦП. Его разрешение в 14 бит достаточно высоко, чтобы гарантировать в последующем хороший динамический диапазон цифрового фильтра. При этом гарантируется, что сигнал с низкой амплитудой будет обработан с такой же точностью, что и сигнал с большой амплитудой. Необходимость во внешнем АЦП соответственно отпадает. Если алгоритм должен быть обработан в режиме реального времени, вычисление определённого «куска» данных должно быть завершено перед тем, как будут получены новые данные. Промежуточное хранение данных в ОЗУ невозможно, т.к. его объёма недостаточно для хранения большого массива данных, поступающих из АЦП с определённой частотой. Для таймера-порта выбрана частота прерываний 3640 Гц. Это соответствует девяти тактам частоты ACLK. АЦП запускается по прерыванию таймера-порта. Т.к. частота ACLK генерируется при помощи «часового» кварца частотой 32.768 кГц, получаемая частота выборки имеет низкое дрожание фазы (джиттер) и высокую стабильность, присущую кварцевому резонатору. При этом гарантируется корректная выборка аналогового сигнала и, соответственно, верные расчётные значения [10]. По завершении преобразования, осуществляется вычисление для 8-ми цифровых фильтров и распознавание частот DTMF на основе полученных значений фильтров. На алгоритм расчёта и распознавания выделено, таким образом, 274.7 мкс. Это соответствует 915 тактам при длительности такта 300 нс. По завершении этого времени вычисление должно повторяться с использованием обновлённых данных АЦП. Реализация алгоритма представлена на рис. 19.
8 Программа распознавания сигналов DTMFС целью распознавания полученного символа DTMF из вычисленных значений фильтров, после вычислений фильтров применяется алгоритм декодирования. Этот алгоритм должен сопоставить распознанные частоты символу DTMF. Кроме этого, в процессе вычисления фильтров производится сравнение их значений. В практической реализации, раздельно для «верхней» (Hi-Group) и «нижней» (Lo-Group) групп частот находится частота с максимальной амплитудой, её значение сохраняется. Таким образом, после каждого вычисления 8-ми фильтров нам известны частоты «верхней» и «нижней» группы с максимальной амплитудой. На рис. 20 представлен алгоритм декодирования: Чтобы убедиться в том, что все фильтры находятся в установившемся режиме и максимумы соответствующих частот определены, всегда производится 20 последовательных просчётов фильтра. Когда обработано достаточное число отсчётов, два максимума из «верхней» и «нижней» группы проверяются на достоверность по двум критериям. Первый критерий – оба максимальных значения должны превышать уровень шума. Второй критерий – незначительность отличия максимальных уровней друг от друга. Конечно, эти критерии могут быть расширены и дополнены с целью улучшения качества приёма относительно слабых сигналов. В том случае, если сигнал удовлетворяет обоим условиям, обе частоты DTMF считаются достоверными. При этом, частоты могут быть признаны сигналами DTMF только по истечении определённого времени. Это осуществляется при помощи счётчика длительности, фиксирующего длительность сигнала. По достижении требуемой длительности, символ DTMF выбирается из таблицы исходя из двух частот, определяющих столбец и строку. Чтобы исключить повторное распознавание одного сигнала, при достижении требуемой длительности сигнала устанавливается соответствующий флаг, сигнализирующий о достоверности принятого символа. При невыполнении одного из условий счётчик длительности декрементируется. Достижение счётчиком нуля интерпретируется как пауза между символами. Флаг при этом сбрасывается. На рис. 21 показано графическое представление временнЫх параметров при распознавании сигнала DTMF:
; Программа вычисления 8-ми цифровых фильтров-резонаторов ; для определения сигналов DTMF. ; Входной аналоговый сигнал оцифровывается на входе A4 ; с частотой отсчётов 3640 Гц ; Распознанные символы DTMF отображаются на ЖКИ ; Автор Robert Siwy, October 1997 FILTER_1 .equ 1 ;включить фильтр на 1633 FILTER_2 .equ 1 ;включить фильтр на 1477 FILTER_3 .equ 1 ;включить фильтр на 1336 FILTER_4 .equ 1 ;включить фильтр на 1209 FILTER_5 .equ 1 ;включить фильтр на 941 FILTER_6 .equ 1 ;включить фильтр на 852 FILTER_7 .equ 1 ;включить фильтр на 770 FILTER_8 .equ 1 ;включить фильтр на 697 ; Определения для используемой аппаратной части STACK .equ 400h TCCTL .equ 42h TCPLD .equ 43h TCDAT .equ 44h BTCTL .equ 40h LCDCTL .equ 30h IE1 .equ 00h IE2 .equ 01h SCFI .equ 50h SCFQCTL .equ 52h WDTCTL .equ 0120h WDTCL .equ 88h WDTPW .equ 05a00h ACTL .equ 0114h PD .equ 1000h ADAT .equ 0118h ; Программные определения DISPL .equ 031h ;Базовый адрес ЖКИ LPM0 .equ 010h LENGTH .equ 7 ;(Length+1) * 5.48 мс = длительность сигнала THRE .equ 100 ; порог шума FLAG_REG .equ r4 LCOUNT .equ r5 ROW .equ r6 ; Строка «нижней» группы COL .equ r7 ; Столбец «верхней» группы MAXLO .equ r8 IN .equ r9 ; Входной регистр MAXHI .equ r10 OUT .equ r13 COUNT .equ r15 ;****************************************************************************** ; Распределение памяти для 8-ми фильтров ;****************************************************************************** .bss T1_1633, 2 .bss T2_1633, 2 .bss T1_1477, 2 .bss T2_1477, 2 .bss T1_1336, 2 .bss T2_1336, 2 .bss T1_1209, 2 .bss T2_1209, 2 .bss T1_941, 2 .bss T2_941, 2 .bss T1_852, 2 .bss T2_852, 2 .bss T1_770, 2 .bss T2_770, 2 .bss T1_697, 2 .bss T2_697, 2 ;****************************************************************************** ; Программа ;****************************************************************************** .text INIT mov #STACK-2,SP ; инициализация стека mov #WDTPW+WDTCL,&WDTCTL ; остановить сторожевой таймер ; Инициализация MCLK mov.b #102-1,&SCFQCTL ;102*32.768Hz=3,342MHz bis.b #008h,&SCFI0 ; Макс. частота 3MHz ; Инициализация ЖКИ/очистка памяти ЖКИ CLRSCR mov #11,r5 clr1 clr.b DISPL-1(r5) dec r5 jnz clr1 mov.b #017h,&BTCTL ; Тактирование ЖКИ mov.b #0ffh,&LCDCTL ; Генератор ЖКИ ; Инициализация АЦП mov #04912h,&ACTL ; Инициализация АЦП, ; внутренний ИОН bis.b #004h,&IE2 ; разрешить прерывания от АЦП ; Инициализация 8-битного таймера mov.b #100h-9,&TCPLD ;счёт до 9 тактов ACLK=274 мкс mov.b #000h,&TCDAT ; загрузка счётчика mov.b #068h,&TCCTL ; Инициализация 8-битного таймера mov.b #008h,&IE1 ; разрешить прерывания от таймера eint bis.b #LPM0,SR ; выкл. CPU DTMF_FILTER inc COUNT cmp #20,COUNT ;20 отсчётов принято? jlo FILTER ; нет ; проверка 1-го условия cmp #THRE,MAXLO ;Максимум для «нижней» группы ; ниже порога? jlo FALSE ; да, выход cmp #THRE,MAXHI ; Максимум для «верхней» группы ; ниже порога? jlo FALSE ; да, выход ; проверка 2-го условия rra MAXLO ; разделить MAXLO на 2 cmp MAXLO,MAXHI ;MAXHI > MAXLO/2 jlo FALSE ; да, выход rla MAXLO ; восстановить MAXLO rra MAXHI ; разделить MAXHI на 2 cmp MAXHI,MAXLO ;MAXLO > MAXHI/2 jlo FALSE ; да, выход cmp #LENGTH,LCOUNT ; длительность сигнала достаточна? jeq DISPLAY ; да, переход к отображению inc LCOUNT ; нет, инкремент счётчика ; длительности jmp CONTINUE DISPLAY bit #01h,FLAG_REG ; проверка флага jnz CONTINUE ; распознавание завершено add ROW,COL ; суммировать строку ; и столбец таблицы mov.b DTMF_Tab(COL),DISPL ; отобразить символ DTMF bis #01h,FLAG_REG ; установить флаг jmp CONTINUE FALSE tst LCOUNT jnz FALSE1 mov.b #008h,DISPL+3 ; отобразить паузу mov.b #008h,DISPL+4 ; " " bic #01h,FLAG_REG ; очистить флаг jmp CONTINUE FALSE1 dec LCOUNT CONTINUE clr MAXHI clr MAXLO clr COUNT FILTER mov &ADAT,IN ; Отсчёт ? r9/IN sub #01fffh,IN ; сформировать значение со знаком rla IN ;*2 rla IN ;*2 .if FILTER_1 FILTER_1633 mov T2_1633,r12 ;N11=T2/4-T1 mov r12,r13 rra r12 rra r12 sub T1_1633,r12 ;N11 в r12 mov r12,r14 ;N11*2*alpha-T2 rra r12 rra r12 rra r12 mov r12,r11 rra r12 add r12,r11 sub r13,r11 ;N15 в r11 mov r11,T2_1633 ;N3=N15/4-N11 rra r11 rra r11 sub r14,r11 ;N3 в r11 ; Общая согласующая цепь с потерями ; требуется N3 в r11 ;1/n1=32, gamma_2=-1+1/32) ;n1*gamma_1=1/32 mov r11,r13 ; сохранить N3 в r13 mov IN,r12 ;T1=N3*gamma_2+n1*gamma_1*IN rra r12 rra r12 rra r12 rra r12 rra r12 ;n1*gamma_1*IN in r12 sub r11,r12 rra r11 rra r11 rra r11 rra r11 rra r11 add r11,r12 ;T1 в r12 mov r12,T1_1633 ;сохранить T1 в ОЗУ rla r13 ;N3 * 32 rla r13 rla r13 rla r13 rla r13 rla r12 ;T1 * 32 rla r12 rla r12 rla r12 rla r12 sub IN,r12 add r12,OUT ;В r13 выходное значение ;************************************* cmp OUT,MAXHI ; Сравнить выходное значение ; с максимумом jge SWAP1 mov OUT,MAXHI ; замена максимума mov #03,COL ; столбец = 3 SWAP1 ;************************************ ;окончание согласующей цепи FILTER_1633_END endif if FILTER_2 FILTER_1477 mov T2_1477,r12 ; N11=T/2-T1 mov r12,r13 rra r12 sub T1_1477,r12 ;N11 в r12 mov r12,r14 ;N15=N11*2*alpha-T2 rra r12 rra r12 mov r12,r11 rra r12 rra r12 add r12,r11 rra r12 add r12,r11 sub r13,r11 ;N15 в r11 mov r11,T2_1477 ;N3=N15/2-N11 rra r11 sub r14,r11 ;N3 в r11 ; Общая согласующая цепь с потерями ; требуется N3 в r11 ;1/n1=32, gamma_2=-1+1/32) ;n1*gamma_1=1/32 mov r11,r13 ; сохранить N3 в r13 mov IN,r12 ;T1=N3*gamma_2+n1*gamma_1*IN rra r12 rra r12 rra r12 rra r12 rra r12 ;n1*gamma_1*IN в r12 sub r11,r12 rra r11 rra r11 rra r11 rra r11 rra r11 add r11,r12 ;T1 в r12 mov r12,T1_1477 ;сохранить T1 в ОЗУ rla r13 ;N3 * 32 rla r13 rla r13 rla r13 rla r13 rla r12 ;T1 * 32 rla r12 rla r12 rla r12 rla r12 sub IN,r12 add r12,OUT ; В r13 выходное значение ;************************************ cmp OUT,MAXHI ; Сравнить выходное значение ; с максимумом jge SWAP2 mov OUT,MAXHI ; замена максимума mov #02,COL ; столбец = 2 SWAP2 ;************************************ ; окончание согласующей цепи FILTER_1477_ENDE .endif .if FILTER_3 FILTER_1336 mov T2_1336,r12 ;N11=T2-T1 mov r12,r13 sub T1_1336,r12 ;N11 в r12 mov r12,r14 ;N15=N11*alpha-T2 rra r12 rra r12 mov r12,r11 rra r12 rra r12 add r12,r11 rra r12 rra r12 add r12,r11 sub r13,r11 ;N15 в r11 mov r11,T2_1336 sub r14,r11 ;N3=N15-N11 в r11 ; Общая согласующая цепь с потерями ; требу ется N3 в r11 ;1/n1=32, gamma_2=-1+1/32) ;n1*gamma_1=1/32 mov r11,r13 ;сохранить N3 в r13 mov IN,r12 ;T1=N3*gamma_2+n1*gamma_1*IN rra r12 rra r12 rra r12 rra r12 rra r12 ;n1*gamma_1*IN в r12 sub r11,r12 rra r11 rra r11 rra r11 rra r11 rra r11 add r11,r12 ;T1 в r12 mov r12,T1_1336 ; сохранить T1 в ОЗУ rla r13 ;N3 * 32 rla r13 rla r13 rla r13 rla r13 rla r12 ;T1 * 32 rla r12 rla r12 rla r12 rla r12 sub IN,r12 add r12,OUT ; В r13 выходное значение ;****************************************** cmp OUT,MAXHI ; Сравнить выходное значение ; с максимумом jge SWAP3 mov r13,MAXHI ; замена максимума mov #01,COL ; столбец = 1 SWAP3 ;************************************ ; окончание согласующей цепи FILTER_1336_ENDE .endif .if FILTER_4 FILTER_1209 mov T2_1209,r13 ;N1=(T1-T2)*alpha mov T1_1209,r11 mov r11,r14 sub r13,r11 rra r11 ;N1 в r11 mov r11,r12 ;N3=N1-T2 sub r13,r11 ;N3 в r11 sub r14,r12 ;N2=N1-T1 в r12 mov r12,T2_1209 ; Общая согласующая цепь с потерями ; требу ется N3 в r11 ;1/n1=32, gamma_2=-1+1/32) ;n1*gamma_1=1/32 mov r11,r13 ; сохранить N3 в r13 mov IN,r12 ;T1=N3*gamma_2+n1*gamma_1*IN rra r12 rra r12 rra r12 rra r12 rra r12 ;n1*gamma_1*IN в r12 sub r11,r12 rra r11 rra r11 rra r11 rra r11 rra r11 add r11,r12 ;T1 в r12 mov r12,T1_1209 ; сохранить T1 в ОЗУ rla r13 ;N3 * 32 rla r13 rla r13 rla r13 rla r13 rla r12 ;T1 * 32 rla r12 rla r12 rla r12 rla r12 sub IN,r12 add 12,OUT ; В r13 выходное значение ;****************************************** cmp OUT,MAXHI ; Сравнить выходное значение ; с максимумом jge SWAP4 mov r13,MAXHI ; замена максимума mov #00,COL ; столбец = 0 SWAP4 ;************************************ ; окончание согласующей цепи FILTER_1209_ENDE .endif .if FILTER_5 FILTER_941 mov T2_941,r13 ;N1=(T1-T2)*alpha mov T1_941,r12 mov r12,r14 sub r13,r12 rra r12 rra r12 rra r12 rra r12 rra r12 mov r12,r11 rra r12 add r12,r11 mov r11,r12 ;N1 в r11/r12 sub r13,r11 ;N3=N1-T2 в r11 sub r14,r12 ;N2=N1-T1 mov r12,T2_941 ; Общая согласующая цепь с потерями ; требу ется N3 в r11 ;1/n1=32, gamma_2=-1+1/32) ;n1*gamma_1=1/32 mov r11,r13 ; сохранить N3 в r13 mov IN,r12 ;T1=N3*gamma_2+n1*gamma_1*IN rra r12 rra r12 rra r12 rra r12 rra r12 ;n1*gamma_1*IN в r12 sub r11,r12 rra r11 rra r11 rra r11 rra r11 rra r11 add r11,r12 ;T1 в r12 mov r12,T1_941 ; сохранить T1 в ОЗУ rla r13 ;N3 * 32 rla r13 rla r13 rla r13 rla r13 rla r12 ;T1 * 32 rla r12 rla r12 rla r12 rla r12 sub IN,r12 add r12,OUT ; В r13 выходное значение ;****************************************** cmp OUT,MAXLO ; Сравнить выходное значение ; с максимумом jge SWAP5 mov r13,MAXLO ; замена максимума mov #012,ROW ; строка = 12 SWAP5 ;************************************ ; окончание согласующей цепи FILTER_941_ENDE .endif .if FILTER_6 FILTER_852 mov T2_852,r11 ;N1=(T2-T1)*alpha mov r11,r12 mov T1_852,r13 sub r13,r12 rra r12 rra r12 rra r12 rra r12 mov r12,r14 rra r12 add r12,r14 ;N1 в r14 add r14,r11 ;N3=T2+N1 в r11 add r14,r13 ;N2=T1+N1 mov r13,T2_852 ; Общая согласующая цепь с потерями ; требу ется N3 в r11 ;1/n1=32, gamma_2=-1+1/32) ;n1*gamma_1=1/32 mov r11,r13 ; сохранить N3 в r13 mov IN,r12 ;T1=N3*gamma_2+n1*gamma_1*IN rra r12 rra r12 rra r12 rra r12 rra r12 ;n1*gamma_1*IN в r12 sub r11,r12 rra r11 rra r11 rra r11 rra r11 rra r11 add r11,r12 ;T1 в r12 mov r12,T1_852 ; сохранить T1 в ОЗУ rla r13 ;N3 * 32 rla r13 rla r13 rla r13 rla r13 rla r12 ;T1 * 32 rla r12 rla r12 rla r12 rla r12 sub IN,r12 add r12,OUT ; В r13 выходное значение ;****************************************** cmp OUT,MAXLO ; Сравнить выходное значение ; с максимумом jge SWAP6 mov r13,MAXLO ; замена максимума mov #08,ROW ; строка = 8 SWAP6 ;************************************ ; окончание согласующей цепи FILTER_852_ENDE .endif .if FILTER_7 FILTER_770 mov T2_770,r11 ;N1=(T2-T1)*alpha mov r11,r12 mov T1_770,r13 sub r13,r12 rra r12 rra r12 mov r12,r14 rra r12 rra r12 rra r12 rra r12 sub r12,r14 ;N1 в r14 add r14,r11 ;N3=T2+N1 в r11 add r14,r13 ;N2=T1+N1 mov r13,T2_770 ; Общая согласующая цепь с потерями ; требу ется N3 в r11 ;1/n1=32, gamma_2=-1+1/32) ;n1*gamma_1=1/32 mov r11,r13 ; сохранить N3 в r13 mov IN,r12 ;T1=N3*gamma_2+n1*gamma_1*IN rra r12 rra r12 rra r12 rra r12 rra r12 ;n1*gamma_1*IN в r12 sub r11,r12 rra r11 rra r11 rra r11 rra r11 rra r11 add r11,r12 ;T1 в r12 mov r12,T1_770 ;сохранить T1 в ОЗУ rla r13 ;N3 * 32 rla r13 rla r13 rla r13 rla r13 rla r12 ;T1 * 32 rla r12 rla r12 rla r12 rla r12 sub IN,r12 add r12,OUT ; В r13 выходное значение ;****************************************** cmp OUT,MAXLO ; Сравнить выходное значение ; с максимумом jge SWAP7 mov r13,MAXLO ; замена максимума mov #04,ROW ; строка = 4 SWAP7 ;************************************ ; окончание согласующей цепи FILTER_770_ENDE .endif .if FILTER_8 FILTER_697 mov T2_697,r11 mov r11,r12 mov T1_697,r13 sub r13,r12 rra r12 rra r12 mov r12,r14 rra r12 add r12,r14 rra r12 rra r12 rra r12 sub r12,r14 ;N1 в r14 add r14,r11 ;N3=T2+N1 в r11 add r14,r13 mov r13,T2_697 ; Общая согласующая цепь с потерями ; требу ется N3 в r11 ;1/n1=32, gamma_2=-1+1/32) ;n1*gamma_1=1/32 mov r11,r13 ;сохранить N3 в r13 mov IN,r12 ;T1=N3*gamma_2+n1*gamma_1*IN rra r12 rra r12 rra r12 rra r12 rra r12 ;n1*gamma_1*IN в r12 sub r11,r12 rra r11 rra r11 rra r11 rra r11 rra r11 add r11,r12 ;T1 в r12 mov r12,T1_697 ; сохранить T1 в ОЗУ rla r13 ;N3 * 32 rla r13 rla r13 rla r13 rla r13 rla r12 ;T1 * 32 rla r12 rla r12 rla r12 rla r12 sub IN,r12 add r12,OUT ; В r13 выходное значение ;****************************************** cmp OUT,MAXLO ; Сравнить выходное значение ; с максимумом jge SWAP8 mov OUT,MAXLO ; замена максимума mov #00,ROW ; строка = 0 SWAP8 ;************************************ ; окончание согласующей цепи FILTER_697_ENDE .endif FILTER_ENDE bis.b #LPM0,SR ; откл. CPU br #DTMF_FILTER ;**************************************************************** ; Прерывание 8-битного таймера ;**************************************************************** TIM_8B bic #PD,&ACTL ; вкл. АЦП bis #001h,&ACTL ; старт преобразования reti ;**************************************************************** ; Прерывание АЦП ;**************************************************************** AD_INT bis #PD,&ACTL ; АЦП выл. bic #0f0h,0(SP) ; активный режим по выходу ? стек reti ;**************************************************************** ; Определения ЖКИ ;**************************************************************** LCD_TYPE a .equ 01h b .equ 02h c .equ 10h d .equ 04h e .equ 80h f .equ 20h g .equ 08h h .equ 40h ;**************************************************************** ; Таблица ЖКИ для символов DTMF ;**************************************************************** DTMF_Tab .byte b+c ; отображает"1" .byte a+b+d+e+g ; отображает "2" .byte a+b+c+d+g ; отображает "3" .byte a+b+c+e+f+g ; отображает "A" .byte b+c+f+g ; отображает "4" .byte a+c+d+f+g ; отображает "5" .byte a+c+d+e+f+g ; отображает "6" .byte c+d+e+f+g ; отображает "B" .byte a+b+c ; отображает "7" .byte a+b+c+d+e+f+g ; отображает "8" .byte a+b+c+d+f+g ; отображает "9" .byte a+d+e+f ; отображает "C" .byte a+d+e+f+g ; отображает "E" .byte a+b+c+d+e+f ; отображает "0" .byte a+e+f+g ; отображает "F" .byte b+c+d+e+g ; отображает "D" ;**************************************************************** ; Таблица векторов прерываний ;**************************************************************** .sect "Int_Vect" ,0ffe0h .word INIT ; Порт0, биты от 2 до 7 .word INIT ; Базовый таймер Basic Timer .word INIT ; нет источника .word INIT ; нет источника .word INIT ; таймер-порт Timer Port .word AD_INT ; завершение преобразования АЦП .word INIT ; нет источника .word INIT ; нет источника .word INIT ; нет источника .word INIT ; нет источника .word INIT ; Watchdog/Timer, режим Timer .word INIT ; нет источника .word TIM_8B ; 8-битный таймер Timer (P0.0 Int) .word INIT ; Порт0.0 .word INIT ; NMI, срыв генерации .word INIT ; POR, внеш. Reset, Watchdog 9 Аппаратная частьПреобразование аналоговых сигналов в цифровые осуществляется при помощи АЦП, встроенного в MSP430C25x. Источник опорного напряжения выведен на ножку SVCC. Оно может быть подано снаружи, либо в качестве ИОН можно использовать напряжение питания контроллера (VDD). Таким образом, 14-битный диапазон соответствует диапазону напряжений от 0 до SVCC. Рабочее напряжение должно быть 5В, т.к. выбрана максимальная тактовая частота процессора 3.3 МГц(прим. перев. – на момент перевода макс. частота семейства – 8МГц, а макс. рабочее напряжение 3,6В). Если это же напряжение используется в качестве опорного для АЦП и подключено встроенным ключом к выводу SVCC, то можно обойтись без внешнего ИОН. Один МЗР, таким образом, соответствует величине 0.305 мВ. Доступные в продаже коммерческие приёмники DTMF принимают сигнал в диапазоне от +1 дБм (600?) до -31 дБм(600?). Это соответствует амплитуде сигнала от 1.230В до 30.8 мВ. Исходя из этого, разрешение наименьшего входного напряжения составляет не менее 100 МЗР. Если всё же требуется работа с более слабыми входными сигналами, к выводу SVCC следует подключать внешний ИОН. Конденсатор (C1) фильтрует помехи от внешнего или внутреннего ИОН. Для вычисления компонентов цифрового фильтра требуются значения со знаком, не поддерживаемые имеющимся АЦП. По этой причине, аналоговый вход смещён резистивным делителем (R1/R2) на величину SVCC/2, а входной сигнал подаётся через разделительный конденсатор C2. Численное значение SVCC/2 позже вычитается из каждого входного отсчёта. Если установившееся выходное значение АЦП численно равно 01fffh при разрешении в 14 бит, то оно будет равно напряжению SVCC/2, и остаток от вычитания значения SVCC/2 будет 01fffh-01fffh=0000h. Положительный входной сигнал, следовательно, будет соответствовать положительным численным значениям и наоборот. Развязывающий конденсатор C2 вкупе с резисторами R3 + ( R1 || R2 ) формируют ФВЧ. С учётом того, что частота среза выбрана примерно в 200 Гц, помехи с более низкой частотой, например сетевые, будут подавлены. Вход АЦП защищён от перенапряжения резистором R3 и стабилитроном D1. Принципиальная схема приведена на рис. 22:
Так как разрядность измеряемого значения ограничена 14-ю битами, в то время, как обработка в ЦПУ производится с 16-ти битной разрядностью, перед вычислениями значения отсчётов сдвигаются влево дважды, что соответствует умножению на 4. Благодаря такому масштабированию, улучшается динамический диапазон и уменьшается шум, вносимый при округлении в процессе умножения. 10 Измерения и результатыНа рис. 23 показана длительность процесса фильтрования в пределах периода квантования. Канал 1 представляет прерывания АЦП; по каждому прерыванию выводится сигнал на выход порта. Канал 2 показывает длительность процесса вычисления фильтров; в начале процесса в порт выводится лог. «1», по завершению алгоритма – лог. «0». Как видно из рисунка, алгоритм занимает всего 55% доступного времени. Системная частота равна 3.3 МГц. Длительность такта при этом около 300 нс. Таким образом. доступно 915 тактов на период квантования. 474 такта требуются для выполнения 359 инструкций. Следовательно, результирующая вычислительная мощность равна 2.53 MIPS. В результате использования большого количества инструкций типа «регистр-регистр», в среднем требуется только 1.32 цикла на инструкцию. Даже с учётом высокой вычислительной мощности, потребляемый устройством ток всего около 1.8 мА. Программа занимает примерно 1КБ ПЗУ и требует 32 байта ОЗУ.
11 ЗаключениеВычисления в системах реального времени требуют высокой вычислительной мощности, поэтому для таких целей часто используют цифровые сигнальные процессоры (DSP). Применение MSP430 в такой задаче для вычисления цифровых фильтров не является традиционным, в частности из-за того, что операции умножения осуществляются без использования аппаратного умножителя. Тем не менее, MSP430 является подходящим выбором в тех случаях, когда требуется распознавание частот в массиве цифровых отсчётов, а вычисленные значения не требуется выводить при помощи ЦАП. В MSP430 имеется в наличии высокопроизводительный АЦП. Его разрешение 14 бит гарантирует широкий динамический диапазон при вычислениях. В нашем примере частоты с входными уровнями от 25 мВ RMS до 1.5 В RMS обрабатываются без проблем. Динамический диапазон при этом превышает 35 дБ, что позволяет избавиться от внешних приёмников DTMF. Так как 14-битный АЦП имеет теоретический динамический диапазон 84 дБ, есть возможность дальнейшего расширения динамического диапазона в обе стороны. Одним из способов является использование внешнего ИОН. В зависимости от сложности фильтра и требуемой частоты сэмплирования, система может работать с сигналами вплоть до 5 кГц. Расчёт и реализация восьми узкополосных полосовых фильтров, описанные в данном примере, демонстрируют:
Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|