Текст подпрограммы и версий ftfrr_c.zip |
Тексты тестовых примеров tftfrr_c.zip |
Вычисление коэффициентов действительного преобразования Фурье или вычисление значений функции по ее действительным коэффициентам Фурье. Длина действительного ряда (преобразуемого или вычисляемого) должна быть целой степенью двух.
Пусть задан действительный pяд X длины 2 * N. При вычислении действительного преобразования Фурье ряд X преобразуется в два действительных ряда A и B длины N + 1 по формулам
2N-1 A r = (1/N) ∑ X n cos (π r n / N) , r = 0, 1, ..., N n=0 2N-1 B r = (1/N) ∑ X n sin (π r n / N) , r = 0, 1, ..., N n=0
при этом B0 = BN = 0. . Для восстановления ряда X по заданным действительным коэффициентам Фурье, элементы ряда Х вычисляются по формуле
X r = (A0 / 2) + ((- 1) r AN / 2) + N-1 + ∑ (A n cos (π r n / N) + B n sin (π r n / N)) , n=1 r = 0, 1, ..., 2N - 1
B вычислениях используется метод быстрого преобразования Фурье. При больших N число операций пропорционально N * log2N. Данная подпрограмма подробно описана в [1, стp. 47] под именем RFFT.
1. | В.А.Морозов, Н.Н.Кирсанова, А.Ф.Сысоев, Комплекс алгоритмов быстрого преобразования Фурье дискретных рядов. Сб. "Численный анализ на ФОРТРАНе". вып. 15. Изд - во МГУ, 1976 г. |
int ftfrr_c (real *p, integer *n1, integer *n2, real *a, real *b, real *x)
Параметры
p - | заданная вещественная переменная, признак преобразования Фурье. Если на входе p > 0., то вычисляются коэффициенты Фурье. Если на входе p < 0., то вычисляются значения функции; |
n1 - | заданная длина массивов действительных коэффициентов Фурье, n1 = n2 / 2 + 1 (тип: целый); |
n2 - | заданная длина массива значений функции, целая степень двух (тип: целый); |
a - | вещественный массив длины n1, содержащий коэффициенты разложения Фурье по четным гармоникам. При p < 0. задается на входе подпрограммы, при p > 0. - вычисляется; |
b - | вещественный массив длины n1, содержащий коэффициенты разложения Фурье по нечетным гармоникам. При p < 0. задается на входе подпрограммы, при p > 0. - вычисляется; |
x - | вещественный массив длины n2, содержащий значения функции. При p > 0. задается на входе подпрограммы, при p < 0. - вычисляется. |
Версии: нет
Вызываемые подпрограммы
ftf1c_c - | вычисление дискретного или обратного дискретного преобразования Фурье комплексного ряда длины, равной степени двух, методом быстрого преобразования Фурье. |
Замечания по использованию
1. |
При вычислении коэффициентов Фурье (p > 0.) исходная информация (ряд значений функции) сохраняется. | |
2. |
При вычислении значений функции (p < 0.) исходная информация (ряды коэффициентов Фурье) не сохраняется. | |
3. |
Если на входе подпрограммы задано p = 0., то никаких вычислений не производится. | |
4. | При вычислении коэффициентов Фурье первый и последний коэффициенты разложения Фурье по нечетным гармоникам равны нулю. |
int main(void) { /* Initialized data */ static float a[5] = { 0.f,0.f,1.f,0.f,0.f }; static float b[5] = { 0.f,1.f,0.f,0.f,0.f }; /* Local variables */ static float p, x[8]; extern int ftfrr_c(float *, int *, int *, float *, float *, float *); static int n1, n2, i; p = -1.f; n1 = 5; n2 = 8; ftfrr_c(&p, &n1, &n2, a, b, x); for (i = 1; i <= 8; ++i) { printf("\n %16.7e \n",x[i-1]); } return 0; } /* main */ Результаты: x(1) = 1.0, x(2) = 0.70710678, x(3) = 0.0, x(4) = 0.70710678, x(5) = 1.0, x(6) = -0.70710678, x(7) = -2.0, x(8) = -0.70710678