pull/2/head
Dsplib 2018-07-08 23:57:52 +03:00
rodzic b203899a2d
commit afdc6bf7e5
71 zmienionych plików z 349 dodań i 33 usunięć

0
.gitignore vendored 100644 → 100755
Wyświetl plik

0
LICENSE 100644 → 100755
Wyświetl plik

0
Makefile 100644 → 100755
Wyświetl plik

0
Makefile.dirs 100644 → 100755
Wyświetl plik

0
Makefile.dspl 100644 → 100755
Wyświetl plik

0
Makefile.test 100644 → 100755
Wyświetl plik

0
README.md 100644 → 100755
Wyświetl plik

9
dox/doxyfile_ru 100644 → 100755
Wyświetl plik

@ -786,7 +786,8 @@ INPUT = ru \
../dspl/src \
../include \
../test/dox/ru \
../test/src
../test/src \
../test/bin/gnuplot
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
@ -853,7 +854,8 @@ FILE_PATTERNS = *.c \
*.ucf \
*.qsf \
*.as \
*.js
*.js \
*.plt
# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
@ -902,7 +904,8 @@ EXCLUDE_SYMBOLS =
# command).
EXAMPLE_PATH = ../test/src \
../test/dox
../test/dox \
../test/bin/gnuplot
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and

16
dox/makedoc.sh 100755
Wyświetl plik

@ -0,0 +1,16 @@
#!/bin/bash
cd ../
make
cd test/bin
for file in *.exe
do
"./$file"
done
cd ../../dox
doxygen doxyfile_ru
cd ../
make clean
cd dox

0
dox/ru/error_list.dox 100644 → 100755
Wyświetl plik

0
dox/ru/groups_define.dox 100644 → 100755
Wyświetl plik

0
dox/ru/mainpage.dox 100644 → 100755
Wyświetl plik

0
dspl/dox/ru/complex.dox 100644 → 100755
Wyświetl plik

0
dspl/dox/ru/conv.dox 100644 → 100755
Wyświetl plik

0
dspl/dox/ru/dft.dox 100644 → 100755
Wyświetl plik

0
dspl/dox/ru/ellipj.dox 100644 → 100755
Wyświetl plik

0
dspl/dox/ru/fft.dox 100644 → 100755
Wyświetl plik

0
dspl/dox/ru/fillarray.dox 100644 → 100755
Wyświetl plik

0
dspl/dox/ru/filter_an.dox 100644 → 100755
Wyświetl plik

44
dspl/dox/ru/filter_ap.dox 100644 → 100755
Wyświetl plik

@ -154,9 +154,51 @@
`RES_OK` Фильтр рассчитан успешно.<BR><BR>
В противном случае
\ref ERROR_CODE_GROUP "код ошибки".<BR>
Пример использования функции `cheby1_ap`:
\include cheby1_ap_test.c
Результат работы программы:
\verbatim
b[ 0] = 0.125 a[ 0] = 0.177
b[ 1] = 0.000 a[ 1] = 0.405
b[ 2] = 0.000 a[ 2] = 1.169
b[ 3] = 0.000 a[ 3] = 0.582
b[ 4] = 0.000 a[ 4] = 1.000
\endverbatim
<BR><BR>
В каталоге `dat` будут созданы три файла:<BR>
<pre>
cheby1_ap_test_mag.txt АЧХ фильтра
cheby1_ap_test_phi.txt ФЧХ фильтра
cheby1_ap_test_tau.txt ГВЗ фильтра
</pre>
Кроме того программа GNUPLOT произведет построение следующих графиков
по сохраненным в файлах данным:
АЧХ фильтра: `cheby1_ap_test_mag.png`
\image html cheby1_ap_test_mag.png
ФЧХ фильтра: `cheby1_ap_test_phi.png`
\image html cheby1_ap_test_phi.png
ГВЗ фильтра: `butter_ap_test_tau.png`
\image html cheby1_ap_test_tau.png
Скрипт GNUPLOT для построения графиков из текстовых файлов:
\include cheby1_ap_test.plt
\author
Бахурин Сергей
Бахурин Сергей
www.dsplib.org
***************************************************************************** */

Wyświetl plik

@ -0,0 +1,199 @@
/*! ****************************************************************************
\ingroup IIR_FILTER_DESIGN_GROUP
\fn int low2high (double* b, double* a, int ord, double w0, double w1,
double* beta, double* alpha)
\brief Частотное преобразование ФНЧ-ФВЧ
Функция производит перобразование передаточной функции \f$ H(s) \f$
аналогового ФНЧ с частотой среза `w0` рад/c
в передаточную функцию \f$ F(s) \f$ аналоговго ФВЧ с частотой среза `w1` рад/c.
Неравномерность АЧХ в полосе пропускания, уровень подавления в полосе
заграждения и порядок фильтра остаются неизменными.
\param[in] b Указатель на вектор коэффициентов
числителя передаточной функции \f$H(s)\f$
исходного аналогового ФНЧ.<BR>
Размер вектора `[ord+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\param[in] a Указатель на вектор коэффициентов знаменателя
передаточной функции \f$H(s)\f$
исходного аналогового ФНЧ.<BR>
Размер вектора `[ord+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\param[in] ord Порядок исходного фильтра и
фильтра после переобразования.<BR><BR>
\param[in] w0 Частота среза исходного ФНЧ.<BR><BR>
\param[in] w1 Требуемая частота среза ФВЧ
после преобразования.<BR><BR>
\param[in,out] beta Указатель на вектор коэффициентов
числителя передаточной функции \f$F(s)\f$
ФВЧ после преобразования.<BR>
Размер вектора `[ord+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\param[in,out] alpha Указатель на вектор коэффициентов знаменателя
передаточной функции \f$F(s)\f$
аналогового ФВЧ после преобразования.<BR>
Размер вектора `[ord+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\return
`RES_OK` Преоборазование расчитано успешно.<BR><BR>
В противном случае
\ref ERROR_CODE_GROUP "код ошибки".<BR>
\author
Бахурин Сергей
www.dsplib.org
***************************************************************************** */
/*! ****************************************************************************
\ingroup IIR_FILTER_DESIGN_GROUP
\fn int low2low(double* b, double* a, int ord, double w0, double w1,
double* beta, double* alpha)
\brief Частотное преобразование ФНЧ-ФНЧ
Функция производит перобразование передаточной функции \f$ H(s) \f$
аналогового ФНЧ с частотой среза `w0` рад/c
в передаточную функцию \f$ F(s) \f$ аналоговго ФНЧ с частотой среза `w1` рад/c.
Неравномерность АЧХ в полосе пропускания, уровень подавления в полосе
заграждения и порядок фильтра остаются неизменными.
\param[in] b Указатель на вектор коэффициентов
числителя передаточной функции \f$H(s)\f$
исходного аналогового ФНЧ.<BR>
Размер вектора `[ord+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\param[in] a Указатель на вектор коэффициентов знаменателя
передаточной функции \f$H(s)\f$
исходного аналогового ФНЧ.<BR>
Размер вектора `[ord+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\param[in] ord Порядок исходного фильтра и
фильтра после переобразования.<BR><BR>
\param[in] w0 Частота среза исходного ФНЧ.<BR><BR>
\param[in] w1 Требуемая частота среза ФНЧ
после преобразования.<BR><BR>
\param[in,out] beta Указатель на вектор коэффициентов
числителя передаточной функции \f$F(s)\f$
ФНЧ после преобразования.<BR>
Размер вектора `[ord+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\param[in,out] alpha Указатель на вектор коэффициентов знаменателя
передаточной функции \f$F(s)\f$
аналогового ФНЧ после преобразования.<BR>
Размер вектора `[ord+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\return
`RES_OK` Преоборазование расчитано успешно.<BR><BR>
В противном случае
\ref ERROR_CODE_GROUP "код ошибки".<BR>
\author
Бахурин Сергей
www.dsplib.org
***************************************************************************** */
/*! ****************************************************************************
\ingroup IIR_FILTER_DESIGN_GROUP
\fn int ratcompos( double* b, double* a, int n,
double* c, double* d, int p,
double* beta, double* alpha)
\brief Рациональная композиця
Функция рассчитывает композицию вида \f$Y(s) = (H \circ F)(s) = H(F(s))\f$, где
\f[
H(s) = \frac{\sum\limits_{m = 0}^{n} b_m s^m}
{\sum\limits_{k = 0}^{n} a_k s^k}, \ \ \ \
F(s) = \frac{\sum\limits_{m = 0}^{p} d_m s^m}
{\sum\limits_{k = 0}^{p} с_k s^k}, \ \ \ \
Y(s) = \frac{\sum\limits_{m = 0}^{n \cdot p} \beta_m s^m}
{\sum\limits_{k = 0}^{n \cdot p} \alpha_k s^k}
\f]
Функция рациональной композиции необходима для произведения частотных
преобразований передаточных характеристик аналоговых и цифровых фильтров,
а также для билинейного преобразования передаточных характеристик аналоговых
фильтров в соответствующие передаточные характеристики цифровых фильтров.
\param[in] b Указатель на вектор коэффициентов
числителя функции \f$H(s)\f$.<BR>
Размер вектора `[n+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\param[in] a Указатель на вектор коэффициентов знаменателя
функции \f$H(s)\f$.<BR>
Размер вектора `[n+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\param[in] n Порядок полиномов рациональной
функции \f$H(s)\f$.<BR><BR>
\param[in] c Указатель на вектор коэффициентов
числителя функции \f$F(s)\f$.<BR>
Размер вектора `[p+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\param[in] d Указатель на вектор коэффициентов знаменателя
функции \f$F(s)\f$.<BR>
Размер вектора `[p+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\param[in] p Порядок полиномов рациональной
функции \f$F(s)\f$.<BR><BR>
\param[in,out] beta Указатель на вектор коэффициентов
числителя функции \f$Y(s) = (H \circ F)(s)\f$.<BR>
Размер вектора `[n*p+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\param[in,out] alpha Указатель на вектор коэффициентов знаменателя
функции \f$Y(s) = (H \circ F)(s)\f$.<BR>
Размер вектора `[n*p+1 x 1]`.<BR>
Память должна быть выделена.<BR><BR>
\return
`RES_OK` Рациональная композиция рассчитана успешно.<BR><BR>
В противном случае
\ref ERROR_CODE_GROUP "код ошибки".<BR>
\author
Бахурин Сергей
www.dsplib.org
***************************************************************************** */

