Текст подпрограммы и версий fta2r_p.zip , fta2e_p.zip |
Тексты тестовых примеров tfta2r_p.zip , tfta2e_p.zip |
Одновременное выполнение прямого быстрого дискретного преобразования Фурье двух одномерных массивов вещественных чисел, каждый из которых имеет длину 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)