From 3d029712f3d5e1911073410ec5e947076afde007 Mon Sep 17 00:00:00 2001 From: Dsplib Date: Tue, 3 Apr 2018 23:15:14 +0300 Subject: [PATCH] added cheby1 filter --- dspl/src/filter_ap.c | 137 +++++++++++++++++++++++++--- include/dspl.c | 4 + include/dspl.h | 2 + release/include/dspl.c | 4 + release/include/dspl.h | 2 + test/bin/.gitignore | 3 + test/bin/dft_test.exe | Bin 14720 -> 14792 bytes test/bin/gnuplot/butter_ap_test.plt | 1 + test/bin/gnuplot/cheby1_ap_test.plt | 8 ++ test/bin/img/butter_ap_test_mag.png | Bin 23684 -> 21185 bytes test/bin/img/cheby1_ap_test_mag.png | Bin 0 -> 22785 bytes test/src/cheby1_ap_test.c | 44 +++++++++ 12 files changed, 191 insertions(+), 14 deletions(-) create mode 100644 test/bin/gnuplot/cheby1_ap_test.plt create mode 100644 test/bin/img/cheby1_ap_test_mag.png create mode 100644 test/src/cheby1_ap_test.c diff --git a/dspl/src/filter_ap.c b/dspl/src/filter_ap.c index f0a5791..874f613 100644 --- a/dspl/src/filter_ap.c +++ b/dspl/src/filter_ap.c @@ -30,14 +30,14 @@ /************************************************************************************************** Analog Normalized Butterworth filter ***************************************************************************************************/ -int DSPL_API butter_ap(double Rp, int ord, double* b, double* a) +int DSPL_API butter_ap(double rp, int ord, double* b, double* a) { - int res; +int res; complex_t *z = NULL; complex_t *p = NULL; int nz, np; - if(Rp < 0.0) + if(rp < 0.0) return ERROR_FILTER_RP; if(ord < 1) return ERROR_FILTER_ORD; @@ -48,7 +48,7 @@ int DSPL_API butter_ap(double Rp, int ord, double* b, double* a) p = (complex_t*) malloc(ord*sizeof(complex_t)); - res = butter_ap_zp(ord, Rp, z, &nz, p, &np); + res = butter_ap_zp(ord, rp, z, &nz, p, &np); if(res != RES_OK) goto exit_label; @@ -76,23 +76,23 @@ Analog Normalized Butterworth filter zeros and poles ***************************************************************************************************/ int DSPL_API butter_ap_zp(int ord, double rp, complex_t *z, int* nz, complex_t *p, int* np) { - double alpha; - double theta; + double alpha; +double theta; double ep; int r; - int L; +int L; int ind = 0, k; if(rp < 0 || rp == 0) - return ERROR_FILTER_RP; - if(ord < 1) - return ERROR_FILTER_ORD; - if(!z || !p || !nz || !np) - return ERROR_PTR; + return ERROR_FILTER_RP; + if(ord < 1) + return ERROR_FILTER_ORD; + if(!z || !p || !nz || !np) + return ERROR_PTR; ep = sqrt(pow(10.0, rp*0.1) - 1.0); - r = ord % 2; - L = (int)((ord-r)/2); + r = ord % 2; + L = (int)((ord-r)/2); alpha = pow(ep, -1.0/(double)ord); if(r) @@ -119,6 +119,115 @@ int DSPL_API butter_ap_zp(int ord, double rp, complex_t *z, int* nz, complex_t * +/************************************************************************************************** +Analog Normalized Chebyshev type 1 filter +***************************************************************************************************/ +int DSPL_API cheby1_ap(double rp, int ord, double* b, double* a) +{ +int res; + complex_t *z = NULL; + complex_t *p = NULL; + int nz, np, k; + complex_t h0 = {1.0, 0.0}; + double tmp; + + + if(rp < 0.0) + return ERROR_FILTER_RP; + 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 = cheby1_ap_zp(ord, rp, 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; + + + if(!(ord % 2)) + RE(h0) = 1.0 / pow(10.0, rp*0.05); + + for(k = 0; k < np; k++) + { + tmp = CMRE(h0, p[k]); + IM(h0) = CMIM(h0, p[k]); + RE(h0) = tmp; + } + + b[0] = fabs(RE(h0)); + +exit_label: + if(z) + free(z); + if(p) + free(p); + return res; +} + + + + + +/************************************************************************************************** +Analog Normalized Chebyshev type 1 filter zeros and poles +***************************************************************************************************/ +int DSPL_API cheby1_ap_zp(int ord, double rp, complex_t *z, int* nz, complex_t *p, int* np) +{ + double alpha; + double theta; + double ep; + double beta; + double shbeta; + double chbeta; + int r; + int L; + int ind = 0, k; + + if(rp < 0 || rp == 0) + return ERROR_FILTER_RP; + if(ord < 1) + return ERROR_FILTER_ORD; + if(!z || !p || !nz || !np) + return ERROR_PTR; + + ep = sqrt(pow(10.0, rp*0.1) - 1.0); + r = ord % 2; + L = (int)((ord-r)/2); + + + beta = asinh(1.0/ep)/(double)ord; + chbeta = cosh(beta); + shbeta = sinh(beta); + + if(r) + { + RE(p[ind]) = -shbeta; + IM(p[ind]) = 0.0; + ind++; + } + for(k = 0; k < L; k++) + { + theta = M_PI*(double)(2*k + 1)/(double)(2*ord); + RE(p[ind]) = RE(p[ind+1]) = -shbeta * sin(theta); + IM(p[ind]) = chbeta * cos(theta); + IM(p[ind+1]) = -IM(p[ind]); + ind+=2; + } + *np = ord; + *nz = 0; + return RES_OK; +} + + + /************************************************************************************************** diff --git a/include/dspl.c b/include/dspl.c index 7308829..ec089bf 100644 --- a/include/dspl.c +++ b/include/dspl.c @@ -41,6 +41,8 @@ p_butter_ap butter_ap ; p_butter_ap_zp butter_ap_zp ; p_cheby_poly1 cheby_poly1 ; p_cheby_poly2 cheby_poly2 ; +p_cheby1_ap cheby1_ap ; +p_cheby1_ap_zp cheby1_ap_zp ; p_cmplx2re cmplx2re ; p_concat concat ; p_conv conv ; @@ -139,6 +141,8 @@ void* dspl_load() LOAD_FUNC(butter_ap_zp); LOAD_FUNC(cheby_poly1); LOAD_FUNC(cheby_poly2); + LOAD_FUNC(cheby1_ap); + LOAD_FUNC(cheby1_ap_zp); LOAD_FUNC(cmplx2re); LOAD_FUNC(concat); LOAD_FUNC(conv); diff --git a/include/dspl.h b/include/dspl.h index f6a8203..9d58a76 100644 --- a/include/dspl.h +++ b/include/dspl.h @@ -200,6 +200,8 @@ DECLARE_FUNC(int, butter_ap_zp, int COMMA double COMMA comple DECLARE_FUNC(int, cheby_poly1, double* COMMA int COMMA int COMMA double*); DECLARE_FUNC(int, cheby_poly2, double* COMMA int COMMA int COMMA double*); +DECLARE_FUNC(int, cheby1_ap, double COMMA int COMMA double* COMMA double*); +DECLARE_FUNC(int, cheby1_ap_zp, int COMMA double COMMA complex_t* COMMA int* COMMA complex_t* COMMA int*); DECLARE_FUNC(int, cmplx2re, complex_t* COMMA int COMMA double* COMMA double*); DECLARE_FUNC(int, concat, void* COMMA size_t COMMA void* COMMA size_t COMMA void*); DECLARE_FUNC(int, conv, double* COMMA int COMMA double* COMMA int COMMA double*); diff --git a/release/include/dspl.c b/release/include/dspl.c index 7308829..ec089bf 100644 --- a/release/include/dspl.c +++ b/release/include/dspl.c @@ -41,6 +41,8 @@ p_butter_ap butter_ap ; p_butter_ap_zp butter_ap_zp ; p_cheby_poly1 cheby_poly1 ; p_cheby_poly2 cheby_poly2 ; +p_cheby1_ap cheby1_ap ; +p_cheby1_ap_zp cheby1_ap_zp ; p_cmplx2re cmplx2re ; p_concat concat ; p_conv conv ; @@ -139,6 +141,8 @@ void* dspl_load() LOAD_FUNC(butter_ap_zp); LOAD_FUNC(cheby_poly1); LOAD_FUNC(cheby_poly2); + LOAD_FUNC(cheby1_ap); + LOAD_FUNC(cheby1_ap_zp); LOAD_FUNC(cmplx2re); LOAD_FUNC(concat); LOAD_FUNC(conv); diff --git a/release/include/dspl.h b/release/include/dspl.h index f6a8203..9d58a76 100644 --- a/release/include/dspl.h +++ b/release/include/dspl.h @@ -200,6 +200,8 @@ DECLARE_FUNC(int, butter_ap_zp, int COMMA double COMMA comple DECLARE_FUNC(int, cheby_poly1, double* COMMA int COMMA int COMMA double*); DECLARE_FUNC(int, cheby_poly2, double* COMMA int COMMA int COMMA double*); +DECLARE_FUNC(int, cheby1_ap, double COMMA int COMMA double* COMMA double*); +DECLARE_FUNC(int, cheby1_ap_zp, int COMMA double COMMA complex_t* COMMA int* COMMA complex_t* COMMA int*); DECLARE_FUNC(int, cmplx2re, complex_t* COMMA int COMMA double* COMMA double*); DECLARE_FUNC(int, concat, void* COMMA size_t COMMA void* COMMA size_t COMMA void*); DECLARE_FUNC(int, conv, double* COMMA int COMMA double* COMMA int COMMA double*); diff --git a/test/bin/.gitignore b/test/bin/.gitignore index e69de29..4c3d87c 100644 --- a/test/bin/.gitignore +++ b/test/bin/.gitignore @@ -0,0 +1,3 @@ +*.exe +*.so +*.dll diff --git a/test/bin/dft_test.exe b/test/bin/dft_test.exe index daeae039807337f3ca75ba289d6736b4bbcfc810..e6bcca3ba7f2bd958b37c1e5c81a2815d8ced54f 100755 GIT binary patch delta 3664 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 literal 23684 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 z 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 diff --git a/test/bin/img/cheby1_ap_test_mag.png b/test/bin/img/cheby1_ap_test_mag.png new file mode 100644 index 0000000000000000000000000000000000000000..2b7c72478fa017b5ff8d23abc1a83bc2cf0400ce GIT binary patch literal 22785 zcmZ_02RxST`v-gz3L$01jYKJBl|4fdLI~NSCwr4UqM~pcS!I@Fuk1}^%U+SaviBbE zaigc__rCwv=lNB?y6@{cuk$>{_xnAL<9hQ@R)PSJ5)Xku5J=v?tAIdYx+4%6!)Gwz zZ;G;|v*9;fi~Fk92n1m@`hOT9HwdW^h)W2`yCRS5BjzW(%2jK_T*tE zJoVUM%vWTNLlOoZ49$B7-u-gQvSsxwEJ;9` z&K7<{l%2t*Kp^g5UaNrrbN&tn4gwK?z+*!o+_4_IV;~R=?wIiLOBf_N@b9>>h*Jo} zeZ>FoSN1*=4j28SuP?k@eF4W)B&cn6cJ`v4*~QY+2{Q-k=??(duJsn1}H zCw3exEUr=5`3+{TUXu7l=YzzR4DeAYevjJO*-_DUu^p{`lkRCF;)=cX;xw7Eva;{R z+u}#pbcpVmT@Q*(-Zd|r3}hj+*ihKq?CI=W60mL@QXsk{5w*cT@SB=Lo+n_mp2v@>*Jhr-*KrSWT>O91|HWX~q-zp9a#?;aV*lad!lUhu5u^%%0JF zr;QQXUH#?)_JJQhuhQm_RWrRNa(FI&_7^MZcw#M`gKx3u|E`FpkywIxwugi^red`u zKyLq1UdRoVWr4$A)xd{5_=)rypY6=D#+r}>zem>L^zd`4kvi2S*g0qL-y(}u}l z$#&~UG5sHrypC(rJL|K>G;s>s@C?!Z1VyY&Oy{*V{ytqBQ^ouD?=N1wc>VfyOG`^R z!S&9K`Tls+8F(_196Sp%Gcz@{4=()7%xQ^rH{N55LDc$|Df zM_>NBW2uW=nBIqm2C1HO&0?#GH4S0i5k zy&>5xUt@5{W}NkvaQVaav5pXJ!ABNL2RF1?nYNt|UWpND@MaD-s1RxH_0Tr9lqiPn zS{hovS6T_b!Ne4S$J{3^UG6xoyG!Hbq_|R%Iil;y{>)tD!kg1neSLk@v$BSUlG4(* zFSvJ`-WL%O@$>WBn1B5mXE!?CYneLd&|t_w7(vx*(fB&P{`vOom-Y+IQ$~%x@u4ZU zSH;Y&-L>k!J$^`gh$t0pY+`q*x>#$JZ2ax=H;R_GEstg%eb}*1n~-?$YB998spM+? zv*?d+DANMR<(`=4?JwD=Ht3CDtC9+*vd|XOsjZYNndpe2sP^1!2CA@zvC4)@zsSW1 z8FeOd8h5kRY|Qm#JFd@s`}R$?)|blecFU@SKh3hUeX9(qmDZiu_@6)R2Q}XHtG&}J zQhS!GYWiAaW_Zwbhe4@M$JSzTHrl#PZAf`CJr7_UWFc zf2AmLt=`R|NQ-HD^l2G0!%*X4~#Ro2AeT zBjSj1$~YLO;%w97@C(XA-I{R4e*Tz61(IdwIYjs$i zjN-R5+uK@xmhEt`w=E~UpVLYF!Y;YRJWa44{ow11p`i_2wuz!c!k3=jzZ2u+L2rJB z#C%{Ysd8D-(@&)-Oo)9U#=5YjY1q|z{hM*g?b_%J--z=hoHK_9ce5^V#ylwII520I z;$&=(MYPJ~sI~rjLB`>NrLJ%5khVV6B!m6swRHDuOlzHj7`~r!VZ-G7TE-NK3OM&~ zQ?ctS${0SkUXz)5LG;q-Q^3(osCSSWD}F32Y)@{#?lHP&yPRCt_5lO`(Z_nDAI-F^ zzpnGrbMVry4LGf9|0qK8%k!`0f1F|aIP&bD;K73@=3cDdhiLY?_HN{xN?_mwgzw?8 z(Ma5n=~vh1!q>KL=u|Mwr7%@#Os&y1R?kk$Y8~iqFuuIMhsi6GTF$3&(aA^rFq7`H zn|pE1`ezLMv!}=?ew3-Z@x*aBnhaO$p8XK*%Dvau^l8NH43V$J-t+hmK9p(o`vp8E zzQR8vf*O8@K4tJ@Z7Fv#uKOL z_c2974n*EoTq~c>q7){;mzFGEGT2!tecT|4kKB-!b)+{?un>&DAMu4G2$#k=kuTo)E2%gq!#m zNn#0=u*A1dzr4})QA(II?Mi<&7X!V`eevn<{#3FismjTumidOeEp6JXnp1-*Er$~O zrtd93BpPe<$j4#Im8#Bu(ZPuII?5W)d@p7^COJTkU2L&OS^DY=)LQ%MA;(OeBi?iO z^i$~hj$PD4*0NKLUCidlQ#ZnBlePDvDFr>Z74{abJE45lqQ<(I7$ zr`(I-j2hISvh?KBeR);)GvCt+xAk7*15>8Mq{8ut6gp4Lh2EhAeti^W+V*zH*Oe8# z9PaC4_#b#^O+`|EtnsbgVQ;a26_l;&@NA642*nN?ZH@P3NwN2*2~sbQtA-t=_|+I$ zZ^_JQiifh4s^O9S_!JJVKU^Vgm}juP=|-^c>X<#%n0;Au15ZAUVRr9L8Ti&K+FA<5 ztt_tFW2PnL;*}KH8o8EIvLh|arUGN{n;UMUuJ08hqJpj$aQXNxKS)xx@XgO#dQeH? zip*yJ;eTBT4=%B99Y>q3YF}eLb1wd}yYcN+F^nfoB^YwA^IXHJLE+O_5WNTinhqgvGX?{ZUgA6~WD&pQk+^wR&9rA)($H zx-~PB@(pbY;ePCJ^wt~xPJ0=`w@`YAs^2@-0|iAoY`(u}GGvxyRIK)FqvP7CH4UA+a?$rGt+T((?LMnQ zsLDP*wM4jbqvBcit4(e%f(w>~mq({nv~zw`lTmy;>wC@yH}SL@ezx&xR$NP!`@_!* zP~NL;WE^Fut`Y+L+4*&T`B#}$QXE3Xf*Osiw!6m_5SjRLiv0=H2=_-|^3BhD`b+}( z@GRm#efnBbB06)eB4p!W+VxC}@x zdn)m2eBKQCz?-`y=|@P<)W}S(?e`&Aact6QXoBM%Y14WA09#*kgxA6p6Mz~ z%(dJpZ^g`|kr!K(;g{eFPv{6^&%hb+O(sGn{m_v{OpkfR_jD0@d1|eQOTl!KwiB`P zGuIH#D98+It!wD})gtftcLg81J3JmA=DSSDY;bao`#mc0Yx-Y4aM^|{d<%%ZaPlB# zvGWt!QJ%#wFa)GrvHv`XB1+e+yE{e<;|uojlJ6Nrwe?(=_*jpDP0LBBNqJRCpq2D^ zI}zO8Ws-`nB&(T-|GfkxJbJT-RMHmz5PSSR59{!_WbFqcrF(+3XL(L+qe2k&NI9m$ zBN!1)5BmXF0DV7B35dQoTtzXiV*O_ooDyx^hJ=GEHznDI&z&q`^9O{HXkoX<;6m*z^54)TBsGGSRfzqy zEch_b;Lu|ecBOpD^XF~;`!Jz#2ifag2@fpa<!K$UcP7xz3}%skrUUR zd*pFYUHB+jadd`vh}HDhcpK%Lcx3vB1<2lD{W%mePQJ`hiBw74OMKg;Iytew#ejv7 z^Gbz(OyPZlc~kJOeZ}}7?|n|P9!jTPVGA7#p!jnpKE+DLhMAJ!Y@5L6PMpm;kX|_L zTf1(Gz-yMAYVg}X&X#UXVrTqtnY*Tr>XaZEk(&}emlreHk{|{pU1K0V;tOG1 zP?49fUv;*z3GRI1t_WXUlld@n;i|DuGwZoS)lCjKFd(OYpZ-^i{I|8(PprOx)9?Bn z8BU~zdTSVqrj(qV|C={$zisk=J@5bBk7<0Smk zwad$9o!EizHVuBx*yVj&sOq%ccr|P6Xv-lLSP}}0nExuW?MhaXieHJc8+4e@?LpBB zn`J%TS^K@Z+9G@!t6+QiX-G(jyuAFCD_63zvN{svXnC#1;on*)oDTOl54UQC$;il_ z^SQQvmK12w|L31V?z0Gs$^9Js+rqOKNEpk_QxVnlB^10{SOdMi1%d_R#lP^7DdfeA7q|6)2)G@TIC+&@O*DM{ zr}1DTzx+B0UQKwLLFaGRsM(J_v-3`TrSV_BOg4nvFb3*eXw~&I*LWVyVtunfQrKnh z4R{{+>C-J%R_zrw;JH2Xue-9Ew6McRXIiGs-nNdTOXe>9@JQYm=|H+W^hP|OtgT*_R7TS zR7?IME*_qd$=QqD6da0#RC;~(7PoFM}iJlGedO<)=1^KtF zP5zfa!REZk_IrY$+Bst?9M4KuqVs|FnU#m!5ovy7JXhU47v0Mb4|e0F!w#1H-JbfI z_I-sD{HH0L-8YN1Z0nQxP#J5Gkl2lx3si7l!0u8db66QC zy`g;OViR-gv1H~L8aJ4at+|zn!AUJ1t#Gdnp&OdrzV9=IBiWgnPO!BhJL)9dgPF0!XrdB3Ui(+lvXf zXXLq5)PB(%XKP}8k$10-K?Ng�=ZS1goDX4Mzd{aa5-<6=7BV`m`~WnG9dZ1#>H> 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 XYu&1=yP8>xGKo0k;p1LQ2~PhTaxj@n literal 0 HcmV?d00001 diff --git a/test/src/cheby1_ap_test.c b/test/src/cheby1_ap_test.c new file mode 100644 index 0000000..dcd50d2 --- /dev/null +++ b/test/src/cheby1_ap_test.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include "dspl.h" + +#define ORD 4 +#define N 1000 + + +int main() +{ + void* handle; // DSPL handle + handle = dspl_load(); // Load DSPL function + + double a[ORD+1], b[ORD+1]; + double Rp = 3.0; + + 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]); + + + double w[N], hdb[N]; + complex_t h[N]; + + logspace(-2.0, 2.0, N , DSPL_SYMMETRIC, w); + freqs(b, a, ORD, w, N, h); + for(k = 0; k < N; k++) + hdb[k] = 10.0 * log10(ABSSQR(h[k])); + + writetxt(w, hdb, N, "dat/cheby1_ap_test_mag.txt"); + + dspl_free(handle); // free dspl handle + + system("gnuplot -p gnuplot/cheby1_ap_test.plt"); + + return 0; +} + +