Текст подпрограммы и версий 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)