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

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

Назначение

Вычисление коэффициентов Фурье по системе нечетных тригонометрических функций вещественного ряда длины, равной степени двух, с использованием метода быстрого преобразования Фурье.

Математическое описание

Пусть длина  N преобрaзyeмoго вещественного ряда  X является целой степенью двух:  N = 2 M.

Ряд  X преобразуется в вещественный ряд  A по формуле (прямое преобразование):

                    N-1             
        A r  =    ∑   X n * sin (π r * n / N)  ,    
                    n=0
            r = 0, ..., N - 1 

Tак как система функций  sin (π r x),  r = 0, ..., N - 1 ортогональна на сетке  Xn = n / N, но не ортонормирована, обратное преобразование совпадает с прямым с точностью до постоянного множителя  N / 2. B вычислениях используется метод быстрого преобразования Фурье [1].

Ряд коэффициентов Фурье  A получается на месте исходного ряда  Х без дополнительной рабочей памяти.

При больших  N число операций пропорционально  N * log2N.

1.  В.А.Морозов, Н.Н.Кирсанова, А.Ф.Сысоев. Комплекс алгоритмов быстрого преобразования Фурье дискретных рядов. Сб. "Численный анализ на ФОРТРАНе", вып. 15, Изд - во МГУ, 1976 г.

Использование

    int ftfsr_c (real *x, integer *n)

Параметры

x - вещественный вектоp длины  n; перед началом работы подпрограммы содержит преобразуемый ряд  x. По окончании работы подпрограммы содержит преобразованный ряд  a;
n - заданная длина вектоpа  x (тип: целый).

Версии: нет

Вызываемые подпрограммы

ftf1c_c - вычисление дискретного или обратного дискретного преобразования Фурье комплексного ряда длины, равной степени двух, методом быстрого преообразования Фурье.

Замечания по использованию

  1. 

Длина n преобразуемого ряда должна быть целой степенью двух:  n = 2 m,  m - натуральное. B противном случае результат работы подпрограммы не определен.

  2.  Первая компонента преобразованного ряда  a всегда pавна нулю, т.е. по окончании работы подпрограммы  x (1) = 0 .

Пример использования

int main(void)
{
    /* Initialized data */
    static float x[8] = { 1.f,2.f,3.f,4.f,5.f,6.f,7.f,8.f };

    /* Local variables */
    extern int ftfsr_c(float *, int *);
    static int i;
    static int c__8 = 8;

    ftfsr_c(x, &c__8);

    for (i = 1; i <= 8; ++i) {
        printf("\n %16.7e \n",x[i-1]);
    }
    return 0;
} /* main */


Результаты:

      x  =  (0.,  25.136697,  -9.656854,  7.4830288,  -3.999999, 
                3.3408931895,  -1.656854,  0.994561837)