0
dspl/dox/ru/fourier_series.dox 100644 → 100755
Wyświetl plik

0
dspl/dox/ru/goertzel.dox 100644 → 100755
Wyświetl plik

0
dspl/dox/ru/inout.dox 100644 → 100755
Wyświetl plik

0
dspl/dox/ru/polyval.dox 100644 → 100755
Wyświetl plik

0
dspl/dox/ru/randgen.dox 100644 → 100755
Wyświetl plik

0
dspl/dox/ru/resampling.dox 100644 → 100755
Wyświetl plik

0
dspl/obj/.gitignore vendored 100644 → 100755
Wyświetl plik

0
dspl/src/array.c 100644 → 100755
Wyświetl plik

0
dspl/src/cheby.c 100644 → 100755
Wyświetl plik

0
dspl/src/complex.c 100644 → 100755
Wyświetl plik

0
dspl/src/conv.c 100644 → 100755
Wyświetl plik

0
dspl/src/dft.c 100644 → 100755
Wyświetl plik

0
dspl/src/ellipj.c 100644 → 100755
Wyświetl plik

0
dspl/src/fft.c 100644 → 100755
Wyświetl plik

0
dspl/src/fillarray.c 100644 → 100755
Wyświetl plik

0
dspl/src/filter_an.c 100644 → 100755
Wyświetl plik

0
dspl/src/filter_ap.c 100644 → 100755
Wyświetl plik

29
dspl/src/filter_ft.c 100644 → 100755
Wyświetl plik

