Текст подпрограммы и версий ( Фортран )
fta4r.zip , fta4d.zip
Тексты тестовых примеров ( Фортран )
tfta4r.zip , tfta4d.zip
Текст подпрограммы и версий ( Си )
fta4r_c.zip , fta4d_c.zip
Тексты тестовых примеров ( Си )
tfta4r_c.zip , tfta4d_c.zip
Текст подпрограммы и версий ( Паскаль )
fta4r_p.zip , fta4e_p.zip
Тексты тестовых примеров ( Паскаль )
tfta4r_p.zip , tfta4e_p.zip

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

Назначение

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

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

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

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

                              N-1
                  Fk   =   ∑    f j sin ( π j k / N ) .
                              j =1 

В этом режиме подпрограмма FTA4R из исходного массива ARRAY строит вспомогательный вещественный массив  Y длины  N, компоненты которого  yj ( j = 0, 1, 2, .., N - 1) определяются формулами:

                y0  =  0 
                yj  =  sin ( j π / N ) ( f j + f N-j ) + 0.5 ( f j - f N-j ) ,    j > 0 . 

В результате применения к полученному массиву  Y подпрограммы FTA3R строится комплексный массив длины N/2, вещественные Rk и мнимые  Ik (k = 0, 1, 2, ..., N/2 - 1) части компонент которого выражаются через компоненты искомого массива следующим образом:

                             N-1
                  Rk  =   ∑    yj cos ( 2π j k / N )  =  F2k+1 - F2k-1
                             j =0 
                            N-1
                  Ik   =   ∑    yj sin ( 2π j k / N )  =  F2k
                            j =0 

Таким образом, компоненты искомого массива определяются из соотношений:

                             N-1
                  F1  =   ∑    f j sin ( j π / N )
                             j =0 

                  F2k =  Ik ,    F2k+1  =  F2k-1 + Rk ,      k = 0, 1, 2, ..., N/2-1 

Вычисленные значения  Fk располагаются в том же массиве ARRAY.

Во втором режиме (IREG = - 1) выполняется обратное быстрое дискретное синус - преобразование Фурье, состоящее в восстановлении из значений  Fk (k = 0, 1, 2, ..., N - 1), заданных в виде одномерного массива вещественных чисел ARRAY длины  N, значений  f j ( j = 0, 1, 2, ..., N - 1), которые располагаются в том же массиве ARRAY. Используется та же схема счета, что и в первом режиме, только на последнем этапе результирующий массив ARRAY умножается на множитель 2/N.

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

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

    SUBROUTINE  FTA4R (ARRAY, N, IREG) 

Параметры

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

Версии

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

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

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

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

 

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

В этих подпрограммах при обратном преобразовании (IREG = - 1) элемент массива ARRAY (1) всегда равен нулю, т.е. восстанавливаются все значения  f j из  Fk, кроме  f 0, что вытекает из сущности синус - преобразования.

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

       DIMENSION  ARRAY(8) 
       DATA  ARRAY /1., 2., 3., 4., 5., 6., 7., 8./ 
       N = 8 
       CALL  FTA4R(ARRAY, N, 1) 
       .
       . 
       .
       CALL  FTA4R(ARRAY, N, - 1) 

Результаты: 

   а) в случае прямого преобразования:
      ARRAY = (0.0, 25.1367, - 9.65685, 7.48303, - 4.0, 3.34089,  
                         - 1.65685, 0.994563) 

   б) в случае обратного преобразования:
      ARRAY = (0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0)