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

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


применения матриц С и С. (Изменение порядка суммирования оправдано общим тождеством CmECrt-Vri-= Еп- X

X ЕСгй-Кгг.) Тогда

А (я X п ) = пА (л) + М {п ) А (ft).

Теперь мы уже имеем два способа вычисления двумерного преобразования Фурье. Первый из ннх содержит

М (п X п ) = пМ (ft) + пМ (л )

умножений, но строится на основе любого одномерного БПФ-алгоритма, а второй содержит

М (л X л ) = М (л) М (л )

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

Например, реализация (1008 х 1008)-преобразования Фурье для комплексного входа в первом случае требует 4X1008X1782 вещественных умножений (см. разд. 8.3), а во втором случае 2х X 1782 вещественных умножений. (В случае вещественного входа во втором случае требуется вдвое меньше вещественных умножений, а в первом случае только 3/4 от указанного числа, так как после применения БПФ-алгоритма по строкам данные становятся комплексными.)

Второй способ, очевидно, лучше, но для его реализации требуется создание временного массива памяти для запоминания комплексных данных объема 2 X 1782 X 1782 (который в начале может содержать 2x1008x1008 входных данных); для первого способа необходима только временная одномерная память для запоминания 3564 слов.

8.3. Алгоритмы Винограда

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

Гнездовые методы построения двумерных БПФ-алгоритмов можно использовать, наоборот, для построения алгоритмов вычисления одномерного преобразования Фурье. В настоящем разделе мы возвращаемся к задаче вычисления одномерного преобразования Фурье и строим БПФ-алгоритм Винограда для больших длин преобразования (большой БПФ-алгоритм Винограда).

Большой БПФ-алгоритм Винограда представляет собой метод эффективного вычисления дискретного преобразования Фурье, если длина п преобразования распадается в произведение взаимно




вереиндексация на выходе


Рис. 8.5. Переиндексация в 12-то-чечном алгоритме Винограда.

Формирование 12-точечной матрицы преобразования Фурье в виде кронекеровского произведения матриц-составляющих 3-точечного и 4-точечного преобразований Фурье показано на рис. 8.6.

Пусть п ~ пп и W и W обозначают соответственно матрицы п-точечного и -точечного преобразований Фурье, так что V - = Wv и V = W v*, Двумерное {п X гг )-преобразов5ние Фурье двумерного сигнала Vi-i- получается применением W к каждому столбцу сигнала, а затем применением W к каждой строке. Если дву.уерный (п X я ) сигнал vrr был получен описанным переупорядочиванием компонент из одномерного, то надо выполнить обратную перестановку, считывая дву,черный результат по столбцам.

Если под V и V понимать соответственно входной и выходной векторы, компоненты которых переставлены описанным образом, то в терминах кронекеровского произведения преобразование записывается равенством V = (W X W) v. Но W = СВА и W = СВ Л , где элементами матриц А, А , С и С являются только нули и единицы, а матрицы В и В являются диагональными. Так же, как в предыдущем разделе, получаем W = (СВА-) X (СВА) = (С X С) (В X В) (А X А) = СВА,

где кронекеровские произведения С = С X С и А = А X А представляют собой матрицы, состоящие только из нулей и единиц, а кронекеровское произведение В = В X В является диагональной матрицей. Следовательно, мы построили алгоритм я -точечного преобразования Фурье в форме БПФ-алгоритма Винограда: V = CBAv.

При построении алгоритма мы предполагали, что компоненты векторов V и V переупорядочены необходимым образом. Но коль скоро алгоритм в данной фор.ме уже построен, то выполняя тривиальную перестановку столбцов матрицы А, можно работать с естественным порядком компонент вектора v, а переставляя строки матрицы С, - с естественным порядком компонент вектора V.

Обозначим через М (я) и М (л ) размеры матриц В и В соответственно. Эти числа равны числу умножений соответственно в я-точечном БПФ-алгоритме и в л -точечном БПФ-алгоритме с учетом тривиальных у.множенин на единицу. Тогда число умножений, необ.чодимых для выполнения -точечного БПФ-алгоритма Винограда, включая и умножения на единицу, равно М (л) = Л} (я) М (я ). Это происходит потому, что матрица В X В снова является диагональной, а размер ее равен М (я) М (л ).

На рис. 8.7 приведен перечень малых БПФ-алгоритмов Винограда, из которых можно строить большие БПФ-алгоритмы Винограда, а на рис. 8.8 выписаны характеристики больших БПФ-алгоритмов Винограда. На рис. 8.9 дается пример 1008-точечного

nepeuHdeKcaiiufJ на входе ПрОСТЫХ ДбЛИтелеЙ, ДЛЯ КОТОрЫХ

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

в общем случае БПФ-алгоритм Винограда применим для вычисления преобразования, длина п которого равна произведению малых простых чисел или произведению степеней малых простых чисел. Мы рассмотрим только случай двух делителей: п = пп . Используя алгоритм Гуда-Томаса для простых делителей, преобразуем -точечное преобразование Фурье в двумерное (п X X п )-точечное преобразование Фурье. Для вычисления этого двумерного преобразования можно воспользоваться малым п-точечным БПФ-алгоритмом Винограда и малым -точечным БПФ-алгоритмом Винограда, применяя их вдоль соответствующих длине измерений. Вместо этого мы воспользуемся описанным в предыдущем разделе гнездовым методом Винограда, позволяющим так сочетать эти два алгоритма, что число умножений падает.

Рассматриваемая нами процедура иллюстрируется приведенным на рис. 8.5 примером 12-точечного БПФ-алгоритма. На рисунке показано преобразование входного 12-компонентного вектора данных в двумерную таблицу по алгоритму Гуда-Томаса, сводящее задачу к вычислению двумерного преобразования Фурье. За этим следует преобразование полученной двумерной таблицы в новый одномерный массив, формируемый как стек столбцов, (Все эти манипуляции можно проделывать с индексами; совсем не обязательно физически переупорядочивать данные.)



ja 0

ш W*

ч>

ш

0 J б 9

у, у>

ы ш

и ш

U W

Ji Ji * g ! *

ы* ° *

I I

w

W W Ol W

ш Ы Ш ш

f 10

0 0

0 0 а 0*

У, У,

У Г*

fa>

о \ з

J 1 8

w ы

f 10

> 7t

~ 4 4 4 7

w Ы 1

4 ip 4 10

Рис.

изведению.

Вход во

Выход в частотной области

Набор суммирований

Набор умножении\- И

Набор суммирований

Малый БЛФ-алгоритм Винограда Меню

переведение 12-тоне, ого преобразовании Фурье к кроиекеровскому ро-

л = 3

п = 4

п = 5

п = 7

n=II

я-16

Умножения Сложения

0(2)

2(3)

0(41

5(6)

8(9)

2(8)

10 (11)

20(21)

20(21)

Ю (18)

Рис. 8.7. Набор малых преобразований Винограда.

Число

вещественных умножений

Длинап

Число вещест-

Полнев ьТ-- So e a*

Число нетривиальных умножений на точку *

Число сложений на точку

1.13

1.24

7.14

1.13

6.40

1.51

9.51

0.96

6.62

1.56

11.17

1.07

8.45

1038

1.15

8.65

1746

1.25

10.39

2508

1.32

10.45

5676

1.53

13.51

7270

1.56

14.42

1290

12402

1.54

14.76

1008

1782

1774

17334

1.76

17.20

2520

4752

4746

49814

1.88

19.77

при комплексном входе удвоить Рис. 8.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