Составители:
begin
PSrcRe := SrcRe; …;
if Cnt = 2 then
begin //тривиальная операция «бабочка»
Inc (PSrcRe); …;
X := SrcRe^; Y := PSrcRe^;
SrcRe^ := X + Y; PSrcRe^ := X – Y;
X := SrcIm^; Y := PSrcIm^;
SrcIm^ := X + Y; PSrcIm^ := X – Y;
end else
begin //переупорядочение и рекурсивный вызов для полпоследовательностей
Factor := K / Cnt;
HalfCnt := Cnt div 2;
Size := HalfCnt * SizeOfReal + 1;
HEvenRe := GlobalAlloc (GMem_Fixed, Size); …;
HOddRe := GlobalAlloc (GMem_Fixed, Size); …;
EvenRe := GlobalLock (HEvenRe); …;
OddRe := GlobalLock (HOddRe); …;
PEvenRe := EvenRe; …;
POddRe := OddRe; …;
//Разбивка на (не)чётные подпоследовательности
for I := 0 to Cnt – 1 do
begin
if Odd (I) then
begin
POddRe^ := PSrcRe^; …;
Inc (POddRe); …;
end else
begin
PEvenRe^ := PSrcRe^; …;
Inc (PEvenRe); …;
end;
Inc (PSrcRe); …;
end;
//Рекурсивная обработка (не)чётных подпоследовательностей
LFDFT (EvenRe, EvenIm, HalfCnt);
LFDFT (OddRe, OddIm, HalfCnt);
//Сборка обработанных подпоследовательностей
PSrcRe := SrcRe; …;
PRe := SrcRe; …;
Inc (pRe, HalfCnt); …;
PEvenRe := EvenRe; …;
POddRe := OddRe; …;
for I := 0 to HalfCnt – 1 do
begin
WRe := Cos (Factor * I); WIm := – Sin (Factor * I);
PSrcRe^ := POddRe^ * WRe – POddIm^ * WIm;
PSrcIm^ := POddRe^ * WIm + POddIm^ * WRe;
PRe^ := pSrcRe^; …;
PSrcRe^ := pEvenRe^ + PSrcRe^; …;
PRe^ := PEvenRe^ – PRe^; …;
Inc (PSrcRe); …;
Inc (PRe); …;
Inc (PEvenRe); …;
Inc (POddRe); …;
end;
GlobalUnlock (HEvenRe); …;
GlobalUnlock (HOddRe); …;
GlobalFree (HEvenRe); …;
GlobalFree (HOddRe); …;
end;
end;
begin
K := 2 * Pi * Direct;
Страницы
- « первая
- ‹ предыдущая
- …
- 154
- 155
- 156
- 157
- 158
- …
- следующая ›
- последняя »