Текст подпрограммы и версий ( Фортран )
fta3r.zip , fta3d.zip
Тексты тестовых примеров ( Фортран )
tfta3r.zip , tfta3d.zip
Текст подпрограммы и версий ( Си )
fta3r_c.zip , fta3d_c.zip
Тексты тестовых примеров ( Си )
tfta3r_c.zip , tfta3d_c.zip
Текст подпрограммы и версий ( Паскаль )
fta3r_p.zip , fta3e_p.zip
Тексты тестовых примеров ( Паскаль )
tfta3r_p.zip , tfta3e_p.zip

Подпрограмма:  FTA3R

Назначение

Выполнение прямого и обратного быстрых преобразований Фурье одномерного массива вещественных чисел длины 2N, где  N равняется целой степени двух.

Математическое описание

Пусть известны значения  f j = f ( t j ) вещественной функции  f (t) на равномерной сетке  t j = j Δt,  j = 0, 1, 2, ..., 2N - 1 (где  Δt - шаг сетки, а  N равняется целой степени двух), заданные в виде одномерного массива вещественных чисел ARRAY длины 2N.

Подпрограмма FTA3R имеет два режима работы, задаваемых при обращении к ней значением параметра IREG. В первом режиме (IREG = 1) выполняется прямое быстрое дискретное преобразование Фурье заданного массива ARRAY, рассматриваемого как комплексный массив длины  N, компоненты которого  h j, тем самым, выражаются через компоненты  f j, следующим образом:

                       h j  =  f 2j  +  i f 2j+1 ,    j = 0, 1, 2, ..., N-1  . 

В результате этого прямого преобразования строится промежуточный комплексный массив длины  N, компоненты которого  Hn (n = 0, 1, 2, ..., N - 1) определяются формулой:

                             N-1
                  Hn  =   ∑    f 2k  e2π i k n / N    +
                             k =0
                                                                      N-1
                                                              +   i   ∑    f 2k+1 e2π i k n / N
                                                                      k =0        

Затем на основе полученных компонент  Hn вычисляются компоненты  Fn (n = 0, 1, 2, ..., 2N - 1) искомого комплексного массива, являющегося прямым преобразованием исходного вещественного массива ARRAY.

Поскольку имеет место равенство  F*2N - 1 = Fn (где символ  * означает комплексное сопряжение), то достаточно хранить не все 2N компонент  Fn, а только N + 1 компоненту  F0, F1, F2, ..., FN. Поэтому результирующий комплексный массив подпрограммой FTA3R помещается на место исходного вещественного массива ARRAY, причем в элементах массива ARRAY (1) и ARRAY (2) располагаются значения  F0 и FN соответственно, которые всегда являются вещественными.

Во втором режиме (IREG = - 1) выполняется обратное быстрое дискретное преобразование Фурье, состоящее в восстановлении из комплексных значений  Fn (n = 0, 1, 2, ..., N), заданных в виде вещественного массива ARRAY, вещественных значений  f j (j = 0, 1, 2, ..., 2N - 1). В этом случае элементы массива ARRAY должны задаваться следующим образом: ARRAY (1) = F0, ARRAY (2) = FN, ARRAY (3) = Re (F1), ARRAY (4) = Im (F1),  ..., ARRAY (2N - 1) = Re (FN - 1), ARRAY (2N) = Im (FN - 1).

Восстановленные значения  f j помещаются в массиве ARRAY.

Н.С.Бахвалов, Н.П.Жидков, Г.М.Кобельков. Численные методы. Изд - во "Наука", 1987.

Использование

    SUBROUTINE  FTA3R (ARRAY, N, IREG) 

Параметры

ARRAY - вещественный одномерный массив длины 2N, содержащий на входе значения  f j (IREG = 1) или  Fn (IREG = - 1), а на выходе значения  Fn (IREG = 1) или  f j (IREG = - 1);
N - половина длины массива ARRAY, равная целой степени двух (тип: целый);
IREG - задает режим работы подпрограммы (тип: целый); при этом:
IREG=  1 - когда выполняется прямое преобразование;
IREG= -1 - когда выполняется обратное преобразование.

Версии

FTA3D - выполнение прямого и обратного быстрых дискретных преобразований Фурье одномерного массива вещественных чисел длины 2N, где  N является целой степени двух, в режиме удвоенной точности; при этом параметр ARRAY должен иметь тип DOUBLE PRECISION.

Вызываемые подпрограммы

       FTA1C -
       FTA1P  
выполнение прямого и обратного быстрых дискретных преобразований Фурье одномерного массива комплексных чисел длины  N, равной целой степени двух, в режимах одинарной и удвоенной точности; используются в подпрограммах FTA3R и FTA3D соответственно.

Замечания по использованию

  В подпрограммах FTA3R и FTA3D проверка того, что значение  N должно быть целой степенью двух, не производится.

Пример использования

       DIMENSION  ARRAY(4) 
       N = 2 
       ARRAY(1) = 1.0 
       ARRAY(2) = 4.0 
       ARRAY(3) = 7.0 
       ARRAY(4) = 10.0 
       CALL  FTA3R (ARRAY, N, 1) 

Результаты:

        ARRAY(1) = 22.0 ,   ARRAY(2) = - 6.0 , 
        ARRAY(3) = - 6.0 ,   ARRAY(4) = - 6.0