44
оптимальным путем их реализации, также как и описываемые через
аналогичные операции умножения на поворачивающие множители.
Серьезным недостатком такого представления алгоритма БПФ является
трудность перехода к программной реализации алгоритма.
Для практических целей более удобно описание алгоритма БПФ через
систему рекуррентных выражений.
3.3. Представление алгоритма БПФ в виде рекурсивных соотношений
Вернемся к рассмотрению процедуры БПФ. Мы говорили, что на каждой
ступени вычисляются группы однородных операций:
- умножение на матрицу D поворачивающих множителей;
- умножение на матрицу
$
E
2
;
- перестановка элементов вектора результатов.
Основная сложность в записи алгоритма БПФ состоит именно в описании
перестановок элементов вектора.
Если рассмотреть граф БПФ (например, для N=8, рис3.1), то можно
увидеть, что на первой итерации как бы независимо отрабатывается 4
фрагмента исходного вектора, содержащие по 2 элемента: такие фрагменты
назовем подвекторами. В данном случае это подвектор
X={x
0
, x
4
}; X={x
1
, x
5
};
X={x
2
, x
6
}; X={x
3
, x
7
}. На второй итерации отрабатывается 2 подвектора по 4
элемента, а на третий - один вектор из восьми элементов.
Таким образом, суть алгоритма БПФ состоит в разбиении на подвектора по
2 элемента, их независимой обработке, и формированию из промежуточных
подвекторов вдвое большей длины (очевидно, что число таких подвекторов
уменьшается от итерации к итерации), что выполняется
до тех пор, пока не
образуется один вектор длиной N элементов.
Подобная процедура может быть описана как [11]:
где l=2
m-1
, mM∈1, , k=(n)
mod l
,
k
m
∈−
−
02 1
1
,
,
)
nN∈−01,
- текущий индекс
элемента вектора, k - соответствует номеру Б0 при обработке подвектора,
Wj
k
N
N
k
m
m
=−exp( )
2
,
m
2 - длина подвектора, причём для m=0 вектор
()0
.
Номер обрабатываемого на данной итерации блока данных определяется целой
частью (n)
mod l
Выражение (3.9) определяет обработку отдельного, но любого подвектора
на каждой итерации из общего их числа
NN
m
Mm
/ =
−
2 . Индекс n определяется
следующим образом:
nN i
imi
Mm
==−
−
−
(, )02 1
,
где
n
i
- начальный индекс для i-го подвектора.
m
rm
km
k
km
km
F
f
f
W
W
f
f
m
m
N
N
==
−
+
−
+−
,
,
,
,
(.)
1
0
1
11
1
1
1
1
0
0
39