|
Текст подпрограммы и версий ftflc_p.zip |
Тексты тестовых примеров tftflc_p.zip |
Вычисление L = 2 J последовательных коэффициентов прямого или обратного дискретного преобразования Фурье комплексного ряда длины K * L с использованием метода быстрого преобразования Фурье.
Пусть N - длина преобразуемого комплексного ряда A pавна K * L, где K - целое, а L - целая степень двух. Вычисляются L последовательных (начиная с номеpа M * L, M - задано, 0 ≤ М ≤ К - 1) коэффициентов Фурье ряда A, то есть, ряд А преобразуется в комплексный ряд X длины L по формуле:
N-1
X r = ∑ A n*W n (ML + r) , r = 0, 1, ..., L - 1 ,
n=0
где W = e- 2π i / N для дискретного преобразования Фурье W = e2π i / N для обратного дискретного преобразования Фурье. B вычислениях используется метод быстрого преобразования Фурье.
При больших N число операций пропорционально N * (1 + log2L). Данная подпрограмма подробно описана в [1, стp. 39] под именем FFTL. Подпрограмма может использоваться, например, для выделения гармонических составляющих в некотоpом диапазоне частот.
| 1. | В.А.Морозов, Н.Н.Кирсанова, А.Ф.Сысоев. Комплекс алгоритмов быстрого преобразования Фурье дискретных рядов. Сб. "Численный анализ на ФОРТРАНе", вып. 15, Изд. МГУ, 1976. |
procedure FTFLC(var ARE :Array of Real; var AIM :Array of Real;
N :Integer; L :Integer; M :Integer; var P :Real;
var XRE :Array of Real; var XIM :Array of Real);
Параметры
|
ARE - AIM | вещественные массивы длины N, компоненты которых являются соответственно действительными и мнимыми частями элементов преобразуемого комплексного ряда A; |
| N - | заданная длина преобразуемого ряда A (тип: целый); |
| L - | заданное число вычисляемых коэффициентов Фурье, целая степень двух, делитель N (тип: целый); |
| M - | заданный параметр, определяющий номеp первого вычисляемого коэффициента Фурье. Этот номеp будет pавен M * L (тип: целый); |
| P - | заданная вещественная переменная, признак преобразования Фурье. При P > 0. выполняется дискретное преобразование Фурье, при P < 0. выполняется обратное дискретное преобразование Фурье; |
|
XRE - XIM | вещественные массивы длины L, содержащие вычисленные соответственно действительные и мнимые части элементов преобразованного ряда. |
Версии: нет
Вызываемые подпрограммы
| FTF1C - | вычисление дискретного или обратного дискретного преобразования Фурье комплексного ряда длины, равной целой степени двух, методом быстрого преобразования Фурье. |
Замечания по использованию
| 1. |
Количество L вычисляемых коэффициентов Фурье должно быть целой степенью двух L = 2 J , J - целое , L ≥ 4 | |
| 2. |
При работе подпрограммы исходная информация, расположенная в массивах ARE, AIM не сохраняется. | |
| 3. |
Если при обращении к подпрограмме задать P = 0., то pезультат ее работы не определен. | |
| 4. | Результат может быть получен на месте первых L компонент исходного ряда (вместо массивов XRE, XIM можно использовать первые L компонент массивов ARE, AEM). |
Unit TFTFLC_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FTFLC_p;
function TFTFLC: String;
implementation
function TFTFLC: String;
var
I,N,L,M,_i :Integer;
P :Real;
ARE :Array [0..11] of Real;
AIM :Array [0..11] of Real;
XRE :Array [0..3] of Real;
XIM :Array [0..3] of Real;
label
_1;
begin
Result := ''; { результат функции }
for I:=1 to 12 do
begin
ARE[I-1] := I-1.0;
_1:
AIM[I-1] := 0.0;
end;
N := 12;
L := 4;
M := 1;
P := 1.0;
FTFLC(ARE,AIM,N,L,M,P,XRE,XIM);
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
begin
Result := Result + Format('%16.7f ',[XRE[_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 3 do
begin
Result := Result + Format('%16.7f ',[XIM[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('TFTFLC',Result); { вывод результатов в файл TFTFLC.res }
exit;
end;
end.
Результаты:
XRE(1) = -6.0, XRE(2) = -6.0, XRE(3) = -6.0, XRE(4) = -6.0
XIM(1) = 3.464102, XIM(2) = 1.607695, XIM(3) = 0.0
XIM(4) = -1.607695