Текст подпрограммы и версий
ftftc_c.zip
Тексты тестовых примеров
tftftc_c.zip

Подпрограмма:  ftftc_c

Назначение

Вычисление двумерного дискретного или обратного дискретного преобразования Фурье комплексной матрицы размера  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.  |