|
Текст подпрограммы и версий fta2r_c.zip , fta2d_c.zip |
Тексты тестовых примеров tfta2r_c.zip , tfta2d_c.zip |
Одновременное выполнение прямого быстрого дискретного преобразования Фурье двух одномерных массивов вещественных чисел, каждый из которых имеет длину n, равную целой степени двух.
Подпрограмма fta2r_c упаковывает два заданных одномерных массива вещественных чисел в один комплексный массив, затем обращается к подпрограмме fta1r_c для выполнения прямого преобразования этого комплексного массива, после чего полученный преобразованный массив распаковывается в виде двух комплексных массивов, представляющих собой искомые преобразования исходных вещественных массивов.
Н.С.Бахвалов, Н.П.Жидков, Г.М.Кобельков. Численные методы. Изд - во "Наука", 1987.
int fta2r_c (real *array1, real *array2, complex *ffta1,
complex *ffta2, integer *n)
Параметры
| array1 - | вещественный одномерный массив длины n, содержащий компоненты первого исходного массива вещественных чисел; |
| array2 - | вещественный одномерный массив длины n, содержащий компоненты второго исходного массива вещественных чисел; |
| ffta1 - | комплексный одномерный массив длины n, содержащий на выходе прямое преобразование Фурье массива array1; |
| ffta2 - | комплексный одномерный массив длины n, содержащий на выходе прямое преобразование Фурье массива array2; |
| n - | длина исходных преобразуемых массивов (тип: целый). |
Версии
| fta2d_c - | одновременное выполнение прямого быстрого дискретного преобразования Фурье двух одномерных вещественных чисел, каждый из которых имеет длину n, равную целой степени двух, в режиме удвоенной точности. Эта версия имеется только для тех компиляторов, входной язык которых допускает обработку комплексных чисел удвоенной точности; в этом случае параметры array1 и array2 должны иметь тип double, а параметры ffta1 и ffta2 - тип double complex. |
Вызываемые подпрограммы
|
fta1c_c - fta1p_c | выполнение прямого и обратного быстрых преобразований Фурье одномерного массива комплексных чисел длины n, равной целой степени двух, в режимах одинарной и удвоенной точности; используются в подпрограммах fta2r_c и fta2d_c соответственно. |
Замечания по использованию
| В подпрограммах fta2r_c и fta2d_c проверка того, что значение n должно быть целой степенью двух, не производится. |
int main(void)
{
/* Local variables */
static complex ffta1[4], ffta2[4];
extern int fta2r_c(real *, real *, complex *, complex *, int *);
static real array1[4], array2[4];
array1[0] = 1.f;
array1[1] = 4.f;
array1[2] = 7.f;
array1[3] = 10.f;
/* l1: */
fta2r_c(array1, array2, ffta1, ffta2, &c__4);
printf("\n %15.5e %15.5e %15.5e %15.5e ",
ffta1[0].r,ffta1[0].i,ffta1[1].r,ffta1[1].i);
printf("\n %15.5e %15.5e %15.5e %15.5e \n",
ffta1[2].r,ffta1[2].i,ffta1[3].r,ffta1[3].i);
printf("\n %15.5e %15.5e %15.5e %15.5e ",
ffta2[0].r,ffta2[0].i,ffta2[1].r,ffta2[1].i);
printf("\n %15.5e %15.5e %15.5e %15.5e \n",
ffta2[2].r,ffta2[2].i,ffta2[3].r,ffta2[3].i);
return 0;
} /* main */
Результаты:
ffta1(1) = (22.0, 0.0) , ffta1(2) = (- 6.0, - 6.0)
ffta1(3) = (- 6.0, 0.0) , ffta1(4) = (- 6.0, 6.0)
ffta2(1) = (22.0, 0.0) , ffta2(2) = (- 6.0, - 6.0)
ffta2(3) = (- 6.0, 0.0) , ffta2(4) = (- 6.0, 6.0)