Программа быстрого преобразования Фурье для устройств автоматизации

на базе процессора TMS320

Александр Агапиев, Виктор Милашенко

 

Источник: http://www.cta.ru/cms/f/366642.pdf

 

Сегодня большинство современных устройств автоматизации, способных обрабатывать сигналы различной природы в режиме реального времени, разрабатываются на базе высокоскоростных процессоров цифровой обработки сигналов (ЦОС). При этом преобразование Фурье является важным инструментом цифрового спектрального анализа, который наиболее часто используется в системах ЦОС. В этом случае для систем реального времени (СРВ) становится актуальной проблема разработки максимально эффективного программного кода данного алгоритма, требующего минимального времени выполнения при фиксированном объеме памяти. В общем случае универсальная программа для любых приложений СРВ вряд ли существует, и основная цель разработчика  — решить задачу оптимального выбора вида программирования и основания алгоритма в зависимости от длины преобразования, доступного размера памяти и требуемого времени выполнения.

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

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

Во врезке статьи приведен листинг программной реализации алгоритма БПФ длиной 512 точек для процессора TMS320C25. В данном случае базовая операция оформлена

как подпрограмма, а коэффициенты преобразования определены константами в виде четырех выделенных блоков

данных. Для оценки эффективности разработанной программы в таблице 1 представлены требуемый объем памяти и время выполнения программы при различных длинах преобразования и видах программирования.

Из таблицы 1 видно, что если длина преобразования БПФ не превышает 128 точек, использование макрорасширений позволяет получить некоторый выигрыш за счет меньшего времени выполнения. Однако при длинах преобразования, превышающих 256 точек, линейное программирование становится неэффективным, а в некоторых приложениях даже неосуществимым из-за больших объемов требуемой памяти. Что касается разработанной программы, то для неё затраты памяти в 50 раз меньше, чем при использовании линейного программирования. При этом время выполнения разработанной программы увеличилось лишь в 1,6 раза при длине преобразования 512 и всего в 1,25 раза при длине преобразования 1024. Рост требуемого объема памяти от длины преобразования для случая программирования с подпрограммами обусловлен только увеличением количества хранимых поворачивающих множителей. Необходимо также отметить, что подавляющее большинство существующих стандартных библиотек функций, предлагаемых фирмой-разработчиком Texas Instruments и имеющих в своем составе процедуру БПФ, основываются именно на программировании с использованием макрорасширений.

Продолжая разговор об эффективной реализации алгоритма БПФ, необходимо отметить ряд важных особенностей, связанных со структурой алгоритма и комплексным характером преобразования. Известно, что в случае, когда длина дискретного преобразования Фурье (ДПФ) N=n1n2...nk...nK, в частном случае N = nK  (именно такое ДПФ называют быстрым преобразованием Фурье по основанию n), возможно значительное сокращение объема вычислений ДПФ, а сам алгоритм распадается на две части: выполнение KnK–1 операций n-точечного ДПФ («бабочка») и выполнение операции перестановки, так как порядок входных и выходных индексов меняется. Последовательность выполнения операций может быть произвольной. При этом, если выполнить вначале операцию «бабочка», то выходные отсчеты БПФ будут располагаться в поразрядно-обратном порядке при представлении индексов в системе счисления по основанию n, то есть входному отсчету с порядковым номером iвх = pmnm_1 + pm_1nm–2 + ... ++p2n1 + p1n0 будет соответствовать выходной отсчет iвых = p1nm_1 + p2nm–2 + ... + pm_1n1 + pmn0.

Кроме конвейерной обработки команд процессором, возможности аппаратного умножения 16_битовых слов (16х16) или выполнения операции свертки (А*В+С) за один такт, TMS320C25 располагает дополнительными способами адресации, которые обеспечивают быстрое выполнение операции перестановки для алгоритма БПФ по основанию 2.

 

 

Таблица 1. Объем памяти и время выполнения программы БПФ при различных длинах преобразования и видах программирования

 

Длина преобразования

Время выполнения,

включая команду TBLR, мкс

Чистое время преобразования, мкс

 

Длина программы,

включая таблицы

коэффициентов,

16-разрядных слов

 

Вид программирования

 

8

28,8

28,8

264

Линейное

8

317,6

317,0

65

Подпрограммы

16

76,8

76,8

704

Линейное

16

466,7

465,9

81

Подпрограммы

32

192.0

192,0

1760

Линейное

32

670,0

668,5

113

Подпрограммы

64

460,8

460,8

4224

Линейное

64

1176,1

1169,7

177

Подпрограммы

128

1075,2

1075,2

9856

Линейное

128

2194,4

2168,8

305

Подпрограммы

256

2457,6

2457,6

22526

Линейное

256

4268,5

4217,3

561

Подпрограммы

512

5529,6

5529,6

50688

Линейное

512

9183,4

8974,8

1073

Подпрограммы

1024

12158,9

12158,9

11260

Линейное

1024

15253

15048,9

2096

Подпрограммы

 

Имеющаяся в TMS320C25 возможность использования обратного распространения переноса позволяет переставлять входные или выходные данные одновременно с выполнением процедуры ввода-вывода данных. Этот режим адресации является частью косвенной адресации, выполняемой с помощью дополнительных регистров и связанного с ними арифметического устройства. В таком режиме (режим формирования индексного адреса) значение (индекс), находящееся во вспомогательном регистре AR0, или складывается, или вычитается из дополнительного регистра, на который указывает ARP (указатель вспомогательного регистра). Однако разряд переноса распространяется не в прямом, а в обратном направлении, в результате чего выполняется перестановка имеющихся адресов.