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
|
||||
\fn int fft_create(fft_t *pfft, int n)
|
||||
|
|
|
@ -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
|
||||
|
||||
***************************************************************************** */
|
||||
|
|
|
@ -3,34 +3,34 @@
|
|||
#include <string.h>
|
||||
#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;
|
||||
}
|
||||
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue