kopia lustrzana https://github.com/Dsplib/libdspl-2.0
added doc fft
rodzic
ef1ba40bfb
commit
516fa73ace
|
@ -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$.<BR>
|
||||||
|
\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$. <BR>
|
||||||
|
Размер вектора `[n x 1]`. <BR><BR>
|
||||||
|
|
||||||
|
\param[in] n Размер БПФ \f$n\f$.<BR>
|
||||||
|
Размер БПФ может быть составным вида
|
||||||
|
\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).
|
||||||
|
<BR><BR>
|
||||||
|
|
||||||
|
\param[in] pfft Указатель на структуру `fft_t`. <BR>
|
||||||
|
Указатель не должен быть `NULL`. <BR>
|
||||||
|
Структура \ref fft_t должна быть предварительно однократно
|
||||||
|
заполнена функцией \ref fft_create, и память должна быть
|
||||||
|
очищена перед выходом функцией \ref fft_free.
|
||||||
|
<BR><BR>
|
||||||
|
|
||||||
|
\param[out] y Указатель на комплексный вектор
|
||||||
|
результата БПФ \f$Y(k)\f$,
|
||||||
|
\f$ k = 0 \ldots n-1 \f$.
|
||||||
|
Размер вектора `[n x 1]`. <BR>
|
||||||
|
Память должна быть выделена.<BR><BR>
|
||||||
|
|
||||||
|
\return
|
||||||
|
`RES_OK` если расчет произведен успешно. <BR>
|
||||||
|
В противном случае \ref ERROR_CODE_GROUP "код ошибки".<BR><BR>
|
||||||
|
|
||||||
|
Пример использования функции `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
|
\ingroup DFT_GROUP
|
||||||
\fn int fft_create(fft_t *pfft, int n)
|
\fn int fft_create(fft_t *pfft, int n)
|
||||||
|
|
|
@ -51,7 +51,6 @@
|
||||||
\author
|
\author
|
||||||
Бахурин Сергей
|
Бахурин Сергей
|
||||||
www.dsplib.org
|
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
|
\author
|
||||||
Бахурин Сергей
|
Бахурин Сергей
|
||||||
www.dsplib.org
|
www.dsplib.org
|
||||||
|
|
||||||
***************************************************************************** */
|
***************************************************************************** */
|
||||||
|
|
|
@ -3,33 +3,33 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "dspl.h"
|
#include "dspl.h"
|
||||||
|
|
||||||
#define N 16
|
#define N 14
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
void* handle; // DSPL handle
|
void* handle; // DSPL handle
|
||||||
handle = dspl_load(); // Load DSPL function
|
handle = dspl_load(); // Загрузка DSPL
|
||||||
|
|
||||||
double x[N]; // real input signal
|
double x[N]; // массив входного сигнала
|
||||||
complex_t y[N]; // DFT
|
complex_t y[N]; // массив результата БПФ
|
||||||
fft_t pfft; // FFT object
|
fft_t pfft; // FFT объект
|
||||||
|
|
||||||
//clear fft object
|
memset(&pfft, 0, sizeof(fft_t)); // Заполняем FFT структуру нулями
|
||||||
memset(&pfft, 0, sizeof(fft_t));
|
|
||||||
|
|
||||||
// Create FFT object
|
fft_create(&pfft, N); // Создаем FFT структуру для длины N
|
||||||
fft_create(&pfft, N);
|
|
||||||
|
|
||||||
|
// заполняем массив входного сигнала
|
||||||
for(int k = 0; k < N; k++)
|
for(int k = 0; k < N; k++)
|
||||||
x[k] = (double)k;
|
x[k] = (double)k;
|
||||||
|
|
||||||
//FFT
|
fft(x, N, &pfft, y); // FFT
|
||||||
fft(x, N, &pfft, y);
|
|
||||||
|
|
||||||
|
// Печать результата
|
||||||
for(int k = 0; k < N; k++)
|
for(int k = 0; k < N; k++)
|
||||||
printf("y[%2d] = %9.3f%9.3f\n", k, RE(y[k]), IM(y[k]));
|
printf("y[%2d] = %9.3f%9.3f\n", k, RE(y[k]), IM(y[k]));
|
||||||
|
|
||||||
fft_free(&pfft); // clear FFT object
|
fft_free(&pfft); // Очищаем структуру fft_t
|
||||||
dspl_free(handle); // free dspl handle
|
dspl_free(handle); // Очищаем dspl handle
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue