ellip_ap function added

pull/2/head
Dsplib 2018-06-05 23:50:12 +03:00
rodzic d3471a09c8
commit 56fa160cb7
5 zmienionych plików z 72 dodań i 0 usunięć

Wyświetl plik

@ -353,6 +353,62 @@ int DSPL_API cheby2_ap_zp(int ord, double rs, complex_t *z, int* nz,
/******************************************************************************
* Analog Normalized Elliptic filter
*******************************************************************************/
int DSPL_API ellip_ap(double rp, double rs, int ord, double* b, double* a)
{
int res;
complex_t *z = NULL;
complex_t *p = NULL;
int nz, np;
double norm, g0;
if(rp < 0.0)
return ERROR_FILTER_RP;
if(rs < 0.0)
return ERROR_FILTER_RS;
if(ord < 1)
return ERROR_FILTER_ORD;
if(!a || !b)
return ERROR_PTR;
z = (complex_t*) malloc(ord*sizeof(complex_t));
p = (complex_t*) malloc(ord*sizeof(complex_t));
res = ellip_ap_zp(ord, rp, rs, z, &nz, p, &np);
if(res != RES_OK)
goto exit_label;
res = filter_zp2ab(z, nz, p, np, ord, b, a);
if(res != RES_OK)
goto exit_label;
g0 = 1.0;
if(!(ord % 2))
{
g0 = 1.0 / pow(10.0, rp*0.05);
}
norm = g0 * a[0] / b[0];
for(nz = 0; nz < ord+1; nz++)
b[nz]*=norm;
exit_label:
if(z)
free(z);
if(p)
free(p);
return res;
}

Wyświetl plik

@ -56,6 +56,7 @@ p_dft_cmplx dft_cmplx ;
p_dmod dmod ;
p_ellip_acd ellip_acd ;
p_ellip_acd_cmplx ellip_acd_cmplx ;
p_ellip_ap ellip_ap ;
p_ellip_ap_zp ellip_ap_zp ;
p_ellip_asn ellip_asn ;
p_ellip_asn_cmplx ellip_asn_cmplx ;
@ -178,6 +179,7 @@ void* dspl_load()
LOAD_FUNC(dmod);
LOAD_FUNC(ellip_acd);
LOAD_FUNC(ellip_acd_cmplx);
LOAD_FUNC(ellip_ap);
LOAD_FUNC(ellip_ap_zp);
LOAD_FUNC(ellip_asn);
LOAD_FUNC(ellip_asn_cmplx);

Wyświetl plik

@ -310,6 +310,12 @@ DECLARE_FUNC(int, ellip_acd_cmplx, complex_t* w
COMMA double k
COMMA complex_t* u);
//------------------------------------------------------------------------------
DECLARE_FUNC(int, ellip_ap, double rp
COMMA double rs
COMMA int ord
COMMA double* b
COMMA double* a);
//------------------------------------------------------------------------------
DECLARE_FUNC(int, ellip_ap_zp, int ord
COMMA double rp
COMMA double rs

Wyświetl plik

@ -56,6 +56,7 @@ p_dft_cmplx dft_cmplx ;
p_dmod dmod ;
p_ellip_acd ellip_acd ;
p_ellip_acd_cmplx ellip_acd_cmplx ;
p_ellip_ap ellip_ap ;
p_ellip_ap_zp ellip_ap_zp ;
p_ellip_asn ellip_asn ;
p_ellip_asn_cmplx ellip_asn_cmplx ;
@ -178,6 +179,7 @@ void* dspl_load()
LOAD_FUNC(dmod);
LOAD_FUNC(ellip_acd);
LOAD_FUNC(ellip_acd_cmplx);
LOAD_FUNC(ellip_ap);
LOAD_FUNC(ellip_ap_zp);
LOAD_FUNC(ellip_asn);
LOAD_FUNC(ellip_asn_cmplx);

Wyświetl plik

@ -310,6 +310,12 @@ DECLARE_FUNC(int, ellip_acd_cmplx, complex_t* w
COMMA double k
COMMA complex_t* u);
//------------------------------------------------------------------------------
DECLARE_FUNC(int, ellip_ap, double rp
COMMA double rs
COMMA int ord
COMMA double* b
COMMA double* a);
//------------------------------------------------------------------------------
DECLARE_FUNC(int, ellip_ap_zp, int ord
COMMA double rp
COMMA double rs