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

Подпрограмма:  FTFLC (модуль FTFLC_p)

Назначение

Вычисление  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