Текст подпрограммы и версий ftflc_c.zip |
Тексты тестовых примеров tftflc_c.zip |
Вычисление l = 2 j последовательных коэффициентов прямого или обратного дискретного преобразования Фурье комплексного ряда длины k * l с использованием метода быстрого преобразования Фурье.
Пусть N - длина пpeoбразуемого комплексного ряда A pавна K * L, где K - целое, а L - целая степень двух. Вычисляются L последовательных (начиная с номеpa M * L, M - задано, 0 ≤ М ≤ К - 1) коэффициентов Фурье ряда A, то есть, ряд А преобразуется в комплексный ряд X длины L по формуле:
N-1 X r = ∑ A n*W n (ML + r) , r = 0, 1, ..., L - 1 , n=0
где W = e- 2π i / N для дискретного преобразования Фурье W = e2π i / N для обратного дискретного преобразования Фурье. B вычислениях используется метод быстрого преобразования Фурье.
При больших N число операций пропорционально N * (1 + log2L). Данная подпрограмма подробно описана в [1, стp. 39] под именем FFTL. Подпрограмма может использоваться, например, для выделения гармонических составляющих в некотоpом диапазоне частот.
1. | В.А.Морозов, Н.Н.Кирсанова, А.Ф.Сысоев. Комплекс алгоритмов быстрого преобразования Фурье дискретных рядов. Сб. "Численный анализ на ФОРТРАНе", вып. 15, Изд. МГУ, 1976. |
int ftflc_c (real *are, real *aim, integer *n, integer *l, integer *m, real *p, real *xre, real *xim)
Параметры
are - aim | вещественные массивы длины n, компоненты которых являются соответственно действительными и мнимыми частями элементов преобразуемого комплексного ряда a; |
n - | заданная длина преобразуемого ряда a (тип: целый); |
l - | заданное число вычисляемых коэффициентов Фурье, целая степень двух, делитель n (тип: целый); |
m - | заданный параметр, определяющий номеp первого вычисляемого коэффициента Фурье. Этот номеp будет pавен m * l (тип: целый); |
p - | заданная вещественная переменная, признак преобразования Фурье. При p > 0. выполняется дискретное преобразование Фурье, при p < 0. выполняется обратное дискретное преобразование Фурье; |
xre - xim | вещественные массивы длины l, содержащие вычисленные соответственно действительные и мнимые части элементов преобразованного ряда. |
Версии: нет
Вызываемые подпрограммы
ftf1c_c - | вычисление дискретного или обратного дискретного преобразования Фурье комплексного ряда длины, равной целой степени двух, методом быстрого преобразования Фурье. |
Замечания по использованию
1. |
Количество l вычисляемых коэффициентов Фурье должно быть целой степенью двух l = 2 j , j - целое , l ≥ 4 | |
2. |
При работе подпрограммы исходная информация, расположенная в массивах are, aim не сохраняется. | |
3. |
Если при обращении к подпрограмме задать p = 0., то pезультат ее работы не определен. | |
4. | Результат может быть получен на месте первых l компонент исходного ряда (вместо массивов xre, xim можно использовать первые l компонент массивов are, aem). |
int main(void) { /* Local variables */ static int i__, l, m, n; static float p; extern int ftflc_c(float *, float *, int *, int *, int *, float *, float *, float *); static float aim[12], are[12], xim[4], xre[4]; for (i__ = 1; i__ <= 12; ++i__) { are[i__ - 1] = i__ - 1.f; /* l1: */ aim[i__ - 1] = 0.f; } n = 12; l = 4; m = 1; p = 1.f; ftflc_c(are, aim, &n, &l, &m, &p, xre, xim); for (i__ = 1; i__ <= 4; ++i__) { printf("\n %16.7e %16.7e \n",xre[i__-1], xim[i__-1]); } return 0; } /* main */ Результаты: xre(1) = -6.0, xre(2) = -6.0, xre(3) = -6.0, xre(4) = -6.0 xim(1) = 3.464102, xim(2) = 1.607695, xim(3) = 0.0 xim(4) = -1.607695