В HTML      В PDF
микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Обзоры по типам > Микроконтроллеры

реклама

 
радиационно стойкие ПЗУ Миландр

Продажа силового и бронированного кабеля и провода в Москве

текст еще



Обработка сигнала с помощью умножительно-аккумуляторного блока (MAC) контроллера MAXQ

Традиционно микроконтроллеры и цифровые сигнальные процессоры (DSP) рассматривают как стоящие на противоположных концах спектра микрокомпьютеров. В то время как микроконтроллеры наилучшим образом подходят для приложений, требующих быстрого отклика на несинхронизированные события, DSP блестяще проявляют себя в приложениях, где необходимы интенсивные математические вычисления. Микроконтроллеры можно использовать для арифметических приложений, однако принцип работы большинства микроконтроллеров «одна операция за одну команду» делает такое использование малоэффективным. Сходным образом, DSP можно применить для приложений управления, но внутренняя архитектура большинства DSP делает эту операцию неэффективной как с программной, так и с временной точки зрения.

Выбор между DSP и традиционным микроконтроллером усложняется, когда приложение, в основном ориентированное на задачи управления, все же включает некоторые операции по обработке сигнала. В таких приложениях заманчиво «впихнуть» программу DSP в микроконтроллер. Однако разработчик часто обнаруживает, что приложение затрачивает большую часть времени на выполнение вычислений DSP, из-за чего страдают функции управления.

Это противоречие может быть разрешено в современной архитектуре процессоров, такой, как MAXQ. В модульной архитектуре MAXQ в состав микроконтроллера может быть добавлен умножительно-аккумуляторный блок (MAC), легко интегрируемый в архитектуру. С помощью аппаратного блока MAC можно выполнять в одном цикле операции умножения и аккумулирования 16-разрядных операндов без влияния на приложение, выполняемое процессорным ядром. В данной статье приведены примеры того, как модуль MAC можно использовать в типовом микроконтроллере MAXQ для решения реальных задач.

Использование модуля MAC в MAXQ

Обычное применение DSP – фильтрация аналогового сигнала. В данном приложении аналоговый сигнал подается на АЦП, и получившаяся последовательность отсчетов фильтруется в цифровом виде. Реализация фильтра в общем виде может быть описана следующей формулой:

где bi и ai характеризуют прямой и обратный отклики системы.

В зависимости от значений ai и bi цифровые фильтры разделяются на две основные категории – фильтры с конечной импульсной характеристикой (FIR) и фильтры с бесконечной импульсной характеристикой (IIR). Если система не содержит элементов обратной связи (все ai = 0), фильтр относится к классу FIR:

Если же элементы обоих типов (ai и bi) – ненулевые, фильтр относится к классу IIR.

Как видно из вышеприведенной формулы для фильтра FIR, основные математические операции в этом случае – умножение каждого отсчета на входе на постоянную величину и последующее суммирование с накоплением n раз. Ниже приводится фрагмент на языке С, иллюстрирующий этот пример:

    y[n]=0;
    for(i=0; i<n; i++)
            y[n] += x[i] * b[i];

Для микропроцессора с блоком умножителя тот же результат можно получить согласно следующей псевдо-ассемблерной программе:

        move  ptr0, #x         ;Primary data pointer -> samples
        move  ptr1, #b         ;Secondary DP -> coefficients
        move  ctr, #n          ;Loop counter gets number of samples
        move  result, #0       ;Clear result register
ACC_LOOP:
        move  acc, @ptr0       ;Get a sample
        mul   @ptr1            ;Multiply by coefficient
        add   result           ;Add to previous result
        move  result, acc      ;...and save the result back
        inc   ptr0             ;Point to next sample
        inc   ptr1             ;Point to next coefficient
        dec   ctr              ;Decrement loop counter
        jump  nz, ACC_LOOP     ;Jump if there are more samples
        end

Таким образом, даже с участием умножителя, цикл умножения и аккумулирования требует 12 команд и (полагая исполнение каждой команды за один такт) 4+8n тактов.

