kopia lustrzana https://github.com/Dsplib/libdspl-2.0
ellip_ap function added
rodzic
d3471a09c8
commit
56fa160cb7
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Ładowanie…
Reference in New Issue