Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[233]

Обратная операция а = DFT"1/) состоит в умножении матрицы V~l (обратной к Vn) на у. Теорема 32.7

Элемент с индексами (j,k) матрицы V~l равен и>п~кз/п. Доказательство

Покажем, что V~1Vn = In, где 1п - это единичная (га X га)-матрица. По определению,элемент произведения V~1Vn

есть

п-1п-1

к=0к=0

Последняя сумма равна 1 при j = j и равна 0 при j ф j по лемме о сложении (лемма 32.6). В самом деле, -(га - 1) j - j п - 1, так что j - j не делится на га при j ф j.

Зная обратную матрицу V~x, мы можем найти а = DFT"1/) по формуле

п - 1

aJ = -J2yk<kj,32.11

к=0

для j = 0,1,... , га - 1. Сравнив формулы (32.8) и (32.11), мы видим, что для вычисления обратного преобразования Фурье можно применить тот же алгоритм (быстрого преобразования Фурье), поменяв в нём any местами, заменив ujn на lo~x и разделив каждый элемент результата на га (см. упр. 32.2-4). Таким образом, DFT"1 также можно вычислить за время ©(гаlgra).

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

Теорема 32.8 (о свёртке)

Для любых векторов а и Ь размерности га, где га - степень двойки выполнено равенство

а ® Ь = 1)1- i,1 (1)1- 1 , (а) • 1)1- i., (6)),

если дополнить векторы а и Ь нулевыми элементами до длины 2га, и через • обозначить покомпонентное произведение двух 2га-элементных векторов.

Упражнения

32.2-1

Докажите следствие 32.4 32.2-2

Найдите дискретное преобразование Фурье вектора (0,1,2,3). 32.2-3

Выполните упр. 32.1-1, используя схему быстрого (время ©(гаlgra)) алгоритма умножения многочленов (рис. 32.1).


32.2-4

Напишите процедуру вычисления DFT"1 за время O(ralgra). 32.2-5

Как быстро выполнить преобразования Фурье, если га является степенью тройки? Напишите рекуррентное соотношение для времени работы соответствующей процедуры и решите его.

32.2-6*

Преобразование Фурье вектора из га элементов можно вычислять не над полем С, а в кольце Zm целых чисел по модулю то, где т = 2fn/2 + 1, где t - произвольное положительное целое число. При этом роль ujn играет 2*. Покажите, что дискретное преобразование Фурье и обратное к нему для векторов с элементами из этого кольца корректно определены и могут быть вычислены за время О (га lgra) по той же схеме.

32.2-7

Покажите как для данного списка чисел zo, z\,... , zn \ (не обязательно различных) найти коэффициенты многочлена Р(х) степени меньше га, имеющего указанные в списке корни (с учётом кратности). Время работы должно быть О (га lgra). (Указание. Многочлен Р(х) обращается в нуль в точке а тогда и только тогда, когда делится на (ж - а).)

32.2-8*

