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);
+
+}