Умножитель MAXQ является реальным умножительно-аккумуляторным блоком. При выполнении той же операции в архитектуре MAXQ кодовое пространство сокращается с 12 слов до 9 слов, а время выполнения ограничивается 4+5n тактами.

       move   DP[0], #x         ; DP[0] -> x[0]
       move   DP[1], #b         ; DP[1] -> b[0]
       move   LC[0], #loop_cnt  ; LC[0] -> number of samples
       move   MCNT, #INIT_MAC   ; Initialize MAC unit
MAC_LOOP:
       move   DP[0], DP[0]      ; Activate DP[0]
       move   MA, @DP[0]++      ; Get sample into MAC
       move   DP[1], DP[1]      ; Activate DP[1]
       move   MB, @DP[1]++      ; Get coeff into MAC and multiply
       djnz   LC[0], MAC_LOOP

Обратите внимание, что в умножительно-аккумуляторном блоке MAXQ запрошенная операция выполняется автоматически при загрузке второго операнда в блок. Результат записывается в регистр MC. Заметьте, что размер регистра MC составляет 40 бит, поэтому в него может быть просуммировано большое количество 32-битных результатов перемножения, прежде чем наступит переполнение. Это позволяет избежать традиционного подхода, когда после каждой элементарной операции необходимо проверять переполнение. В качестве примера эффективного использования MAC при обработке сигнала, рассмотрим простой пример двухтонового мультичастотного передатчика (DTMF).

Обзор DTMF

DTMF – технология передачи сигнала, использующаяся в телефонной сети для передачи информации об адресе с сетевого терминала (телефон или иное устройство коммуникации) на телефонную станцию. Технология использует два набора из четырех дискретных тональных сигналов, гармонически рассогласованных, т.е. – сигналов «низкочастотной» (до 1 кГц) и «высокочастотной» (более 1 кГц) групп. Каждая цифра на клавиатуре телефона представлена одним тоном из «нижней» группы и одним тоном из «верхней». На Рис. 1 показано распределение тональных сигналов.

Сочетание одной частоты из высокочастотной группы и одной частоты из низкочастотной группы формирует сигнал DTMF
Рис. 1. Сочетание одной частоты из высокочастотной группы и одной частоты из низкочастотной группы формирует сигнал DTMF

Кодер тональных сигналов DTMF

Кодирующая часть передатчика DTMF относительно проста. Требуются два цифровых гене- ратора синусоидального сигнала, каждый из которых может быть настроен на одну из четырех частот из «нижней» или «верхней» группы.

Существует несколько способов решения проблемы цифрового синтеза синусоидального сигнала. Один из методов генерирования синусоиды вообще не применяет цифровой синтез. Вместо этого осуществляется глубокая фильтрация прямоугольного сигнала на выводе порта. Хотя этот метод применяется во многих приложениях, стандарты Bellcore требуют более высокой спектральной чистоты синусоидального сигнала, чем чистота, которую можно получить таким методом.

Второй метод генерирования синусоидального сигнала – табличный метод. В этом методе четверть синусоиды записывается в ПЗУ в виде таблицы, которая затем считывается с заранее вычисленной частотой для получения нужной формы сигнала. Создание такой таблицы достаточно высокого разрешения для удовлетворения требований к спектральным характеристикам сигнала может, однако, потребовать значительных ресурсов памяти. К счастью, существует лучший способ.

Рекурсивный генератор генерирует синусоидальный сигнал
Рис. 2. Рекурсивный генератор генерирует синусоидальный сигнал

Для генерирования синусоиды можно использовать рекурсивный цифровой генератор1 (Рис. 2). Генератор выполнен в виде двухполюсного фильтра, описываемого следующим уравнением:

где k – постоянная, определяемая как

Поскольку для номеронабирателя DTMF необходим лишь ограниченный набор тональных сигналов, предварительно рассчитываются и записываются в ПЗУ только восемь значений k. Например, константа k для формирования сигнала второй строки (770 Гц) при частоте отсчетов 8 кГц вычисляется так:

Следует задать еще одно значение: начальный импульс, необходимый для запуска генератора. Ясно, что если Xn-1 и Xn-2 имеют нулевые значения, то каждый последующий Xn будет равен нулю. Для запуска генератора следует установить Xn-1 равным нулю, а Xn-2 рассчитать, как

