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

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

Назначение

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