|
Текст подпрограммы и версий ftftc_p.zip |
Тексты тестовых примеров tftftc_p.zip |
Вычисление двумерного дискретного или обратного дискретного преобразования Фурье комплексной матрицы размера 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. |