|
Текст подпрограммы и версий fta1c_c.zip , fta1p_c.zip |
Тексты тестовых примеров tfta1c_c.zip , tfta1p_c.zip |
Выполнение прямого и обратного быстрых дискретных преобразований Фурье одномерного массива комплексных чисел длины n, равной целой степени двух.
Пусть известны значения hk = h (tk) комплексно - значной функции h (t) на равномерной сетке tk = k δt, k = 0, 1, 2, ..., N - 1 (где δt - шаг сетки, а N равняется целой степени двух), заданные в виде одномерного массива комплексных чисел ARRAY длины N.
Подпрограмма fta1c_c имеет два режима работы, задаваемых при обращении к ней значением параметра IREG. В первом режиме (IREG = 1) выполняется прямое быстрое дискретное преобразование Фурье заданного массива ARRAY, состоящее в получении N комплексных чисел Hn (n = 0, 1, 2, ..., N - 1) из N комплексных чисел hk (k = 0, 1, 2, ..., N - 1), являющихся элементами этого массива, по формуле:
N-1
Hn = ∑ hk e 2π i k n / N
k =0
Вычисленные значения Hn располагаются в том же массиве ARRAY. Во втором режиме (IREG = - 1) выполняется обратное быстрое дискретное преобразование Фурье, состоящее в восстановлении из значений Hn (n = 0, 1, 2, ..., N - 1), заданных в виде одномерного массива комплексных чисел ARRAY длины N, значений hk (k = 0, 1, 2, ..., N - 1) по формуле:
N-1
hk = 1/N ∑ Hn e -2π i k n / N
n =0
Вычисленные значения hk располагаются в том же массиве ARRAY.
Н.С.Бахвалов, Н.П.Жидков, Г.М.Кобельков. Численные методы. Изд - во "Наука", 1987.
int fta1c_c (real *array, integer *n, integer *ireg)
Параметры
| array - | комплексный одномерный массив длины n, содержащий на входе значения hk (ireg = 1) или hn (ireg = - 1), а на выходе значения hn (ireg = 1) или hk (ireg = - 1); |
| n - | длина массива array, равная целой степени двух (тип: целый); |
| ireg - | задает режим работы подпрограммы (тип: целый); при этом: |
| ireg= 1 - | когда выполняется прямое преобразование; |
| ireg= -1 - | когда выполняется обратное преобразование |
Версии
| fta1p_c - | выполнение прямого и обратного быстрых преобразований Фурье одномерного массива комплексных чисел длины n, равной целой степени двух, в режиме удвоенной точности; при этом параметр array должен иметь тип double и иметь длину, равную 2n (см.также "Замечания по использованию") |
Вызываемые подпрограммы: нет
Замечания по использованию
| 1. |
В подпрограммах fta1c_c и fta1p_c проверка того, что значение n должно быть целой степенью двух, не производится | |
| 2. |
При обращении к подпрограмме fta1c_c массив array можно задать вещественным. В этом случае его длина должна равняться 2n, а его элементы должны формироваться по следующему правилу: array( i ) = re (h i) , если ireg= 1
array( i ) = re (h i) , если ireg= - 1
array(i+1) = im (h i) , если ireg= 1
array(i+1) = im (h i) , если ireg= - 1
Здесь re означает вещественную часть комплексного числа, im - мнимую часть, i = 1, 2, ..., 2n - 1; i = 0, 1, ..., n - 1. | |
| 3. |
При обращении к подпрограмме fta1p_c массив array должен быть вещественным удвоенной точности длины 2n. Правила задания его содержимого такие же, как и в замечании 2. Если это допускает входной язык компилятора, массив array может быть описан как double complex длины n. | |
| 4. | Для того чтобы избежать вычислений с использованием комплексной арифметики, подпрограммы fta1c_c и fta1p_c рассматривают массив array всегда не как комплексный, а как вещественный длины 2n одинарной или удвоенной точности соответственно. |
int main(void)
{
/* Local variables */
extern int fta1c_c(complex *, integer *, integer *);
static complex a[4];
a[0].r = 1.f, a[0].i = 0.f;
a[1].r = 4.f, a[1].i = 0.f;
a[2].r = 7.f, a[2].i = 0.f;
a[3].r = 10.f, a[3].i = 0.f;
fta1c_c(a, &c__4, &c__1);
printf("\n %16.7e %16.7e \n %16.7e %16.7e \n",
a[0].r,a[0].i,a[1].r,a[1].i);
printf("\n %16.7e %16.7e \n %16.7e %16.7e \n",
a[2].r,a[2].i,a[3].r,a[3].i);
return 0;
} /* main */
Результаты:
a(1) = ( 22.0, 0.0), a(2) = (- 6.0, - 6.0),
a(3) = (- 6.0, 0.0), a(4) = (- 6.0, 6.0)