kopia lustrzana https://github.com/Dsplib/libdspl-2.0
rodzic
50b7708c42
commit
5e2a08cee4
|
@ -6,7 +6,7 @@ find ../../ru -name "*.dox" -exec cp -rf {} ../test/dox/ru \;
|
||||||
find ../../ru -name "*.plt" -exec cp -rf {} ../test/bin/gnuplot \;
|
find ../../ru -name "*.plt" -exec cp -rf {} ../test/bin/gnuplot \;
|
||||||
|
|
||||||
cd ../
|
cd ../
|
||||||
make
|
mingw32-make
|
||||||
cd test/bin
|
cd test/bin
|
||||||
for file in *.exe
|
for file in *.exe
|
||||||
do
|
do
|
||||||
|
@ -17,7 +17,7 @@ cd ../../dox
|
||||||
doxygen doxyfile_ru
|
doxygen doxyfile_ru
|
||||||
|
|
||||||
cd ../
|
cd ../
|
||||||
make clean
|
mingw32-make clean
|
||||||
cd dox
|
cd dox
|
||||||
|
|
||||||
pkill -x gnuplot
|
pkill -x gnuplot
|
||||||
|
|
|
@ -8,14 +8,16 @@
|
||||||
\struct fft_t
|
\struct fft_t
|
||||||
\brief Структура данных объекта быстрого преобразования Фурье
|
\brief Структура данных объекта быстрого преобразования Фурье
|
||||||
|
|
||||||
Структура хранит указатели на массивы поворотных коэффициентов и массивов промежуточных данных
|
Структура хранит указатели на массивы поворотных коэффициентов и массивы промежуточных данных
|
||||||
алгоритма быстрого преобразования Фурье с прореживанием по времени.
|
алгоритма быстрого преобразования Фурье.
|
||||||
|
|
||||||
|
Библиотека DSPL использует для БПФ алгоритм для составной длины
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\param n Размер вектора БПФ, для которого выделена память в массивах структуры. <BR>
|
\param n Размер вектора БПФ, для которого выделена память в массивах структуры. <BR>
|
||||||
Парметр `n` должен быть равен целой степени двойки. <BR><BR>
|
Парметр `n` должен быть равен целой степени двойки. <BR><BR>
|
||||||
|
|
||||||
\param p2 Целая степень двойки, образующая размер БПФ.<BR><BR>
|
|
||||||
Так \f$2^{p2} = n\f$.
|
|
||||||
|
|
||||||
\param w Указатель на вектор поворотных коэффициентов алгоритма БПФ.<BR>
|
\param w Указатель на вектор поворотных коэффициентов алгоритма БПФ.<BR>
|
||||||
Размер вектора `[n x 1]`. <BR>
|
Размер вектора `[n x 1]`. <BR>
|
||||||
|
@ -63,13 +65,14 @@
|
||||||
|
|
||||||
|
|
||||||
Важно отметить, что если объект `fft_t` был создан для размера БПФ равного `n`,
|
Важно отметить, что если объект `fft_t` был создан для размера БПФ равного `n`,
|
||||||
то он может быть использован для любого размера БПФ `k` меньшего размера. <BR>
|
то он может быть использован только для БПФ размера `n`. <BR>
|
||||||
|
|
||||||
Например, если мы создали `fft_t` для БПФ размера `n = 64`, то мы можем использовать
|
|
||||||
этот же объект для 32, 16, 8, 4 -точечных БПФ без необходимости пересчета поворотных коэффициентов.<BR>
|
|
||||||
|
|
||||||
Также необходимо заметить, что функции БПФ самостоятельно контроллируют размер,
|
Также необходимо заметить, что функции БПФ самостоятельно контроллируют размер,
|
||||||
и самостоятельно выделяют память объекта БПФ при необходимости.
|
и самостоятельно выделяют память объекта БПФ при необходимости. Так если вызвать
|
||||||
|
любую функцию использующую структуру `fft_t` с заполненными данными для длины
|
||||||
|
БПФ `k` для расчета БПФ длины `n`, то массивы стуктуры будут автоматически
|
||||||
|
пересозданы для длины `n`.
|
||||||
|
|
||||||
|
|
||||||
\author
|
\author
|
||||||
|
@ -97,10 +100,11 @@
|
||||||
\param[in,out] pfft Указатель на структуру `fft_t`. <BR>
|
\param[in,out] pfft Указатель на структуру `fft_t`. <BR>
|
||||||
Указатель не должен быть `NULL`. <BR><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
|
\return
|
||||||
`RES_OK` если структура заполнена успешно. <BR>
|
`RES_OK` если структура заполнена успешно. <BR>
|
||||||
|
@ -131,6 +135,7 @@
|
||||||
Перед выходом из программы выделенную в структуре память необходимо очистить функцией \ref fft_free .
|
Перед выходом из программы выделенную в структуре память необходимо очистить функцией \ref fft_free .
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\author
|
\author
|
||||||
Бахурин Сергей.
|
Бахурин Сергей.
|
||||||
www.dsplib.org
|
www.dsplib.org
|
||||||
|
|
|
@ -48,7 +48,6 @@ typedef struct
|
||||||
complex_t* t0;
|
complex_t* t0;
|
||||||
complex_t* t1;
|
complex_t* t1;
|
||||||
int n;
|
int n;
|
||||||
int p2;
|
|
||||||
} fft_t;
|
} fft_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,6 @@ typedef struct
|
||||||
complex_t* t0;
|
complex_t* t0;
|
||||||
complex_t* t1;
|
complex_t* t1;
|
||||||
int n;
|
int n;
|
||||||
int p2;
|
|
||||||
} fft_t;
|
} fft_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
}
|
Ładowanie…
Reference in New Issue