From 516fa73aceda7574f5b6734490094eef8fde0efc Mon Sep 17 00:00:00 2001 From: Dsplib Date: Tue, 12 Mar 2019 00:00:48 +0300 Subject: [PATCH] added doc fft --- dspl/dox/ru/fft.dox | 76 ++++++++++++++++++++++++++++++++++ dspl/dox/ru/fourier_series.dox | 2 - examples/src/fft_test.c | 46 ++++++++++---------- 3 files changed, 99 insertions(+), 25 deletions(-) diff --git a/dspl/dox/ru/fft.dox b/dspl/dox/ru/fft.dox index 6c9033a..51a8f58 100644 --- a/dspl/dox/ru/fft.dox +++ b/dspl/dox/ru/fft.dox @@ -90,6 +90,82 @@ www.dsplib.org + +/*! **************************************************************************** +\ingroup DFT_GROUP +\fn int fft(double* x, int n, fft_t* pfft, complex_t* y) +\brief Быстрое преобразование Фурье вещественного сигнала + +Функция рассчитывает \f$ n \f$-точечное быстрое преобразование Фурье +вещественного сигнала \f$ x(m) \f$, \f$ m = 0 \ldots n-1 \f$.
+\f[ + Y(k) = \sum_{m = 0}^{n-1} x(m) \exp + \left( -j \frac{2\pi}{n} m k \right), +\f] +где \f$ k = 0 \ldots n-1 \f$. + +Для расчета используется алгоритм БПФ составной длины. + +\param[in] x Указатель на вектор вещественного + входного сигнала \f$x(m)\f$, + \f$ m = 0 \ldots n-1 \f$.
+ Размер вектора `[n x 1]`.

+ +\param[in] n Размер БПФ \f$n\f$.
+ Размер БПФ может быть составным вида + \f$n = n_0 \times n_1 \times n_2 \times n_3 \times \ldots \times n_p \times m\f$, + где \f$n_i = 2,3,5,7\f$, а \f$m \f$ -- + произвольный простой множитель не превосходящий 46340 + (см. описание функции \ref fft_create). +

+ +\param[in] pfft Указатель на структуру `fft_t`.
+ Указатель не должен быть `NULL`.
+ Структура \ref fft_t должна быть предварительно однократно + заполнена функцией \ref fft_create, и память должна быть + очищена перед выходом функцией \ref fft_free. +

+ +\param[out] y Указатель на комплексный вектор + результата БПФ \f$Y(k)\f$, + \f$ k = 0 \ldots n-1 \f$. + Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ +\return +`RES_OK` если расчет произведен успешно.
+ В противном случае \ref ERROR_CODE_GROUP "код ошибки".

+ +Пример использования функции `fft`: + +\include fft_test.c + +Результат работы программы: + +\verbatim +y[ 0] = 91.000 0.000 +y[ 1] = -7.000 30.669 +y[ 2] = -7.000 14.536 +y[ 3] = -7.000 8.778 +y[ 4] = -7.000 5.582 +y[ 5] = -7.000 3.371 +y[ 6] = -7.000 1.598 +y[ 7] = -7.000 0.000 +y[ 8] = -7.000 -1.598 +y[ 9] = -7.000 -3.371 +y[10] = -7.000 -5.582 +y[11] = -7.000 -8.778 +y[12] = -7.000 -14.536 +y[13] = -7.000 -30.669 +\endverbatim + +\author +Бахурин Сергей. +www.dsplib.org +***************************************************************************** */ + + + /*! **************************************************************************** \ingroup DFT_GROUP \fn int fft_create(fft_t *pfft, int n) diff --git a/dspl/dox/ru/fourier_series.dox b/dspl/dox/ru/fourier_series.dox index 077fe6a..ea777d0 100644 --- a/dspl/dox/ru/fourier_series.dox +++ b/dspl/dox/ru/fourier_series.dox @@ -51,7 +51,6 @@ \author Бахурин Сергей www.dsplib.org - ***************************************************************************** */ @@ -114,5 +113,4 @@ s(t) = \sum\limits_{n = 0}^{n_{\omega}-1} S(\omega_n) \exp(j\omega_n t) \author Бахурин Сергей www.dsplib.org - ***************************************************************************** */ diff --git a/examples/src/fft_test.c b/examples/src/fft_test.c index 3541e52..3d7d8ee 100644 --- a/examples/src/fft_test.c +++ b/examples/src/fft_test.c @@ -3,34 +3,34 @@ #include #include "dspl.h" -#define N 16 +#define N 14 + int main() { - void* handle; // DSPL handle - handle = dspl_load(); // Load DSPL function + void* handle; // DSPL handle + handle = dspl_load(); // Загрузка DSPL - double x[N]; // real input signal - complex_t y[N]; // DFT - fft_t pfft; // FFT object - - //clear fft object - memset(&pfft, 0, sizeof(fft_t)); - - // Create FFT object - fft_create(&pfft, N); - - for(int k = 0; k < N; k++) - x[k] = (double)k; - - //FFT - fft(x, N, &pfft, y); + double x[N]; // массив входного сигнала + complex_t y[N]; // массив результата БПФ + fft_t pfft; // FFT объект + + memset(&pfft, 0, sizeof(fft_t)); // Заполняем FFT структуру нулями + + fft_create(&pfft, N); // Создаем FFT структуру для длины N + + // заполняем массив входного сигнала + for(int k = 0; k < N; k++) + x[k] = (double)k; + + fft(x, N, &pfft, y); // FFT - for(int k = 0; k < N; k++) - printf("y[%2d] = %9.3f%9.3f\n", k, RE(y[k]), IM(y[k])); + // Печать результата + for(int k = 0; k < N; k++) + printf("y[%2d] = %9.3f%9.3f\n", k, RE(y[k]), IM(y[k])); - fft_free(&pfft); // clear FFT object - dspl_free(handle); // free dspl handle - return 0; + fft_free(&pfft); // Очищаем структуру fft_t + dspl_free(handle); // Очищаем dspl handle + return 0; }