Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
28-12-2014_12-52-57 / ответы пповсрв.doc
Скачиваний:
72
Добавлен:
11.05.2015
Размер:
1.26 Mб
Скачать

13. Организация двоично-инверсного счетчика (алгоритм Рэйдера) и перестановка данных.

Для вычисления БПФ требуется наличие двоично-инверсного счетчика. В процессорах TMS второго поколения начиная с TMS320C25 для этого был введен новый способ адресации BR0+ (с обратным переносом). В процессорах семейства TMS320C5х это способ адресации *ARx+0B. Двоично-инверсный счетчик является зеркальным отражением обычного счетчика, при котором разряды меняются местами: самый старший разряд становится самым младшим и, соответственно, самый младший – старшим. Для чисел из диапазона от 0 до 7 двоично-инверсный счетчик можно представить следующим образом (табл.3.1):

Для организации двоично-инверсного счетчика при отсутствии соответст-вующего способа адресации можно использовать различные алгоритмы. Одним из таких алгоритмов является алгоритм, предложенный Рэйдером (рис.3.6).

Алгоритм заключается в поиске первого старшего разряда числа, в котором стоит 0. При нахождении такого разряда производится вычисление нового значения по соответствующей формуле. Однако на практике этот алгоритм реализуется следующим образом:

● из исходного числа последовательно вычитается «бегущая» от старшего разряда к младшему единица до получения отрицательного результата;

● после получения отрицательного результата к нему добавляется удвоенное значение того числа, которое вычиталось последним, что и дает искомое значение.

При вводе или выводе данных в двоично-инверсном порядке можно просто воспользоваться данным счетчиком для адресации памяти данных, куда помещается или откуда берется информация, считанная из порта или записываемая в порт.

При перестановке результата вычисления можно воспользоваться промежуточным буфером и считывать данные с помощью обычного счетчика, а записывать в буфер с помощью двоично-инверсного или наоборот.

Второй способ заключается в по парной перестановке соответствующих отсчетов сигнала. Для восьми отсчетов необходимы следующие перестановки (рис.3.7):

Элементы с одинаковыми номерами переставлять нет необходимости, а необходимо поменять местами элементы 1–4 и 3–6. При этом, когда мы дойдем до 4-го или 6-го элемента с первой строке, то окажется что они уже были переставлены ранее и их переставлять также нет необходимости.

Таким образом, перестановка выполняется только для элементов номер (адрес) источника которых меньше номера (адреса) приемника.

На первый взгляд может показаться, что достаточно проверить только половину элементов (0-3 из восьми). Но это утверждение неверно уже для 16-ти элементов (рис.3.8) и из проверки можно исключить всегда только первый (0…0) и последний (1…1) элементы.

Таким образом, получается, что нужно переставить следующие элементы:

1-8, 2-4, 3-12, 5-10, 7-14, 11-13.

Как видим, последняя пара относится целиком ко второй половине массива

элементов.

Для того чтобы переставить пару элементов совсем не обязательно пользоваться рабочими ячейками. Для этого можно использовать 32-разрядный аккумулятор, загрузив первый элемент в старшую, а второй в младшую часть аккумулятора (или наоборот). После чего записать содержимое аккумулятора в обратном порядке – младшую часть на место первого элемента и старшую – на место второго элемента.

Чтобы загрузить в аккумулятор два числа можно использовать команды LD для загрузки старшей части аккумулятора и OR, XOR или ADDS для добавления младшей части. Сохранение переставленных данных выполняется обычными командами STL и STH. Можно также использовать два аккумулятора и обмениваться сразу двойными словами (действительной и мнимой частями) используя команды DLD и DST.

Соседние файлы в папке 28-12-2014_12-52-57