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

Подпрограмма:  FTFSR (модуль FTFSR_p)

Назначение

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

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

Пусть длина  N преобразуемого вещественного ряда  X является целой степенью двух:  N = 2 M.

Ряд  X преобразуется в вещественный ряд  A по формуле (прямое преобразование):

                    N-1             
        A r  =    ∑   X n * sin (π r * n / N)  ,    
                    n=0
            r = 0, ..., N - 1 

Tак как система функций  sin (π r x),  r = 0, ..., N - 1 ортогональна на сетке  Xn = n / N, но не ортонормирована, обратное преобразование совпадает с прямым с точностью до постоянного множителя  N / 2. B вычислениях используется метод быстрого преобразования Фурье [1].

Ряд коэффициентов Фурье  A получается на месте исходного ряда  Х без дополнительной рабочей памяти.

При больших  N число операций пропорционально  N * log2N.

1.  В.А.Морозов, Н.Н.Кирсанова, А.Ф.Сысоев. Комплекс алгоритмов быстрого преобразования Фурье дискретных рядов. Сб. "Численный анализ на ФОРТРАНе", вып. 15, Изд - во МГУ, 1976 г.

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

procedure FTFSR(var X :Array of Real; N :Integer);

Параметры

X - вещественный вектоp длины  N; перед началом работы подпрограммы содержит преобразуемый ряд  X. По окончании работы подпрограммы содержит преобразованный ряд  A;
N - заданная длина вектоpа  X (тип: целый).

Версии: нет

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

FTF1C - вычисление дискретного или обратного дискретного преобразования Фурье комплексного ряда длины, равной степени двух, методом быстрого преообразования Фурье.

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

  1. 

Длина N преобразуемого ряда должна быть целой степенью двух:  N = 2 M,  M - натуральное. B противном случае результат работы подпрограммы не определен.

  2.  Первая компонента преобразованного ряда  A всегда pавна нулю, т.е. по окончании работы подпрограммы  X (1) = 0 .

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

Unit TFTFSR_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, FTFSR_p;

function TFTFSR: String; 

implementation

function TFTFSR: String;
var
_i :Integer;
const
X :Array [0..7] of Real = ( 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0 );
begin
Result := '';
FTFSR(X,8);
Result := Result + #$0D#$0A;
for _i:=0 to 7 do
 begin
  Result := Result + Format('%20.16f ',[X[_i]]);
  if ( ((_i+1) mod 2)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TFTFSR',Result);  { вывод результатов в файл TFTFSR.res }
exit;
end;

end.

Результаты:

      X  =  (0.,  25.136697,  -9.656854,  7.4830288,  -3.999999, 
                3.3408931895,  -1.656854,  0.994561837)