Главная ->  Вычислительные алгоритмы 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [ 21 ] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

Вход ВПФ: 75 точек

Вход БПФ: 25 точек

Отображение данных б таблицу 325

Отображение данных в таблицу 5*5

25-кратный вызоё

3-точечного преобразования

5-кратный Вызов 5-точечного преовразодания

Умножение таб ицыЗ& на и>-

Умножение таблицы J 5 на и}**

3-кратный вызов

25-точечного преобразования

5-к ратный вызов 5-точечного преобразования

Отображение табяицыЗ*25 в 75-точечный вектор

Отображение таблицы 5*5 в 25-точечный вектор

Выход бПФ: 75 точек

Выход 6ПФ: 25 точек

Вход вход

5-точечного лреабразованив 3-точечного преобразования


Выход Выход

5-точечного преобразования 3~точечного ореобразования

Рис. 4.4. Разбиение БПФ-алгоритма Кули-Тьюки на подпрограммы.

МОЖНО вычислять с помощью БПФ-алгоритма Кули-Тьюки.

На этом пути преобразование длины п = может быть пред-

ставлено в такой форме, в которой требуется выполнения пщ

комплексных умножений. На рис. 4.3 показан один из многих способов разбиения 75-точечного преобразования Фурье. Каждый из узлов этого рисунка можно представлять себе как обращение к подпрограмме. Если вычисления реализуются с помощью такого разбиения на подпрограммы, то один из способов организации программного вычисления показан на рис. 4,4. На самом нижнем уровне вычислений находятся 3-точечное и 5-точечное преобразования Фурье, выполняемые буквально. Позже мы построим малый БПФ-алгоритм Винограда, который можно использовать на этом уровне в качестве подпрограммы. Малые БПФ-алгоритмы Винограда представляют собой сильно оптимизированные процедуры вычисления преобразования Фурье для длин, являющихся простым числом или степенью простого числа.

4.2. Алгоритм Кули-Тьюки по малому основанию

Во многих приложениях, в которых используется алгоритм Кули-Тьюки, длина преобразования равна степени двух или четырех. Для построения БПФ-алгоритма длина 2 преобразования представляется в виде 2.2 -i или В этом случае говорят БПФ-алгоритме Кули-Тьюки по основанию два Аналогично, длина 4* преобразования разлагается в виде 4-4 -i или 4 -. 4, и тогда говорят о БПФ-алгоритме Кули-Тьюки по основанию четыре. Если в 2 -точечном алгоритме Кули-Тьюки по основанию два полагается л = 2 и л* = 2 -, то он называется БПФ-алгоритмом Кули-Тьюки по основанию два с прореживанием по времени. Используя тот факт, что р = о) /2 = -1 в этом случае уравнения, задающие БПФ, можно записать в следующем простом виде:

л/2-I п/2-l

i=0 (=0

n/2-1 n/2-I

= 0. л/2-I,

) Тернии по основанию два относится к факту записи индексов по основанию два. Компоненты данных могут быть представлены в любой системе счисления, в частности по основанию два.



л/2-I

V2k-= Е ( с + г+л/г)