@ -25,6 +25,33 @@
/******************************************************************************
* low 2 high transformation
*******************************************************************************/
int DSPL_API low2high(double* b, double* a, int ord, double w0, double w1,
double* beta, double* alpha)
{
double num[2] = {0.0, 0.0};
double den[2] = {0.0, 1.0};
if(!b || !a || !beta || !alpha)
return ERROR_PTR;
if(ord < 1)
return ERROR_FILTER_ORD;
if(w0 <= 0.0 || w1 <= 0.0)
return ERROR_FILTER_FT;
num[0] = w1 / w0;
return ratcompos(b, a, ord, num, den, 1, beta, alpha);
}
/******************************************************************************
low 2 low transformation
@ -43,7 +70,7 @@ int DSPL_API low2low(double* b, double* a, int ord, double w0, double w1,
if(w0 <= 0.0 || w1 <= 0.0)
return ERROR_FILTER_FT;
den[0] = w0 / w1;
den[0] = w1 / w0;
return ratcompos(b, a, ord, num, den, 1, beta, alpha);
}

0
dspl/src/fourier_series.c 100644 → 100755
Wyświetl plik

0
dspl/src/goertzel.c 100644 → 100755
Wyświetl plik

0
dspl/src/inout.c 100644 → 100755
Wyświetl plik

0
dspl/src/math.c 100644 → 100755
Wyświetl plik

0
dspl/src/polyval.c 100644 → 100755
Wyświetl plik

0
dspl/src/randgen.c 100644 → 100755
Wyświetl plik

0
dspl/src/resampling.c 100644 → 100755
Wyświetl plik

0
dspl/src/signals.c 100644 → 100755
Wyświetl plik

0
dspl/src/trapint.c 100644 → 100755
Wyświetl plik

2
include/dspl.c 100644 → 100755
Wyświetl plik

@ -95,6 +95,7 @@ p_linspace linspace ;
p_log_cmplx log_cmplx ;
p_logspace logspace ;
p_low2low low2low ;
p_low2high low2high ;
p_poly_z2a_cmplx poly_z2a_cmplx ;
p_polyval polyval ;
p_polyval_cmplx polyval_cmplx ;
@ -223,6 +224,7 @@ void* dspl_load()
LOAD_FUNC(log_cmplx);
LOAD_FUNC(logspace);
LOAD_FUNC(low2low);
LOAD_FUNC(low2high);
LOAD_FUNC(poly_z2a_cmplx);
LOAD_FUNC(polyval);
LOAD_FUNC(polyval_cmplx);

8
include/dspl.h 100644 → 100755
Wyświetl plik

@ -522,6 +522,14 @@ DECLARE_FUNC(int, logspace, double
COMMA int
COMMA double*);
//------------------------------------------------------------------------------
DECLARE_FUNC(int, low2high, double* b
COMMA double* a
COMMA int ord
COMMA double w0
COMMA double w1
COMMA double* beta
COMMA double* alpha);
//------------------------------------------------------------------------------
DECLARE_FUNC(int, low2low, double* b
COMMA double* a
COMMA int ord

0
release/doc/.gitignore vendored 100644 → 100755
Wyświetl plik

0
release/doc/ru/.gitignore vendored 100644 → 100755
Wyświetl plik

2
release/include/dspl.c 100644 → 100755
Wyświetl plik

@ -95,6 +95,7 @@ p_linspace linspace ;
p_log_cmplx log_cmplx ;
p_logspace logspace ;
p_low2low low2low ;
p_low2high low2high ;
p_poly_z2a_cmplx poly_z2a_cmplx ;
p_polyval polyval ;
p_polyval_cmplx polyval_cmplx ;
@ -223,6 +224,7 @@ void* dspl_load()
LOAD_FUNC(log_cmplx);
LOAD_FUNC(logspace);
LOAD_FUNC(low2low);
LOAD_FUNC(low2high);
LOAD_FUNC(poly_z2a_cmplx);
LOAD_FUNC(polyval);
LOAD_FUNC(polyval_cmplx);

8
release/include/dspl.h 100644 → 100755
Wyświetl plik

@ -522,6 +522,14 @@ DECLARE_FUNC(int, logspace, double
COMMA int
COMMA double*);
//------------------------------------------------------------------------------
DECLARE_FUNC(int, low2high, double* b
COMMA double* a
COMMA int ord
COMMA double w0
COMMA double w1
COMMA double* beta
COMMA double* alpha);
//------------------------------------------------------------------------------
DECLARE_FUNC(int, low2low, double* b
COMMA double* a
COMMA int ord

0
release/lib/.gitignore vendored 100644 → 100755
Wyświetl plik

0
test/bin/.gitignore vendored 100644 → 100755
Wyświetl plik

0
test/bin/dat/.gitignore vendored 100644 → 100755
Wyświetl plik

Wyświetl plik

Wyświetl plik

0
test/bin/img/.gitignore vendored 100644 → 100755
Wyświetl plik

0
test/obj/.gitignore vendored 100644 → 100755
Wyświetl plik

0
test/src/butter_ap_test.c 100644 → 100755
Wyświetl plik

65
test/src/cheby1_ap_test.c 100644 → 100755
Wyświetl plik

@ -3,41 +3,50 @@
#include <string.h>
#include "dspl.h"
// Порядок фильтра
#define ORD 4
// размер векторов частотной характериситки фильтра
#define N 1000
int main()
{
void* handle; // DSPL handle
handle = dspl_load(); // Load DSPL function
void* handle; // DSPL handle
handle = dspl_load(); // Load DSPL function
double a[ORD+1], b[ORD+1]; // коэффицинеты H(s)
double Rp = 3.0; // неравномерность в полосе пропускания 3дБ
// Частота (w), АЧХ (mag), ФЧХ (phi) и ГВЗ (tau)
double w[N], mag[N], phi[N], tau[N];
int k;
double a[ORD+1], b[ORD+1];
double Rp = 3.0;
double w[N], mag[N], phi[N], tau[N];
int k;
int res = cheby1_ap(Rp, ORD, b, a);
if(res != RES_OK)
printf("error code = 0x%8x\n", res);
for(k = 0; k < ORD+1; k++)
printf("b[%2d] = %9.3f a[%2d] = %9.3f\n", k, b[k], k, a[k]);
logspace(-2.0, 2.0, N , DSPL_SYMMETRIC, w);
freqs_resp(b, a, ORD, w, N, DSPL_FLAG_LOG|DSPL_FLAG_UNWRAP, mag, phi, tau);
writetxt(w, mag, N, "dat/cheby1_ap_test_mag.txt");
writetxt(w, phi, N, "dat/cheby1_ap_test_phi.txt");
writetxt(w, tau, N, "dat/cheby1_ap_test_tau.txt");
dspl_free(handle); // free dspl handle
res = system("gnuplot gnuplot/cheby1_ap_test.plt");
return 0;
// рассчитываем нормированный ФНЧ Чебышева 1 рода
int res = cheby1_ap(Rp, ORD, b, a);
if(res != RES_OK)
printf("error code = 0x%8x\n", res);
// печать коэффициентов фильтра
for(k = 0; k < ORD+1; k++)
printf("b[%2d] = %9.3f a[%2d] = %9.3f\n", k, b[k], k, a[k]);
// вектор частоты в логарифмической шакале от 0.01 до 100 рад/c
logspace(-2.0, 2.0, N , DSPL_SYMMETRIC, w);
//частотные характеристика фильтра
freqs_resp(b, a, ORD, w, N, DSPL_FLAG_LOG|DSPL_FLAG_UNWRAP,
mag, phi, tau);
// Сохранить характеристики для построения графиков
writetxt(w, mag, N, "dat/cheby1_ap_test_mag.txt");
writetxt(w, phi, N, "dat/cheby1_ap_test_phi.txt");
writetxt(w, tau, N, "dat/cheby1_ap_test_tau.txt");
dspl_free(handle); // free dspl handle
// выполнить скрипт GNUPLOT для построения графиков
// по рассчитанным данным
return system("gnuplot gnuplot/cheby1_ap_test.plt");;
}

0
test/src/cheby2_ap_zp_test.c 100644 → 100755
Wyświetl plik

0
test/src/conv_fft_cmplx_test.c 100644 → 100755
Wyświetl plik

0
test/src/dft_cmplx_test.c 100644 → 100755
Wyświetl plik

0
test/src/dft_test.c 100644 → 100755
Wyświetl plik

0
test/src/dspl_info_test.c 100644 → 100755
Wyświetl plik

0
test/src/ellip_landen_test.c 100644 → 100755
Wyświetl plik

0
test/src/fft_cmplx_test.c 100644 → 100755
Wyświetl plik

0
test/src/fft_test.c 100644 → 100755
Wyświetl plik