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