欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    巴特沃斯滤波器c语言.docx

    • 资源ID:5414863       资源大小:309.77KB        全文页数:29页
    • 资源格式: DOCX        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    巴特沃斯滤波器c语言.docx

    1、巴特沃斯滤波器c语言巴特沃斯滤波器语言 作者: 日期:1. 模拟滤波器的设计 .1巴特沃斯滤波器的次数 根据给定的参数设计模拟滤波器,然后进行变数变换,求取数字滤波器的方法,称为滤波器的间接设计。做为数字滤波器的设计基础的模拟滤波器,称之为原型滤波器。这里,我们首先介绍的是最简单最基础的原型滤波器,巴特沃斯低通滤波器。由于IIR滤波器不具有线性相位特性,因此不必考虑相位特性,直接考虑其振幅特性。 在这里,是滤波器的次数,c是截止频率。从上式的振幅特性可以看出,这个是单调递减的函数,其振幅特性是不存在纹波的。设计的时候,一般需要先计算跟所需要设计参数相符合的次数。首先,就需要先由阻带频率,计算出

    2、阻带衰减将巴特沃斯低通滤波器的振幅特性,直接带入上式,则有最后,可以解得次数N为当然,这里的N只能为正数,因此,若结果为小数,则舍弃小数,向上取整。 1.2巴特沃斯滤波器的传递函数 巴特沃斯低通滤波器的传递函数,可由其振幅特性的分母多项式求得。其分母多项式根据解开,可以得到极点。这里,为了方便处理,我们分为两种情况去解这个方程。当为偶数的时候,这里,使用了欧拉公式。同样的,当为奇数的时候,同样的,这里也使用了欧拉公式。归纳以上,极点的解为上式所求得的极点,是在s平面内,在半径为c的圆上等间距的点,其数量为2N个。为了使得其II滤波器稳定,那么,只能选取极点在S平面左半平面的点。选定了稳定的极点

    3、之后,其模拟滤波器的传递函数就可由下式求得。 1.3巴特沃斯滤波器的实现(C语言) 首先,是次数的计算。次数的计算,我们可以由下式求得。 其对应的C语言程序为ppiew plainopy1. Ceil(.5*(o(w(10,Stopband_attenuation/1)/2. log(tpbad/Ctoff)); 然后是极点的选择,这里由于涉及到复数的操作,我们就声明一个复数结构体就可以了。最重要的是,极点的计算含有自然指数函数,这点对于计算机来讲,不是太方便,所以,我们将其替换为三角函数,这样的话,实部与虚部就还可以分开来计算。其代码实现为cppvewinoy1. tyeefsruct2.

    4、3. doblRl_art;4. doubeImaa;5. COPLEX;6. 7. 8. COMPLEoesN;9. 10. for(=0;k=(*N)-1);k+)11. 12. if(oofco((k+dk)(pi/N)))13. 14. osout.Rea_at=-Cotff*os(kdk)*(p/N));15. poeounImg_Pt-Cotof*sn(k+dk)*(p/N));16. cot+;17. if(cout=N)brek;18. 19. 计算出稳定的极点之后,就可以进行传递函数的计算了。传递的函数的计算,就像下式一样这里,为了得到模拟滤波器的系数,需要将分母乘开。很显然

    5、,这里的极点不一定是整数,或者来说,这里的乘开需要做复数运算。其复数的乘法代码如下,cppviw plioy1. intComplxuiple(CMPEX,CLXb,2. ob*Res_Ral,dulees_mag)3. 4. 5. (e_Rl)(a.Ralpat)*(bReal_part)-(.Iag_Prt)*(b.Imag_t);6. *(Re_Iag)=(.Img_Part)*(bReal_t)(.Ralpat)(b.Imag_Part);7. retur(int);8. 有了乘法代码之后,我们现在简单的情况下,看看其如何计算其滤波器系数。我们做如下假设这个时候,其传递函数为将其乘开,

    6、其大致的关系就像下图所示一样。计算的关系一目了然,这样的话,实现就简单多了。高阶的情况下也一样,重复这种计算就可以了。其代码为cpvew plaincpy1. es.Real_prtoles.eal_pat;2. 0.mag_art=oles0ag_Part;3. Res1Rapt=1;4. Res1.Imag_Pt0;5. 6. for(count1;ount_1N-1;cont1+)7. 8. fr(cunt=0;ountcon_12;count+)9. 10. if(0=count)11. 12. Complexultip(con,polescount_1,13. &(es_avecou

    7、ntReal_pa),14. &(Rs_Savcout.Imag_Prt);15. 16. leif((count_1+2)=ount)17. 18. Res_Savecout.Realarteount-1.Rel_pat;19. Re_Saecunt.Ia_Part+=Rscount1.Ima_at;20. 21. else22. 23. Comple_Mutiple(Rscoun,plescout_1+1,24. &(ResSavecntReapar),25. &(Res_avcoun.magart);26. 1 ResSavcoun.Ralpart=Reount-.ea_part;27.

    8、 Res_SavcouImag_P+=escount-1Imag_Par;28. 29. 30. *(b+N)=*(a+);到此,我们就可以得到一个模拟滤波器巴特沃斯低通滤波器了。.双次变换 .1双1次z变换的原理 我们为了将模拟滤波器转换为数字滤波器的,可以用的方法很多。这里着重说说双1次变换。我们希望通过双1次变换,建立一个平面到平面的映射关系,将模拟滤波器转换为数字滤波器。 和之前的例子一样,我们假设有如下模拟滤波器的传递函数。将其做拉普拉斯逆变换,可得到其时间域内的连续微分方程式,其中,(t)表示输入,y(t)表示输出。然后我们需要将其离散化,假设其采样周期是T,用差分方程去近似的替代

    9、微分方程,可以得到下面结果然后使用z变换,再将其化简。可得到如下结果从而,我们可以得到了s平面到z平面的映射关系,即由于所有的高阶系统都可以视为一阶系统的并联,所以,这个映射关系在高阶系统中,也是成立的。然后,将关系式带入上式,可得到这里,我们可以就可以得到与的对应关系了。 这里的与的对应关系很重要。我们最终的目的设计的是数字滤波器,所以,设计时候给的参数必定是数字滤波器的指标。而我们通过间接设计设计IIR滤波器时候,首先是要设计模拟滤波器,再通过变换,得到数字滤波器。那么,我们首先需要做的,就是将数字滤波器的指标,转换为模拟滤波器的指标,基于这个指标去设计模拟滤波器。另外,这里的采样时间T的

    10、取值很随意,为了方便计算,一般取就可以。 .2双1次z变换的实现(C语言) 我们设计好的巴特沃斯低通滤波器的传递函数如下所示。 我们将其进行双次z变换,我们可以得到如下式子可以看出,我们还是需要将式子乘开,进行合并同类项,这个跟之前说的算法相差不大。其代码为。cppview plaincoy1. r(u0;Cout=N;Con+)2. 3. for(CounZ;Count_=N;ot_Z+)4. 5. Rso_Z=0;6. R_aeCun_Z=0;7. 8. Res_Save0;9. or(ount=;out_1N-Count;Count_+)10. 11. fo(Count_2=;Cn_2u

    11、t_1;Count_2+)12. 13. i(Cout_2=)Resoun_2=e_aveCont_2;14. eli(Cot2=(u_1+1)&(Count!=0)15. Rsount_+=-Res_Savn_2-1;16. elsRsCont_2+=Res_SveCount_2-Rs_SaveCou2-;17. r(Cnt_Z0;Cou_Z=N;Cont_+)18. 19. Rs_Saveunt_ResCot_Z;20. esCount_Z=0;21. 22. 23. or(Count1=(N-out);CounN;Cut_1+)24. 25. or(Coun_2=0;Cont2=Cou_

    12、1+1;Coun_2+)26. 27. if(Cont_2=) ReCont_2+e_SaveCount_;28. eseif(Cout_=(ont1+1))&(Count!0))29. Rount_+=ResSaveon_2-1;30. else31. sCut_2+=Res_SavCunt_2+Re_aeount2-1;32. 33. or(Count_Z0;Cunt_Z=;CountZ+)34. 35. RSaeCunt=Rsount_Z;36. ResCout_;37. 38. 39. for(Count_Z=0;Count_Z2. #inclue3. #cludemllo.4. #i

    13、ncldestrh5. 6. 7. #definei((double)3.41592)8. 9. 10. trctDSGN_SCIFICAIO11. 12. ubleCotff;13. duleSopbnd;14. doleStopbndateation;15. ;16. 17. ypedetuct18. 19. dulReal_part;20. doubleImagP;21. COMPLEX;22. 23. 24. 25. itCeil(doubinput)26. 27. i(inut!=(t)ipu)etur(in)nput)1;28. elsereturn((n)nput);29. 30

    14、. 31. 32. intCmplex_Miple(CMPLXa,COMLEXb33. ,obleRes_Ral,dule*Res_Ima)34. 35. 36. (es_Real)(a.ealpart)(.Rea_at)-(a.magPart)*(Imag_Prt);37. *(es_Imag)=(aag_Part)(b.Ral_prt)(a.Reprt)(b.magPart);38. rturn(i);39. 40. 41. 42. itBurd(dubletf,43. doulStopbd,44. oubletpband_atenatio)45. 46. itN;47. 48. prin

    15、tf(Wc=lrad/ecn,Coo);49. prf(Ws=%lfrad/sc,Stpband);50. ptf(s=%lBn,Stband_atnaion);51. rinf(-n);52. 53. N=Cel(0.5*(log10(pow(10,opbdatenuatio/10)-1)54. log0(pband/Cotff));55. 56. 57. retrn(int)N;58. 59. 60. 61. intBut(int,doblCot,62. double*a,63. dob)64. 65. doubldk;66. tk0;67. intcon=,count1=0;68. CO

    16、MPLEXpolesN;69. OPLEXes+1,ResSaveN1;70. 71. if((N2)=0)dk=5;72. elek=0;73. 74. fr(k=0;k(2*N)-);+)75. 76. if(Cotof*os((k+dk)*(pi/N))77. 78. pescoun.Ralpa=-Cffcs(k+dk)*(i/N);79. olecnt.ImagPart=-Coff*sin((k+dk)(pi/N));80. count+;81. f(cut=N)brek;82. 83. 84. 85. printf(Pk=);86. fr(out0;utN;ount+)87. 88.

    17、 pntf(%l)+(%lfi)n,-poescout.al_part89. ,-olescount.ImagPart);90. 91. pinf(-n);92. 93. Res0.Real_apoes0.Rel_pat;94. Res0Ima_Pat=poles0.Ima_at;95. 96. Re1Reapart=;97. Res1.IgPar=;98. 99. r(cou_10;nt_1N-1;cot_1+)100. 101. for(cout0;count=cout_1+2;cont+)102. 103. if(0=count)104. 105. Colex_Mltipl(Recoun,lecont1+1,106. (s_Svecount.eal_part),107. &(Re_Save.Imag_Part);108. /pintf(Res_Sve:(%f)(%lfi)n,RsS.Real_pat,Res_ave0.Imag_at);109. 110. 111. eeif(con


    注意事项

    本文(巴特沃斯滤波器c语言.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开