changed fft_t structure (deleted p2)

updated doxygen script
pull/6/merge
Dsplib 2019-01-11 00:08:14 +03:00
rodzic 50b7708c42
commit 5e2a08cee4
5 zmienionych plików z 92 dodań i 17 usunięć

Wyświetl plik

@ -6,7 +6,7 @@ find ../../ru -name "*.dox" -exec cp -rf {} ../test/dox/ru \;
find ../../ru -name "*.plt" -exec cp -rf {} ../test/bin/gnuplot \;
cd ../
make
mingw32-make
cd test/bin
for file in *.exe
do
@ -17,7 +17,7 @@ cd ../../dox
doxygen doxyfile_ru
cd ../
make clean
mingw32-make clean
cd dox
pkill -x gnuplot

Wyświetl plik

@ -8,14 +8,16 @@
\struct fft_t
\brief Структура данных объекта быстрого преобразования Фурье
Структура хранит указатели на массивы поворотных коэффициентов и массивов промежуточных данных
алгоритма быстрого преобразования Фурье с прореживанием по времени.
Структура хранит указатели на массивы поворотных коэффициентов и массивы промежуточных данных
алгоритма быстрого преобразования Фурье.
Библиотека DSPL использует для БПФ алгоритм для составной длины
\param n Размер вектора БПФ, для которого выделена память в массивах структуры. <BR>
Парметр `n` должен быть равен целой степени двойки. <BR><BR>
\param p2 Целая степень двойки, образующая размер БПФ.<BR><BR>
Так \f$2^{p2} = n\f$.
\param w Указатель на вектор поворотных коэффициентов алгоритма БПФ.<BR>
Размер вектора `[n x 1]`. <BR>
@ -63,13 +65,14 @@
Важно отметить, что если объект `fft_t` был создан для размера БПФ равного `n`,
то он может быть использован для любого размера БПФ `k` меньшего размера. <BR>
то он может быть использован только для БПФ размера `n`. <BR>
Например, если мы создали `fft_t` для БПФ размера `n = 64`, то мы можем использовать
этот же объект для 32, 16, 8, 4 -точечных БПФ без необходимости пересчета поворотных коэффициентов.<BR>
Также необходимо заметить, что функции БПФ самостоятельно контроллируют размер,
и самостоятельно выделяют память объекта БПФ при необходимости.
и самостоятельно выделяют память объекта БПФ при необходимости. Так если вызвать
любую функцию использующую структуру `fft_t` с заполненными данными для длины
БПФ `k` для расчета БПФ длины `n`, то массивы стуктуры будут автоматически
пересозданы для длины `n`.
\author
@ -97,11 +100,12 @@
\param[in,out] pfft Указатель на структуру `fft_t`. <BR>
Указатель не должен быть `NULL`. <BR><BR>
\param[in] n Размер БПФ \f$n\f$ (должен быть равен целой степени двойки).<BR>
\param[in] n Размер БПФ \f$n\f$.<BR>
Размер БПФ может быть составным вида
\f$n = n_0 n_1 n_2 n_3 \times \ldots \times n_p m\f$,
где \f$n_i = 2,3,5,7\f$, а $m$ -- произвольный простой
множитель не превосходящий 46340.
\return
`RES_OK` если структура заполнена успешно. <BR>
В противном случае \ref ERROR_CODE_GROUP "код ошибки".<BR><BR>
@ -131,6 +135,7 @@
Перед выходом из программы выделенную в структуре память необходимо очистить функцией \ref fft_free .
\author
Бахурин Сергей.
www.dsplib.org

Wyświetl plik

@ -48,7 +48,6 @@ typedef struct
complex_t* t0;
complex_t* t1;
int n;
int p2;
} fft_t;

Wyświetl plik

@ -48,7 +48,6 @@ typedef struct
complex_t* t0;
complex_t* t1;
int n;
int p2;
} fft_t;

Wyświetl plik

@ -0,0 +1,72 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dspl.h"
#define N 2000
#define A 1
#define TAU 1
int main(int argc, char* argv[])
{
double t[N], w[N], Sr[N], St[N], Se[N], Sg[N], sigma;
void* handle;
int k;
handle = dspl_load();
if(!handle)
{
printf("cannot to load libdspl!\n");
return 0;
}
linspace(-10, 10, N, DSPL_PERIODIC, t);
linspace(-20*M_PI, 20*M_PI, N, DSPL_PERIODIC, w);
for(k = 0; k < N; k++)
{
Sr[k] = sin(w[k]*TAU*0.5+1E-9) / (w[k]*TAU*0.5+1E-9);
Sr[k] *= Sr[k];
St[k] = sin(w[k]*TAU*0.5+1E-9)/(w[k]*TAU*0.5+1E-9);
St[k] *= St[k];
St[k] *= St[k];
sigma = 0.5;
Sg[k] = w[k]*sigma;
Sg[k] *= w[k]*sigma / 4.0;
Sg[k] = exp(-Sg[k]);
Sg[k] *= Sg[k];
sigma = 2;
Se[k] = sigma*sigma/(w[k]*w[k] + sigma*sigma);
Se[k] *= Se[k];
}
writetxt(w, Sr, N, "dat/fourier_transform_energy_r_lin.txt");
writetxt(w, St, N, "dat/fourier_transform_energy_t_lin.txt");
writetxt(w, Se, N, "dat/fourier_transform_energy_e_lin.txt");
writetxt(w, Sg, N, "dat/fourier_transform_energy_g_lin.txt");
for(k = 0; k < N; k++)
{
Sr[k] = 10.0*log10(Sr[k]);
Sg[k] = 10.0*log10(Sg[k]);
St[k] = 10.0*log10(St[k]);
Se[k] = 10.0*log10(Se[k]);
}
writetxt(w, Sr, N, "dat/fourier_transform_energy_r_log.txt");
writetxt(w, St, N, "dat/fourier_transform_energy_t_log.txt");
writetxt(w, Se, N, "dat/fourier_transform_energy_e_log.txt");
writetxt(w, Sg, N, "dat/fourier_transform_energy_g_log.txt");
// remember to free the resource
dspl_free(handle);
}