Текст подпрограммы и версий
ftftc_p.zip
Тексты тестовых примеров
tftftc_p.zip

Подпрограмма:  FTFTC (модуль FTFTC_p)

Назначение

Вычисление двумерного дискретного или обратного дискретного преобразования Фурье комплексной матрицы размера  N1 на N2,  N1 = 2 J1,  N2 = 2 J2 методом быстрого преобразования Фурье.

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

Комплексная матрица  A размера  N1 на N2, заданная массивами своих действительных и мнимых частей, преобразуется в комплексную матрицу  C размера  N1 на N2 по формуле

                       N1-1      N2-1            
        C r1, r2  =  ∑         ∑   A n1, n2  e ± 2π i (n1 r1 / N1 + n2 r2 / N2) ,
                      n1=0      n2=0

            r1 = 0, 1, ..., N1 - 1,     r2 = 0, 1, ..., N2 - 1 , 

где знак минус в показателе экспоненты для прямого, а плюс для обратного двумерного дискретного преобразования Фурье.

Матрица  C задается массивами действительных и мнимых частей своих элементов и получается на месте матрицы  A.

B вычислениях используется метод быстрого преобразования Фурье. При больших  N1, N2 число операций пропорционально  N1*N2 (log2N1 + log2N2). Данная подпрограмма подробно описана в [1, стp. 45] под именем  FFT2.

1.  В.А.Морозов, Н.Н.Кирсанова, А.Ф.Сысоев, Комплекс алгоритмов быстрого преобразования Фурье дискретных рядов. Сб. "Численный анализ на ФОРТРАНе", вып. 15, Изд. МГУ, 1976.

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

procedure FTFTC(var ARE :Array of Real; var AIM :Array of Real;
                N1 :Integer; N2 :Integer; var P :Real);

Параметры

         ARE -
         AIM  
двумерные вещественные массивы размера  N1 на N2, компоненты которых перед началом работы подпрограммы являются соответственно действительными и мнимыми частями элементов преобразуемой комплексной матрицы  A. По окончании работы подпрограммы содержат соответственно действительные и мнимые части элементов преобразованной матрицы  C ;
N1 - заданное число стpок матрицы  A (тип: целый);
N2 - заданное число столбцов матрицы  A (тип: целый);
P - заданная вещественная переменная, признак преобразования Фурье. При  P > 0. выполняется дискретное преобразование Фурье, при  P < 0. выполняется обратное дискретное преобразование Фурье.

Версии: нет

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

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

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

  1. 

Размерности преобразуемой матрицы должны быть целой степенью двух  N1 = 2 J1 ,  N2 = 2 J2 ,  где  J1, J2 - целые;  N1 ≥ 4 ,  N2 ≥ 4 .

  2.  Если при обращении к подпрограмме задать  P = 0, то pезультат ее работы не определен.

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

Unit TFTFTC_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FTFTC_p;

function TFTFTC: String;

implementation

function TFTFTC: String;
var
I,J,N1,N2,_i :Integer;
P :Real;
ARE :Array [0..15] of Real;
AIM :Array [0..15] of Real;
label
_1;
begin
Result := '';  { результат функции }
for I:=1 to 4 do
 begin
  for J:=1 to 4 do
   begin
    ARE[(I-1)+(J-1)*4] := 4.0*I+J-4.0;
_1:
    AIM[(I-1)+(J-1)*4] := 0.0;
   end;
 end;
N1 := 4;
N2 := 4;
P := 1.0;
FTFTC(ARE,AIM,N1,N2,P);
Result := Result + #$0D#$0A;
for _i:=0 to 15 do
 begin
  Result := Result + Format('%16.7f ',[ARE[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 15 do
 begin
  Result := Result + Format('%16.7f ',[AIM[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TFTFTC',Result);  { вывод результатов в файл TFTFTC.res }
exit;
end;

end.

Результаты:

                    |  136.   -8.   -8.   -8.  |
                    |  -32.     0.     0.    0.  |
      ARE  =  |  -32.     0.     0.    0.  |
                    |  -32.     0.     0.    0.  |

                    |    0.     8.    0.   -8.  |
                    |   32.    0.    0.     0.  |
      AIM  =  |    0.      0.    0.    0.  |
                    |  -32.    0.    0.    0.  |