МПУЭВС. Лекции. Задания / pdf_ПрилПЦиПУ / Приложение_О_ ПрограмОбрабДанных
.pdf11
значением Х из памяти данных и первым значением k из памяти программ.
Затем в программе реализуется свертка данных Х и коэффициентов k. Для этого в следующей строке листинга переменная CNTR определяет количество циклов:
CNTR=N–1 . Регистр CNTR используется в качестве счетчика циклов умножения со сложением в устройстве МАС. Для выполнения цикла не требуется дополнительных команд по проверке условия его завершения. Выход из цикла выполнятся процессором автоматически при выполнении условия CNTR = 0
после N–1 проходов. Начало цикла определено меткой Convolution после оператора DO UNTIL, окончание – первой точкой с запятой. Результат вычислений заносится в регистр MR. Многофункциональная
команда
MR=MR+MX0*MY0 (SS), MX0=DM(I0, M1), MY0=PM (I4, M5)
выполняется за один машинный цикл (13,3 нС). Последние две строки программы умножают, суммируют N-ый раз и проверяют окончательный результат в регистре MR на переполнение с помощью бита MV. Заключительная команда умножения с накоплением выполняется с включенным режимом округления RND до старших 24 разрядов регистра MR. В случае переполнения
(MV=1) процессор командой SAT запишет в регистр MR максимально возможное число для формата, принятого в программе.
Благодаря такому подходу, при накоплении результата используются преимущества регистра MR 40-разрядной точности. Насыщение происходит только в том случае, если вычисление заключительного результата привело к переполнению 32 младших значащих разрядов регистра MR.
Ограничение на число звеньев фильтра, реализующего программу КИХ-
фильтрации в реальном масштабе времени, определяется, прежде всего, дли-
тельностью процессорного цикла, частотой дискретизации и требуемым объе-
мом других вычислений. Программа КИХ-фильтра, представленная в примере,требует общего количества циклов N+5 для фильтра с числом звеньев
12
N. Для DSP-процессора ADSP-2189M, обладающего быстродействием 75 MIPS,
реализация фильтра с числом звеньев 100 требует 13,3 нс · 100 + 5 · 13,3нс = 1,4
мкс. Это соответствует максимально возможной частоте дискретизации 714
кГц, ограничивая, таким образом, ширину полосы частот обрабатываемого сигнала несколькими сотнями килогерц.
Аппаратная реализация циклических буферов разрешает устанавливать в программе параметры буфера (адрес начала буфера, длина и т.д.) вне тела цик-
ла, непосредственно вычисляющего алгоритм. Это позволяет избежать включе-
ния дополнительных команд в тело цикла. Отсутствие аппаратной реализации циклических буферов может существенным образом ухудшить возможности
DSP-процессора по реализации алгоритмов цифровой обработки сигналов.
О.3 Форматы представления чисел
При разработке устройств, использующих сигнальные процессоры, не-
обходимо учитывать конечную точность представления чисел в цифровых сис-
темах. Математический пакет MATLAB при синтезе проектируемого устройст-
ва позволяет анализировать эффекты, связанные с шумами квантования анало-
го-цифрового преобразования, учитывать переполнение разрядной сетки в про-
цессе вычислений и искажения характеристик из-за квантования коэффициен-
тов цифровых фильтров.
В процессорах семейства ADSP 21xx максимальная скорость вычислений достигается для чисел, представленных в формате с фиксированной запятой
1.15. Формат используется 16-разрядными процессорами и означает, что целая часть числа содержит только один разряд – знаковый. Дробная часть использу-
ет 15 разрядов (рисунок О.4). Числа, которые можно представить в этом формате (см. таблицу. О.4), по модулю не превосходят единицы. Ноль в знаковом разряде соответствует положительным числам, единица – отрицательным. Пятнадцать разрядов после запятой обеспечивают
13
дискретность представления, равную единице в младшем разряде 2-15 = 1/32768
≈ 3·10-5.
Рисунок О.4 - Формате I.15 дробного числа со знаком
Согласно данным табл. 14 видно, что максимальное положительное число в формате 1.15 отличается от единицы и равно 32767/32768 ≈ 0,9999695. При проектировании цифровых устройств, использующих формат 1.х, необходимо масштабирование коэффициентов уравнений с целью привести их значения к диапазону [-1,1]. Для масштабирования все коэффициенты уравнения делятся на одну и ту же константу, затем на нее же умножается правая часть уравнения.
В качестве масштабирующего множителя удобно выбирать степень двойки,
поскольку умножение в этом случае сводится к поразрядному сдвигу двоичного числа влево.
Таблица О.4 - Формат с фиксированной запятой 1.15
Двоичный код |
|
Шестнадцатеричный код |
|
Число в формате1.15 |
|
|
|
|
|
0000 0000 0000 0000 |
|
0000Н |
|
0 |
|
|
|
|
|
0000 0000 0000 0001 |
|
0001Н |
|
1/32768 = 0,0000305 |
|
|
|
|
|
0000 0000 0000 0010 |
|
0002Н |
|
2/32768 = 0,0000610 |
|
|
|
|
|
…. |
…. |
|
…. |
|
|
|
|
|
|
0111 1111 1111 1110 |
|
7FFEH |
|
32766/32768 = 0,9999390 |
|
|
|
|
|
0111 1111 1111 1111 |
|
7FFFH |
|
32767/32768 = 0,9999695 |
|
|
|
|
|
1000 0000 0000 0000 |
|
8000H |
|
-32768/32768 = -1 |
|
|
|
|
|
1000 0000 0000 0001 |
|
8001H |
|
-32767/32768 = -0,9999695 |
|
|
|
|
|
…. |
…. |
|
…. |
|
|
|
|
|
|
1111 1111 1111 1110 |
|
FFFEH |
|
-2/32768 = -0,0000610 |
|
|
|
|
|
1111 1111 1111 1111 |
|
FFFFH |
|
-1/32768 = -0,0000305 |
|
|
|
|
|
14
Пример масштабирования коэффициентов эллиптического фильтра нижних частот 4-го порядка с частотой среза, равной 20 % от частоты Найквиста, пульсациями в полосе пропускания 1 дБ и подавлением сигнала в полосе задерживания 60 дБ. Перечисленные параметры фильтра заданы в командной строке пакета MATLAB с помощью функции ellip
» [b, a] = ellip(4, 1, 60, 0.2)
b = 0.0059 0.0053 0.0096 0.0053 0.0059 a = 1.0000 -3.0477 3.8240 -2.2926 0.5523
Из полученного решения видно, что максимальный по модулю коэффи-
циент больше единицы и равен 3,824.
Уравнение рекурсивного фильтра
y(k) = 0,0059 x(k) + 0,0053 x(k – 1) + 0.0096 x(k – |
2) + 0.0053 x(k – 3) + |
+ 0.0059 x(k – 4) + 3.0477 y(k – 1) – 3.8240 y(k – |
2) + 2.2926 y(k – 3) – |
– 0.5523 y(k – 4). |
|
Для масштабирования делится и умножается правую часть уравнения на 4
y(k) = 4(0,0015 x(k) + 0,0013 x(k – 1) + 0,0024 x(k – 2) + 0,0013 x(k – 3) + + 0,0015 x(k – 4) + 0,7619 y(k – 1) – 0,9560 y(k – 2) + 0,5731 y(k – 3) –
– 0,1381 y(k – 4)).
Округление коэффициентов из-за конечной разрядности процессора мо-
жет заметно сказаться на рекурсивных фильтрах с крутым спадом АЧХ между полосами пропускания и задерживания. Если реализовать фильтр на 9-
разрядном процессоре в формате 1.8, то коэффициенты округляются с точностью до 1/256, так как у них остаются восемь двоичных разрядов после запятой.
»bm=b/4; % масштабирование коэффициентов числителя
»am=a/4; % масштабирование коэффициентов знаменателя
15
»[h,f]=freqz(b,a); % АЧХ до округления
»hm=freqz(bm,am);
»subplot(1,2,1)
»plot(f/pi,abs(hm)) % график АЧХ до округления
»bq=round(bm*256)/256; % округление масштабированных
»aq=round(am*256)/256; % кооэффициентов
»hq=freqz(bq,aq); % АЧХ после округления
»subplot(1,2,2)
»plot(f/pi,abs(hq)) % график АЧХ после округления
Рисунок О.5 – Передаточные характеристики фильтра Результат обработки показан на рисунке О.5 б. Видно, что амплитудно-
частотная характеристика фильтра изменилась существенно:
-амплитуда пульсаций в полосе пропускания существенно возросла;
-переходная область АЧХ стала более пологой;
-заданный параметр пульсаций в полосе пропускания фильтром с форматом 1.8 не обеспечивается;
16
Округление коэффициентов фильтра приведенного примера в формате
1.15 приводит к небольшим искажениям частотной характеристики. В этом случае графики АЧХ без учета квантования и с квантованием практически сливаются. График амплитудно-частотной характеристики фильтра в формате
1.15 совпадает с графиком АЧХ на рисунке О.5 а. Отсюда можно сделать вывод о том, что разрядность процессора в рассмотренном примере не оказывает влияния на вид АЧХ.
В некоторых случаях удобно использовать для процессоров ADSP-2189M
целочисленный формат 16-разрядных двоичных чисел без знака или со знаком.
Целые числа без знака имеют диапазон [0,65535], диапазон целых чисел со зна-
ком составляет [-32768, 32767]. Коэффициенты деления частоты генератора,
задающие период квантования сигналов в АЦП и ЦАП, в рассматриваемой программе задаются в виде 16-разрядных целых чисел без знака. Програм-
мы на языке Си поддерживают 16- и 32-разрядные переменные со знаком и без знака.