(=0 л/2-1

Vlk-+I = Tl (Иг- 1Ч-г./2)мю .

к =0, .... п/2 - i.

Прореживание по частоте разбивает компоненты входного вектора на два подмножества, содержащие соответствеино первые /1/2 компонент и вторые п/2 компонент. Компоненты выходного вектора разбиваются на подмножество компонент с четными индексами и подмножество компонент с нечетными индексами.

Алгоритм с прореживанием по времени и алгоритм с прореживанием по частоте отличаются структурой и последовательностью вычислений, хотя имеют одно и то же число операций. Характеристики алгоритмов совпадают, но пользователь может предпо-. честь один из них из соображений реализации. Мы подробно рассмотрим только характеристики алгоритма с прореживанием по времени.

Алгоритм с прореживанием по времени сводит п-точечное преобразование Фурье к двум (п/2)-точечным преобразованиям Фурье с некоторыми дополнительными сложениями и умножениями. Часть из умножений представляют собой умножения на единицу или +/. Они тривиальны и не требуют действительного вычисления. Чтобы обойтись без тривиальных умножений в алгоритме, их следует обрабатывать отдельно. Иногда конструктор предпочитает включить в процедуру вычисления все умножения, даже тривиальные.

Алгоритм с прореживанием по времени работает рекурсивно, разбивая на каждом шаге п-точечное преобразование на два (/г/2)-точечных преобразования, которые, в свою очередь, разбиваются точно таким же образом. Из уравнений ясно видно, что число Ale ( ) комплексных умножений п-точечного БПФ удовлетворяет рекуррентному уравнению

М, (п) = 2М, (п/2) + п/2.

а число Л, (п) комплексных сложений удовлетворяет рекуррентному уравнению

А, (п) = 2А, {п/2) + п,

где п равно степени двойки. Решения этих уравнений даются равенствами

(п) = (л/2) loga л, (п) = п logj л.

Комплексные умножения можно реализовать алгоритмом с четырьмя вещественными умножениями и двумя вещественными сложениями. В этом случае характеристики БПФ по основанию два даютсг равенствами

Л1д (л) = 2п logj л, Л;, (л) = Зп logj л.

Альтернативный алгоритм выполнения комплексного умножения содержит три вещественных умножения и три вещественных сложения. В этом случае характеристики имеют вид

(п) = (3/2) п log, л, Л (л) = (7/2) л log, л.

Теперь предположим, что мы хотим построить алгоритм, в KofopoM выброшены все тривиальные умножения. Тогда полу-ченнЬте нами характеристики сложности алгоритма улучшатся. Тщательный анализ алгоритма показывает, что все умножения на самом внутреннем шаге алгоритма тривиальны и имеют вид умножений на (-1) для А = О, 1; все умножения на следующем шаге тривиальны и имеют вид умножений на /* для к - О, I, 2, 3; на последующих шагах число тривиальных умножений равно

п/4, л/8..... Следовательно, число комплексных умножений

равно

. МАп) = (л/2) (-3-flog, л).-1-2.

Используя для реализации комплексного умножения алгоритм с четырьмя вещественными умножениями и двумя вещественными сложениями, для БПФ-алгоритма по основанию два получаем

/И, (л) = 2п (-3 + log, л) + 8,

Ля (л) = Зл (-1 + log, л) + 4.

Используя для комплексного умножения алгоритм с тремя вещественными умножениями и тремя вещественными сложениями, получаем характеристики

/И (л) = (3/2) л (-3 -Ь log, л) + 6,

Л (л) = (1/2) п (-9 + 71og, л) -f- 6.

Еще немного можно улучшить алгоритм, если воспользоваться свойством симметрии тригонометрических функций. Заметим, что

(D-/S =(1 /) 2.

Прореживание по времени разбивает множество компонент входного вектора на два подмножества: множество компонент с четными индексами и множество компонент с нечетными индексами. Множество компонент выходного вектора разбивается при этом на мнйжество первых п/2 компонент и множество вторых п/2

компонент. -----------

г-точечный БПФ-алгоритм Кули-Тьюки по основанию два, в котором п = 2 - и п = 2, называется БПФ-алгоритмом Кули-Тьюки по основанию два с прореживанием по частоте. Уравнения БПФ в этом случае преобразуются к виду



Мв С ) = п (-7 + 2 1о Л (п) = Зп (-1 + loj

п) +4

Мя (п) = (1/2) п (-10 + 3 logj п) + 8. Лн (п) = (1/2) п. (-10 + 7 log, п) + 8.

Как мы видим, число вариантов алгоритма Кули-Тьюки весьма велико, но мы еще не перечислили все возможности; имеются и другие возможности улучшения алгоритма. На рис. 4.5 приведены характеристики некоторых БПФ-алгоритмов Кули- Тьюки. В таблицу помимо обычной формы алгоритма Кули- Тьюки включен БПФ-алгоритм Рейдера-Бреннера. Этот БПФ-алгоритм является модификацией алгоритма Кули-Тьюки, основанной на том, что с помощью переупорядочивания уравнений БПФ некоторые умножения на комплексные константы можно заменить умножением на вещественные константы.

Алгоритм Рейдера-Бреннера можно строить, исходя из уравнений для алгоритма с прореживанием по времени, но мы предпочитаем отталкиваться от уравнений для алгоритма с прореживанием по частоте:

v = s(f,-f tii+ )u> ,

k = 0,

1112-1

S (Ui - В(+ /2)шй) . (=0

n/2 - 1,

Определим рабочий вектор a равенствами

О, 1

I (vi - о,+ ,2)/[2/ Sin (2ni/n)l, i

a положим

n/2-1

Так как

fi/2-! nl2-\

A = 0,

1) =

= 0, = 1,

/1/2-1.

пП- 1,

i)ai2jSin(2ni J) = E (Wi - И(-)-п/2) 0) ,

<g о

<

- 5 Й s s

* ° S I E

2 S S

Ю K} -чг

(N <0 2

о u2

п. о

с -Ч s

о * a

ills 5

! 5S

Умножение на эту комплексную константу требует всего двух вещественных умножений и двух вещественных сложений. Таких умножений на щагах 3, 4, ... алгоритм содержит соответственно n/i, п/8, .... Их можно реализовать с помощью специальной процедуры умножения. При этом в зависимости от выбранной реализации комплексного умножения характеристики алгоритма будут даваться равенствами



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [ 21 ] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73