Документ взят из кэша поисковой машины. Адрес
оригинального документа
: 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