Вывод основных формул
[предыдущая глава]  [оглавление]  [следующая глава]

Алгоритм быстрого преобразования Фурье (БПФ) - это оптимизированный по скорости способ вычисления ДПФ. Основная идея заключается в двух пунктах.

  1. Необходимо разделить сумму (1) из N слагаемых на две суммы по N/2 слагаемых, и вычислить их по отдельности. Для вычисления каждой из подсумм, надо их тоже разделить на две и т.д.
  2. Необходимо повторно использовать уже вычисленные слагаемые.

Применяют либо "прореживание по времени" (когда в первую сумму попадают слагаемые с четными номерами, а во вторую - с нечетными), либо "прореживание по частоте" (когда в первую сумму попадают первые N/2 слагаемых, а во вторую - остальные). Оба варианта равноценны. В силу специфики алгоритма приходится применять только N, являющиеся степенями 2. Рассмотрим случай прореживания по времени.


Теорема 3.

Определим еще две последовательности: {x[even]} и {x[odd]} через последовательность {x} следующим образом:

x[even]n = x2n,
x[odd]n = x2n+1,
    (6)
n = 0, 1,..., N/2-1

Пусть к этим последовательностям применены ДПФ и получены результаты в виде двух новых последовательностей {X[even]} и {X[odd]} по N/2 элементов в каждой.

Утверждается, что элементы последовательности {X} можно выразить через элементы последовательностей {X[even]} и {X[odd]} по формуле:

    (7).

Доказательство:

Начинаем от формулы (2), в которую подставляем равенства из (6):

    (8)

Теперь обратим внимание на то, что:

    (9)

Подставляя (9) в (8) получаем:

    (10)

Сравним с формулами для X[even]k и X[odd]k при k = 0,1,…,N/2-1:

    (11)

Подставляя (11) в (10) получим первую часть формулы (7):

Это будет верно при k = 0,1,…,N/2-1.

Согласно теореме 1:

    (12)

Подставим (12) в (10), и заменим по теореме 2:

    (13)

Для k = N/2,…,N-1 по формуле (2):

    (14)

Подставляем (14) в (13):

Эта формула верна для k = N/2,…,N-1 и, соответственно, (k - N/2) = 0,1,…,N/2-1 и представляет собой вторую и последнюю часть утверждения (7), которое надо было доказать.


Формула (7) позволяет сократить число умножений вдвое (не считая умножений при вычислении X[even]k и [odd]k), если вычислять Xk не последовательно от 0 до N - 1, а попарно: X0 и XN/2, X1 и XN/2+1,..., XN/2-1 и XN. Пары образуются по принципу: Xk и XN/2+k.


Теорема 4.

ДПФ можно вычислить также по формуле:

    (15)

Доказательство:

Согласно второй части формулы (7), получим:

 

Это доказывает второе равенство в утверждении теоремы, а первое уже доказано в теореме 3.


Также по этой теореме видно, что отпадает необходимость хранить вычисленные X[even]k и X[odd]k после использования при вычислении очередной пары и одно вычисление можно использовать для вычисления двух элементов последовательности {X}.

На этом шаге будет выполнено N/2 умножений комплексных чисел. Если мы применим ту же схему для вычисления последовательностей {X[even]} и {X[odd]}, то каждая из них потребует N/4 умножений, итого еще N/2. Продолжая далее в том же духе log2N раз, дойдем до сумм, состоящих всего из одного слагаемого, так что общее количество умножений окажется равно (N/2)log2N, что явно лучше, чем N2 умножений по формуле (2).

Рассмотрим БПФ для разных N. Для ясности добавим еще один нижний индекс, который будет указывать общее количество элементов последовательности, к которой этот элемент принадлежит. То есть X{R}k - это k-й элемент последовательности {X{R}} из R элементов. X{R}[even]k - это k-й элемент последовательности {X{R}[even]} из R элементов, вычисленный по четным элементам последовательности {X{2R}}. X{R}[odd]k - это k-й элемент последовательности {X{R}[odd]}, вычисленный по нечетным элементам последовательности {X{2R}}.

В вырожденном случае, когда слагаемое всего одно (N = 1) формула (1) упрощается до:

,

Поскольку в данном случае k может быть равно только 0, то X{1}0 = x{1}0, то есть, ДПФ над одним числом дает это же самое число.

Для N = 2 по теореме 4 получим:

(откуда берутся X{2}[even]0 и т.д. см. пояснение чуть ниже)

Для N = 4 по теореме 4 получим:

Отсюда видно, что если элементы исходной последовательности были действительными, то при увеличении N элементы ДПФ становятся комплексными.

Поясним, откуда получились X{2}[even]0,...

Была исходная последовательность:

x0, x1, x2, x3

Она была разделена на две - четную (even) и нечетную (odd), в каждой по 2 элемента:

evenodd
x0, x2 x1, x3

Эти последовательности тоже были поделены на последовательности по 1 элементу:

evenodd
evenodd
x0 x2
evenodd
x1 x3

Как выше пояснялось, преобразование над одним числом дает то же самое число. То есть, получается то же самое, но это уже как бы преобразованные последовательности по 1 элементу. Теперь применяется формула для N = 2, чтобы из последовательностей по 1 элементу сделать последовательности по 2 элемента, но уже прошедшие преобразование Фурье:

evenodd
x0 + x2, x0 - x2 x1 + x3, x1 - x3

Вот эти две последовательности и дают нам искомые переменные. Ниже они показаны в тех же ячейках таблицы:

evenodd
X{2}[even]0, X{2}[even]1 X{2}[odd]0, X{2}[odd]1

Для N = 8 по теореме 4 получим:

Принцип вычисления тот же самый: разбиение на последовательности по 4, 2, 1 элементу, а затем - преобразование обратно в последовательности по 1, 2, 4 элемента. На каждом этапе выполняются попарные сложения и вычитания, а меняются только W-коэффициенты.

Обратите внимание, что на предыдущем шаге мы использовали степени W4, а на этом - степени W8. Лишних вычислений можно было бы избежать, если учесть тот факт, что

Тогда формулы для N=4 будут использовать те же W-множители, что и формулы для N=8:

Подведем итог:

В основе алгоритма БПФ лежат следующие формулы:

    (16)