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 \;
|
||||
|
||||
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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -48,7 +48,6 @@ typedef struct
|
|||
complex_t* t0;
|
||||
complex_t* t1;
|
||||
int n;
|
||||
int p2;
|
||||
} fft_t;
|
||||
|
||||
|
||||
|
|
|
@ -48,7 +48,6 @@ typedef struct
|
|||
complex_t* t0;
|
||||
complex_t* t1;
|
||||
int n;
|
||||
int p2;
|
||||
} 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