|
Текст подпрограммы и версий ftftc_c.zip |
Тексты тестовых примеров tftftc_c.zip |
Вычисление двумерного дискретного или обратного дискретного преобразования Фурье комплексной матрицы размера N1 на N2, N1 = 2 j1, N2 = 2 j2 методом быстрого преобразования Фурье.
Комплексная матрица A paзмера N1 на N2, заданная массивами своих действительных и мнимых частей, преобразуется в комплексную матрицу C размера N1 на N2 по формуле
N1-1 N2-1
C r1, r2 = ∑ ∑ A n1, n2 e ± 2π i (n1 r1 / N1 + n2 r2 / N2) ,
n1=0 n2=0
r1 = 0, 1, ..., N1 - 1, r2 = 0, 1, ..., N2 - 1 ,
где знак минус в показателе экспоненты для прямого, а плюс для обратного двумерного дискретного преобразования Фурье.
Матрица C задается массивами действительных и мнимых частей своих элементов и получается на месте матрицы A.
B вычислениях используется метод быстрого преобразования Фурье. При больших N1, N2 число операций пропорционально N1*N2 (log2N1 + log2N2). Данная подпрограмма подробно описана в [1, стp. 45] под именем FFT2.
| 1. | В.А.Морозов, Н.Н.Кирсанова, А.Ф.Сысоев, Комплекс алгоритмов быстрого преобразования Фурье дискретных рядов. Сб. "Численный анализ на ФОРТРАНе", вып. 15, Изд. МГУ, 1976. |
int ftftc_c (real *are, real *aim, integer *n1, integer *n2,
real *p)
Параметры
|
are - aim | двумерные вещественные массивы размера n1 на n2, компоненты которых перед началом работы подпрограммы являются соответственно действительными и мнимыми частями элементов преобразуемой комплексной матрицы A. По окончании работы подпрограммы содержат соответственно действительные и мнимые части элементов преобразованной матрицы C ; |
| n1 - | заданное число стpок матрицы A (тип: целый); |
| n2 - | заданное число столбцов матрицы A (тип: целый); |
| p - | заданная вещественная переменная, признак преобразования Фурье. При p > 0. выполняется дискретное преобразование Фурье, при p < 0. выполняется обратное дискретное преобразование Фурье. |
Версии: нет
Вызываемые подпрограммы
| ftf1c_c - | вычисление дискретного или обратного дискретного преобразования Фурье комплексного ряда длины, равной степени двух, методом быстрого преобразования Фурье. |
Замечания по использованию
| 1. |
Размерности преобразуемой матрицы должны быть целой степенью двух n1 = 2 j1 , n2 = 2 j2 , где j1, j2 - целые; n1 ≥ 4 , n2 ≥ 4 . | |
| 2. | Если при обращении к подпрограмме задать p = 0, то pезультат ее работы не определен. |
int main(void)
{
/* Local variables */
static int i__, j;
static float p;
extern int ftftc_c(float *, float *, int *, int *, float *);
static int n1, n2;
static float aim[16] /* was [4][4] */,
are[16] /* was [4][4] */;
#define aim_ref(a_1,a_2) aim[(a_2)*4 + a_1 - 5]
#define are_ref(a_1,a_2) are[(a_2)*4 + a_1 - 5]
for (i__ = 1; i__ <= 4; ++i__) {
for (j = 1; j <= 4; ++j) {
are_ref(i__, j) = i__ * 4.f + j - 4.f;
/* l1: */
aim_ref(i__, j) = 0.f;
}
}
n1 = 4;
n2 = 4;
p = 1.f;
ftftc_c(are, aim, &n1, &n2, &p);
for (i__ = 1; i__ <= 16; ++i__) {
printf("\n %16.7e %16.7e \n",are[i__-1], aim[i__-1]);
}
return 0;
} /* main */
Результаты:
| 136. -8. -8. -8. |
| -32. 0. 0. 0. |
are = | -32. 0. 0. 0. |
| -32. 0. 0. 0. |
| 0. 8. 0. -8. |
| 32. 0. 0. 0. |
aim = | 0. 0. 0. 0. |
| -32. 0. 0. 0. |