|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/ft_htm_p/ftfrr_p.htm
Дата изменения: Thu Nov 5 12:32:43 2015 Дата индексирования: Sun Apr 10 03:39:13 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий ftfrr_p.zip |
Тексты тестовых примеров tftfrr_p.zip |
Вычисление коэффициентов действительного преобразования Фурье или вычисление значений функции по ее действительным коэффициентам Фурье. Длина действительного ряда (преобразуемого или вычисляемого) должна быть целой степенью двух.
Пусть задан действительный ряд X длины 2 * N. При вычислении действительного преобразования Фурье ряд X преобразуется в два действительных ряда A и B длины N + 1 по формулам
2N-1
A r = (1/N) ∑ X n cos (π r n / N) , r = 0, 1, ..., N
n=0
2N-1
B r = (1/N) ∑ X n sin (π r n / N) , r = 0, 1, ..., N
n=0
при этом B0 = BN = 0. . Для восстановления ряда X по заданным действительным коэффициентам Фурье, элементы ряда Х вычисляются по формуле
X r = (A0 / 2) + ((- 1) r AN / 2) +
N-1
+ ∑ (A n cos (π r n / N) + B n sin (π r n / N)) ,
n=1
r = 0, 1, ..., 2N - 1
B вычислениях используется метод быстрого преобразования Фурье. При больших N число операций пропорционально N * log2N. Данная подпрограмма подробно описана в [1, стp. 47] под именем RFFT.
| 1. | В.А.Морозов, Н.Н.Кирсанова, А.Ф.Сысоев, Комплекс алгоритмов быстрого преобразования Фурье дискретных рядов. Сб. "Численный анализ на ФОРТРАНе". вып. 15. Изд - во МГУ, 1976 г. |
procedure FTFRR(var P :Real; N1 :Integer; N2 :Integer;
var A :Array of Real; var B :Array of Real;
var X :Array of Real);
Параметры
| P - | заданная вещественная переменная, признак преобразования Фурье. Если на входе P > 0., то вычисляются коэффициенты Фурье. Если на входе P < 0., то вычисляются значения функции; |
| N1 - | заданная длина массивов действительных коэффициентов Фурье, N1 = N2 / 2 + 1 (тип: целый); |
| N2 - | заданная длина массива значений функции, целая степень двух (тип: целый); |
| A - | вещественный массив длины N1, содержащий коэффициенты разложения Фурье по четным гармоникам. При P < 0. задается на входе подпрограммы, при P > 0. - вычисляется; |
| B - | вещественный массив длины N1, содержащий коэффициенты разложения Фурье по нечетным гармоникам. При P < 0. задается на входе подпрограммы, при P > 0. - вычисляется; |
| X - | вещественный массив длины N2, содержащий значения функции. При P > 0. задается на входе подпрограммы, при P < 0. - вычисляется. |
Версии: нет
Вызываемые подпрограммы
| FTF1C - | вычисление дискретного или обратного дискретного преобразования Фурье комплексного ряда длины, равной степени двух, методом быстрого преобразования Фурье. |
Замечания по использованию
| 1. |
При вычислении коэффициентов Фурье (P > 0.) исходная информация (ряд значений функции) сохраняется. | |
| 2. |
При вычислении значений функции (P < 0.) исходная информация (ряды коэффициентов Фурье) не сохраняется. | |
| 3. |
Если на входе подпрограммы задано P = 0., то никаких вычислений не производится. | |
| 4. | При вычислении коэффициентов Фурье первый и последний коэффициенты разложения Фурье по нечетным гармоникам равны нулю. |
Unit TFTFRR_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, FTFRR_p;
function TFTFRR: String;
implementation
function TFTFRR: String;
var
N1,N2,_i :Integer;
P :Real;
X :Array [0..7] of Real;
const
A :Array [0..4] of Real = ( 0.0,0.0,1.0,0.0,0.0 );
B :Array [0..4] of Real = ( 0.0,1.0,0.0,0.0,0.0 );
begin
Result := '';
P := -1.0;
N1 := 5;
N2 := 8;
FTFRR(P,N1,N2,A,B,X);
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('TFTFRR',Result); { вывод результатов в файл TFTFRR.res }
exit;
end;
end.
Результаты:
X(1) = 1.0, X(2) = 0.70710678,
X(3) = 0.0, X(4) = 0.70710678,
X(5) = 1.0, X(6) = -0.70710678,
X(7) = -2.0, X(8) = -0.70710678