Напомним основные формулы:
(16)
На рисунке проиллюстрирован второй этап вычисления ДПФ. Линиями сверху
вниз показано использование элементов для вычисления значений новых элментов.
Очень удобно то, что два элемента на определенных позициях в массиве дают два
элемента на тех же местах. Только принадлежать они будут уже другим, более
длинным массивам, размещенным на месте прежних, более коротких. Это позволяет
обойтись одним массивом данных для исходных данных, результата и хранения
промежуточных результатов для всех
рис. 4
Итак, вот действия, которые нужно выполнить после первичной перестановки элементов.
#define T 4 #define Nmax (2 << T) complex Q, Temp, j(0,1); static complex x[Nmax]; static double pi2 = 2 * 3.1415926535897932384626433832795; int N, Nd2, k, mpNd2, m; for(N = 2, Nd2 = 1; N <= Nmax; Nd2 = N, N += N) { for(k = 0; k < Nd2; k++) { W = exp(-j*pi2*k/N); for(m = k; m < Nmax; m += N) { mpNd2 = m + Nd2; Temp = W * x[mpNd2]; x[mpNd2] = x[m] - Temp; x[m] = x[m] + Temp; } } }
Переменная
В алгоритме | В формуле |
Внешний цикл - это основные итерации. На каждой из них
Следующий цикл по
Самый внутренний цикл перебирает
Именно так, а не иначе: сначала вычисляются элементы с номерами
Обратите внимание, что
Алгоритм обратного дискретного преобразования Фурье отличается только тем, что
вместо
Для справки: произведение, сумма и экспонента для комплексных чисел вычисляются по формулам:
(x,y)+(x',y')=(x+x')(y+y')
e-jv=(cos v, - sinv)
где