Текст подпрограммы и версий ( Фортран ) fta5r.zip , fta5d.zip |
Тексты тестовых примеров ( Фортран ) tfta5r.zip , tfta5d.zip |
Текст подпрограммы и версий ( Си ) fta5r_c.zip , fta5d_c.zip |
Тексты тестовых примеров ( Си ) tfta5r_c.zip , tfta5d_c.zip |
Текст подпрограммы и версий ( Паскаль ) fta5r_p.zip , fta5e_p.zip |
Тексты тестовых примеров ( Паскаль ) tfta5r_p.zip , tfta5e_p.zip |
Выполнение прямого и обратного быстрых дискретных косинус - преобразований Фурье одномерного массива вещественных чисел длины N, равной степени двух.
Пусть известны значения f j = f ( t j ) вещественной функции f (t) на равномерной сетке t j = j Δt, j = 0, 1, 2, ..., N - 1 (где Δt - шаг сетки, а N равняется целой степени двух), заданные в виде одномерного массива вещественных чисел ARRAY длины N.
Подпрограмма FTA5R имеет два режима работы, задаваемых при обращении к ней значением параметра IREG. В первом режиме ( IREG = 1) выполняется прямое быстрое дискретное косинус - преобразование Фурье заданного массива ARRAY, состоящее в получении N вещественных чисел Fk (k = 0, 1, 2, ..., N - 1) из чисел f j по формуле:
N-1 Fk = ∑ f j cos(π j k / N) . j =1
В этом режиме подпрограмма FTA5R из исходного массива ARRAY строит вспомогательный вещественный массив Y длины N, компоненты которого yj ( j = 0, 1, 2, .., N - 1) определяются формулами:
y 0 = f 0 y j = 0.5 ( f j + f N-j ) - sin( j π / N ) ( f j - f N-j ) , j > 0 .
В результате применения к полученному массиву Y подпрограммы FTA3R строится комплексный массив длины N/2 с вещественными Rk и мнимыми Ik (k = 0, 1, 2, ..., N/2 - 1) частями. Компоненты искомого массива определяются через Rk и Ik следующим образом:
N-1 F1 = ∑ f j cos ( j π / N ) j= 0 F2k = Rk , F2k+1 = F2k-1 + Ik , k = 0, 1, 2, ..., N/2-1
Вычисленные значения Fk располагаются в том же массиве ARRAY.
Во втором режиме ( IREG = - 1) выполняется обратное быстрое дискретное косинус - преобразование Фурье, состоящее в восстановлении из значений Fk (k = 0, 1, 2, ..., N - 1), заданных в виде одномерного массива вещественных чисел ARRAY длины N, значений f j ( j = 0, 1, 2, ..., N - 1), которые располагаются в том же массиве ARRAY. Для этого строится массив f m ( m = 0, 1, 2, ..., N - 1) по следующей формуле:
N-1 f m = ∑ Fk cos ( π k m / N ) . k =0 Между значениями f m и f m существуют соотношения: f 0 = N f0 + ∑ f j по нечетным j (1) f m = (N/2) f m + ∑ f j , m - нечетные по четным j f m = (N/2) f m + ∑ f j , m - четные , m ≠ 0 по нечетным j
Неизвестные суммы в правых частях этих соотношений определяются следующим образом:
N-1 C1 є ∑ f m = (N/2) ( f 0 + ∑ f j ) j =0 по четным m N-1 C2 є ∑ f m = (N/2) ∑ f j j =0 по нечетным m Отсюда следует, что (N/2) f 0 = C1 - C2 . Поэтому ∑ f j = f 0 - 2 ( C1 - C2 ) по нечетным j ∑ f j = (2/N) C2 - ∑ f j по четным j по нечетным j
Зная эти суммы, восстанавливаемые значения f j вычисляются из соотношений (1).
Н.С.Бахвалов, Н.П.Жидков, Г.М.Кобельков. Численные методы. Изд - во "Наука", 1987.
SUBROUTINE FTA5R (ARRAY, N, IREG)
Параметры
ARRAY - | вещественный одномерный массив длины N, содержащий в случае прямого преобразования ( IREG = 1) на входе значения f j и на выходе значения Fk, а в случае обратного преобразования ( IREG = - 1) - на входе значения Fk и на выходе значения f j; |
N - | длина массива ARRAY, равная целой степени двух (тип: целый) |
IREG - | задает режим работы подпрограммы (тип: целый); при этом: |
IREG= 1 - | когда выполняется прямое преобразование; |
IREG= -1 - | когда выполняется обратное преобразование. |
Версии
FTA5D - | выполнение прямого и обратного быстрых дискретных косинус - преобразований Фурье одномерного массива вещественных чисел длины N, равной степени двух, в режиме удвоенной точности; при этом параметр ARRAY должен иметь тип DOUBLE PRECISION. |
Вызываемые подпрограммы
FTA3R - FTA3D | выполнение прямого и обратного быстрых дискретных преобразований Фурье одномерного массива вещественных чисел длины 2N, где N равняется целой степени двух, в режимах одинарной и удвоенной точности; используются в подпрограммах FTA5R и FTA5D соответственно. |
Замечания по использованию
В подпрограммах FTA5R и FTA5D проверка того, что значение N должно быть целой степенью двух, не производится. |
DIMENSION ARRAY(8) DATA ARRAY /1., 2., 3., 4., 5., 6., 7., 8./ N = 8 CALL FTA5R(ARRAY, N, 1) . . . CALL FTA5R(ARRAY, N, - 1) Результаты: а) в случае прямого преобразования: ARRAY = (36, - 8.13707, - 4, 3.38009, - 4, 4.27677, - 4, 4.48022) б) в случае обратного преобразования: ARRAY = (1, 2, 3, 4, 5, 6, 7, 8)