diff --git a/dox/makedoc.sh b/dox/makedoc.sh index ee0b4a1..eb1485d 100644 --- a/dox/makedoc.sh +++ b/dox/makedoc.sh @@ -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 diff --git a/dspl/dox/ru/fft.dox b/dspl/dox/ru/fft.dox index c4b819f..e4d60c5 100644 --- a/dspl/dox/ru/fft.dox +++ b/dspl/dox/ru/fft.dox @@ -8,14 +8,16 @@ \struct fft_t \brief Структура данных объекта быстрого преобразования Фурье - Структура хранит указатели на массивы поворотных коэффициентов и массивов промежуточных данных - алгоритма быстрого преобразования Фурье с прореживанием по времени. + Структура хранит указатели на массивы поворотных коэффициентов и массивы промежуточных данных + алгоритма быстрого преобразования Фурье. + + Библиотека DSPL использует для БПФ алгоритм для составной длины + + \param n Размер вектора БПФ, для которого выделена память в массивах структуры.
Парметр `n` должен быть равен целой степени двойки.

- \param p2 Целая степень двойки, образующая размер БПФ.

- Так \f$2^{p2} = n\f$. \param w Указатель на вектор поворотных коэффициентов алгоритма БПФ.
Размер вектора `[n x 1]`.
@@ -63,13 +65,14 @@ Важно отметить, что если объект `fft_t` был создан для размера БПФ равного `n`, - то он может быть использован для любого размера БПФ `k` меньшего размера.
+ то он может быть использован только для БПФ размера `n`.
- Например, если мы создали `fft_t` для БПФ размера `n = 64`, то мы можем использовать - этот же объект для 32, 16, 8, 4 -точечных БПФ без необходимости пересчета поворотных коэффициентов.
Также необходимо заметить, что функции БПФ самостоятельно контроллируют размер, - и самостоятельно выделяют память объекта БПФ при необходимости. + и самостоятельно выделяют память объекта БПФ при необходимости. Так если вызвать + любую функцию использующую структуру `fft_t` с заполненными данными для длины + БПФ `k` для расчета БПФ длины `n`, то массивы стуктуры будут автоматически + пересозданы для длины `n`. \author @@ -97,11 +100,12 @@ \param[in,out] pfft Указатель на структуру `fft_t`.
Указатель не должен быть `NULL`.

- \param[in] n Размер БПФ \f$n\f$ (должен быть равен целой степени двойки).
- - - - + \param[in] n Размер БПФ \f$n\f$.
+ Размер БПФ может быть составным вида + \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` если структура заполнена успешно.
В противном случае \ref ERROR_CODE_GROUP "код ошибки".

@@ -131,6 +135,7 @@ Перед выходом из программы выделенную в структуре память необходимо очистить функцией \ref fft_free . + \author Бахурин Сергей. www.dsplib.org diff --git a/include/dspl.h b/include/dspl.h index aa346d6..c434819 100644 --- a/include/dspl.h +++ b/include/dspl.h @@ -48,7 +48,6 @@ typedef struct complex_t* t0; complex_t* t1; int n; - int p2; } fft_t; diff --git a/release/include/dspl.h b/release/include/dspl.h index aa346d6..c434819 100644 --- a/release/include/dspl.h +++ b/release/include/dspl.h @@ -48,7 +48,6 @@ typedef struct complex_t* t0; complex_t* t1; int n; - int p2; } fft_t; diff --git a/test/src/fourier_transform_energy.c b/test/src/fourier_transform_energy.c new file mode 100644 index 0000000..167e1c1 --- /dev/null +++ b/test/src/fourier_transform_energy.c @@ -0,0 +1,72 @@ +#include +#include +#include +#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); + +}