Рассмотрим преобразование вектора а = (ao,cii,... ,ara i), переводящее его в вектор у = (уо, у\,... , yn-i), заданный формулой yk = X}j=o ajzjk, гДе z - произвольное комплексное число. (Дискретное преобразование Фурье является частным случаем для z = ujn.) Докажите, что это преобразование можно выполнить за время О (га lgra) для любого комплексного числа z. (Указание: используйте равенство

п-1

yk = zll2W-{k-1?l\

чтобы представить результат преобразования как свёртку.)

32.3 Эффективные реализации быстрого преобразования Фурье Дискретное преобразование Фурье часто встречается на практике, причём в ситуациях, где скорость работы очень важна (обработка сигналов и т.п.). В этом разделе рассматриваются две эффективные реализации быстрого преобразования Фурье. Сначала мы рассмотрим итеративный алгоритм быстрого преобразования Фурье, который имеет лучшие константы в асимптотической оценке О (га lgra), чем рекурсивный алгоритм раздела 32.2. Затем мы используем те же идеи для быстрой параллельной реализации. Итеративная реализация быстрого преобразования Фурье Прежде всего заметим, что в цикле for в строках 10-13 процедуры Recursive-FFT дважды вычисляется значение и>кпу. Введя


Рис. 31.4 32.3 Преобразование бабочки. Слева поступают два входных знак[1]

чения, ш„ умножается на ук , справа выдаются значения суммы и разности. Рисунок можно рассматривать как схему, составленную из элементов сложения, вычитания и умножения.

Рис. 31.5 32.4 Дерево входных векторов для рекурсивных вызовов процедуры recursive-FFT. Исходным является вызов при п = 8.

временную переменную t, можно запомнить значение этого общего подвыражения (common subexpression - терминология, используемая разработчиками компиляторов), чтобы не вычислять его вторично:

for $k \leftarrow 0$ to $n/2-l$

\quad do $t \leftarrow \omega y k~{[l]}$

\qquad $y k \leftarrow y k~{[0]} + t$

\qquad $y {k+(n/2)> \leftarrow y k~{[0]} - t$

\qquad $\omega \leftarrow \omega \omega n$

Выполняемые в этом цикле действия показаны на рис. 32.3; их называют преобразованием бабочки (butterfly operation).

Сейчас мы покажем, как построить итеративный (а не рекурсивный) вариант быстрого преобразования Фурье. На рисунке 32.4 показаны входные векторы в дереве рекурсивных вызовов процедуры Recursive-FFT, начиная с ее вызова для п = 8.

Указаны входные векторы для рекурсивных вызовов процедуры Recursive-FFT; каждый такой вызов порождает два новых (для векторов половинной длины). На рисунке левый потомок соответствует первому из них, а правый - второму.

Эти рекурсивные вызовы можно заменить вычислением снизу вверх. Расположим элементы исходного вектора а в том порядке, в каком они появляются в листьях дерева (нижняя строка). Затем возьмём пары элементов, вычислим для них дискретное преобразование Фурье, используя преобразование бабочки. Получится содержимое второй снизу строки рисунка. (Элементы исходного вектора больше не нужны, так что можно записать результаты преобразований на их место.) Теперь из каждых двух пар мы собираем четвёрку, дважды выполнив преобразование бабочки, получается га/4 четвёрок. Далее из четвёрок собираются восьмёрки и т.д.; на последнем шаге из двух векторов длины га/2, являющихся преобразованиями Фурье чётной и нечётной части вектора а, изготавливается преобразование Фурье всего вектора а.

Соответствующая программа использует вектор А[0..п- 1] в который в начале работы мы помещаем элементы вектора а в том порядке, в котором идут листья дерева рис. 32.4. (Что это за порядок, мы обсудим дальше.) Введём также переменную s, в которой



[стр.Начало] [стр.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] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91] [стр.92] [стр.93] [стр.94] [стр.95] [стр.96] [стр.97] [стр.98] [стр.99] [стр.100] [стр.101] [стр.102] [стр.103] [стр.104] [стр.105] [стр.106] [стр.107] [стр.108] [стр.109] [стр.110] [стр.111] [стр.112] [стр.113] [стр.114] [стр.115] [стр.116] [стр.117] [стр.118] [стр.119] [стр.120] [стр.121] [стр.122] [стр.123] [стр.124] [стр.125] [стр.126] [стр.127] [стр.128] [стр.129] [стр.130] [стр.131] [стр.132] [стр.133] [стр.134] [стр.135] [стр.136] [стр.137] [стр.138] [стр.139] [стр.140] [стр.141] [стр.142] [стр.143] [стр.144] [стр.145] [стр.146] [стр.147] [стр.148] [стр.149] [стр.150] [стр.151] [стр.152] [стр.153] [стр.154] [стр.155] [стр.156] [стр.157] [стр.158] [стр.159] [стр.160] [стр.161] [стр.162] [стр.163] [стр.164] [стр.165] [стр.166] [стр.167] [стр.168] [стр.169] [стр.170] [стр.171] [стр.172] [стр.173] [стр.174] [стр.175] [стр.176] [стр.177] [стр.178] [стр.179] [стр.180] [стр.181] [стр.182] [стр.183] [стр.184] [стр.185] [стр.186] [стр.187] [стр.188] [стр.189] [стр.190] [стр.191] [стр.192] [стр.193] [стр.194] [стр.195] [стр.196] [стр.197] [стр.198] [стр.199] [стр.200] [стр.201] [стр.202] [стр.203] [стр.204] [стр.205] [стр.206] [стр.207] [стр.208] [стр.209] [стр.210] [стр.211] [стр.212] [стр.213] [стр.214] [стр.215] [стр.216] [стр.217] [стр.218] [стр.219] [стр.220] [стр.221] [стр.222] [стр.223] [стр.224] [стр.225] [стр.226] [стр.227] [стр.228] [стр.229] [стр.230] [стр.231] [стр.232] [стр.233] [стр.234] [стр.235] [стр.236] [стр.237] [стр.238] [стр.239] [стр.240] [стр.241] [стр.242] [стр.243] [стр.244] [стр.245] [стр.246] [стр.247] [стр.248] [стр.249] [стр.250] [стр.251] [стр.252] [стр.253] [стр.254] [стр.255] [стр.256] [стр.257] [стр.258] [стр.259] [стр.260] [стр.261] [стр.262] [стр.263] [стр.264] [стр.265] [стр.266] [стр.267] [стр.268] [стр.269] [стр.270] [стр.271] [стр.272] [стр.273] [стр.274] [стр.275] [стр.276] [стр.277] [стр.278] [стр.279] [стр.280] [стр.281] [стр.282] [стр.283] [стр.284] [стр.285] [стр.286] [стр.287] [стр.288] [стр.289] [стр.290] [стр.291] [стр.292] [стр.293] [стр.294]