Полагая амплитуду синусоиды равной единице для нашего примера, получим

Перевести этот алгоритм в программные коды достаточно просто. Сначала инициализируются две промежуточные переменные Х1 и Х2: Х1 инициализируется нулем, а Х2 загружается начальным уровнем возбуждения, вычисленным по формуле, приведенной выше. Чтобы сформировать один отсчет синусоиды, выполните следующие операции:

Каждое новое значение синусоиды вычисляется с использованием одной операции умножения и одной операции вычитания. С помощью однотактного MAC микроконтроллера MAXQ, синусоида формируется следующим образом:

  move   DP[0], #X1         ; DP[0] -> X1
  move   MCNT, #INIT_MAC    ; Initialize MAC unit
  move   MA, #k             ; MA = k
  move   MB, @DP[0]++       ; MB = X1, MC=k*X1, point to X2
  move   MA, #-1            ; MA = -1
  move   MB, @DP[0]--       ; MB = X2, MC=k*X1-X2, point to X1
  nop                       ; wait for result
  move   @--DP[0], MC       ; Store result at X0

Распознавание тонального сигнала в DTMF

Поскольку подлежит распознаванию небольшое количество частот, применяется модифицированный алгоритм Герцеля2. Этот алгоритм более эффективен, чем общие методы DFT и обеспечивает надежное распознавание внутриполосных сигналов. Он может быть реализован как простой фильтр второго порядка согласно схеме на Рис.3.

Алгоритм Герцеля реализован как фильтр второго порядка
Рис. 3. Алгоритм Герцеля реализован как фильтр второго порядка

Чтобы использовать алгоритм Герцеля для распознавания тонального сигнала определенной частоты, нужно предварительно рассчитать константу. В случае детектора DTMF это может быть сделано в процессе компиляции. Все частоты тонального сигнала известны. Постоянная вычисляется по следующей формуле

Прежде всего, три вспомогательные переменные (D0, D1 и D2) приравниваются к нулю. Затем, для каждого полученного отсчета Х следует рассчитать:

После получения достаточного количества отсчетов (обычно 205 при частоте отсчетов 8 кГц), вычислите величину Р, используя предварительно рассчитанные значения D1 и D2:

Величина Р пропорциональна значению квадратичной мощности тестовой частоты входного сигнала. Для полного распознавания всех DTMF частот каждый отсчет должен быть обработан восемью фильтрами. У каждого фильтра должно быть собственное значение к и свой набор промежуточных переменных. Поскольку каждая переменная занимает 16 бит, весь алгоритм займет 48 байт промежуточной памяти.

Пример формы входного сигнала декодера DTMF
Рис. 4. Пример формы входного сигнала декодера DTMF

По вычислении значений Р для различных тональных частот, значения для одного тона из «верхней» и одного из «нижней» группы будут существенно выше, чем для других тонов, обычно более чем в два раза, часто на порядок больше. На Рис. 4 показан пример входного сигнала на декодере, а на Рис. 5 – результат применения алгоритма Герцеля. Если полученный спектр не удовлетворяет этим критериям, это означает либо отсутствие DTMF-сигнала, либо наличие шума, блокирующего DTMF-сигнал.

Декодер DTMF распознает амплитуду различных частот
Рис. 5. Декодер DTMF распознает амплитуду различных частот

Таблица, в которой представлен описанный алгоритм, а также пример программы для процессора MAXQ с блоком MAC представлены на сайте MAXIM по адресу www.maxim-ic.com/MAXQ_DTMF" target="_blank">www.maxim-ic.com/MAXQ_DTMF.

Заключение

Микроконтроллер MAXQ, оснащенный блоком MAC, закрывает пробел между традиционными микроконтоллерами и цифровыми сигнальными процессорами. Дополненные аппаратным блоком MAC, микроконтроллеры MAXQ предоставляют новые, прежде недоступные для рынка 16-битных микроконтроллеров возможности обработки сигналов. С однотактовым блоком МАС, выполняющим наиболее востребованные в аналоговых приложениях операции, обработка сигналов в реальном времени становится доступной.






 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (495) 514 4110. e-mail:info@eust.ru
©1998-2016 ООО Рынок Микроэлектроники