Текст подпрограммы и версий
fta2r_p.zip , fta2e_p.zip
Тексты тестовых примеров
tfta2r_p.zip , tfta2e_p.zip

Подпрограмма:  FTA2R (модуль FTA2R_p)

Назначение

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

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

Подпрограмма FTA2R упаковывает два заданных одномерных массива вещественных чисел в один комплексный массив, затем обращается к подпрограмме FTA1R для выполнения прямого преобразования этого комплексного массива, после чего полученный преобразованный массив распаковывается в виде двух комплексных массивов, представляющих собой искомые преобразования исходных вещественных массивов.

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

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

procedure FTA2R(var ARRAY1 :Array of Real; var ARRAY2 :Array of Real;
                var FFTA1 :Array of Complex;
                var FFTA2 :Array of Complex; var N :Integer);

Параметры

ARRAY1 - вещественный одномерный массив длины  N, содержащий компоненты первого исходного массива вещественных чисел;
ARRAY2 - вещественный одномерный массив длины  N, содержащий компоненты второго исходного массива вещественных чисел;
FFTA1 - комплексный одномерный массив длины  N, содержащий на выходе прямое преобразование Фурье массива ARRAY1;
FFTA2 - комплексный одномерный массив длины  N, содержащий на выходе прямое преобразование Фурье массива ARRAY2;
N - длина исходных преобразуемых массивов (тип: целый).

Версии

FTA2E - одновременное выполнение прямого быстрого дискретного преобразования Фурье двух одномерных вещественных чисел, каждый из которых имеет длину  N, равную целой степени двух, в режиме расширенной (Extended) точности. Эта версия имеется только для тех компиляторов, входной язык которых допускает обработку комплексных чисел расширенной (Extended) точности; в этом случае параметры ARRAY1 и ARRAY2 должны иметь тип Extended, а параметры FFTA1 и FFTA2 - тип Complex.

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

       FTA1C -
       FTA1Z  
выполнение прямого и обратного быстрых преобразований Фурье одномерного массива комплексных чисел длины  N, равной целой степени двух, в режимах одинарной и расширенной (Extended) точности; используются в подпрограммах FTA2R и FTA2E соответственно.

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

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

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

Unit TFTA2R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FTA2R_p;

function TFTA2R: String;

implementation

function TFTA2R: String;
var
I,_i :Integer;
ARRAY1 :Array [0..3] of Real;
ARRAY2 :Array [0..3] of Real;
FFTA1 :Array [0..3] of Complex;
FFTA2 :Array [0..3] of Complex;
label
_1;
begin
Result := '';  { результат функции }
ARRAY1[0] := 1.0;
ARRAY1[1] := 4.0;
ARRAY1[2] := 7.0;
ARRAY1[3] := 10.0;
for I:=1 to 4 do
 begin
_1:
  ARRAY2[I-1] := ARRAY1[I-1];
 end;
FTA2R(ARRAY1,ARRAY2,FFTA1,FFTA2,4);
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
 begin
  Result := Result + Format('%20.16f %20.16f ',
 [FFTA1[_i].re,FFTA1[_i].im]);
  if ( ((_i+1) mod 2)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
 begin
  Result := Result + Format('%20.16f %20.16f ',
 [FFTA2[_i].re,FFTA2[_i].im]);
  if ( ((_i+1) mod 2)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TFTA2R',Result);  { вывод результатов в файл TFTA2R.res }
exit;
end;

end.

Результаты:

        FFTA1(1) = (22.0, 0.0) ,  FFTA1(2) = (- 6.0, - 6.0) 
        FFTA1(3) = (- 6.0, 0.0) ,  FFTA1(4) = (- 6.0,   6.0) 

        FFTA2(1) = (22.0, 0.0) ,   FFTA2(2) = (- 6.0, - 6.0) 
        FFTA2(3) = (- 6.0, 0.0) ,   FFTA2(4) = (- 6.0,   6.0)