四種IIR數(shù)字濾波器設計的核心程序(VB程序)_第1頁
四種IIR數(shù)字濾波器設計的核心程序(VB程序)_第2頁
四種IIR數(shù)字濾波器設計的核心程序(VB程序)_第3頁
四種IIR數(shù)字濾波器設計的核心程序(VB程序)_第4頁
四種IIR數(shù)字濾波器設計的核心程序(VB程序)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

IIR數(shù)字濾波器的核心程序這里提供雙線性變換法設計四種四種濾波器是1. 巴特沃思濾波器3. 切比雪夫2這里提供雙線性變換法設計四種四種濾波器是1. 巴特沃思濾波器3. 切比雪夫2型濾波器IIR2.4.數(shù)字濾波器的核心程序。這切比雪夫1型濾波器橢圓濾波器圖1、2示出以上幾種濾波器的程序框圖。Butterworth,Chebyshev",Chebyshev2巴特沃思、切比雪夫1型和切比雪夫2型HR數(shù)宇濾波釜的程序框E(雙線性變換法)EllipticHR楠底數(shù)宇濾波器程序框E(雙線性變崔法)'使用雙線性變換法的Butterworth型IIR數(shù)字濾波器設計程序'形參說明如下:'PbType輸入整型量,濾波器通帶類型'PbTypePbType=0:低通濾波器;PbType=1:高通濾波器;

'fp1'fp2'Apass'fs1PbType=2:PbType'fp1'fp2'Apass'fs1PbType=2:PbType=3:輸入雙精度量,界頻率(Hz).輸入雙精度量,輸入雙精度量,帶通濾波器;帶阻濾波器.低通或高通濾波器的通帶邊界頻率(Hz);帶通或帶阻濾波器的通帶低端邊帶通或帶阻濾波器的通帶低端邊界頻率(Hz).通帶衰減(dB).'fs2 -'Astop'fsamp'points--'ord-'NumSec()'DenSec()'NumSec_Z()'DenSec_Z()'AR()輸入雙精度量,低通或高通濾波器的阻帶邊界頻率(Hz);帶通或帶阻濾波器的阻帶高端邊界頻率(Hz).輸入雙精度量,帶通或帶阻濾波器的阻帶高端邊界頻率(Hz).輸入雙精度量,阻帶衰減(dB).輸入雙精度量,采樣頻率(Hz).輸入整型量,幅頻特性計算點數(shù).輸入整型量,濾波器階數(shù).-輸出雙精度量,轉移函數(shù)二階節(jié)的分子多項式系數(shù)二維數(shù)組.元素NumSec(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=0相應于常數(shù)項.輸出雙精度量轉移函數(shù)二階節(jié)的分母多項式系數(shù)二維數(shù)組.元素DenSec(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=0相應于常數(shù)項.輸出雙精度量系統(tǒng)函數(shù)二階節(jié)的分子多項式系數(shù)二維數(shù)組.元素NumSec_Z(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=0相應于常數(shù)項.--輸出雙精度量系統(tǒng)函數(shù)二階節(jié)的分母多項式系數(shù)二維數(shù)組.元素DenSec_Z(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=0相應于常數(shù)項.輸出雙精度量,濾波器的幅頻特性數(shù)組.SubButterworth(PbTypeAsInteger,fp1AsDouble,fp2AsDouble,ApassAsDouble,fs1AsDouble,fs2AsDouble,AstopAsDouble,fsampAsDouble,pointsAsInteger,ordAsInteger,NumSec()AsDouble,DenSec()AsDouble,NumSec_Z()AsDouble,DenSec_Z()AsDouble,AR()AsDouble)Dimi%,j%,k%,ord_t%Dimangle#,emp1#,temp2#,temp3#Dimratio(0To50)AsDouble '低通濾波器;'通帶、阻帶邊界頻率'低通濾波器;'通帶、阻帶邊界頻率wstop=2#*Pi*fstop/fsampomikaS=Tan(wstop/2#)estop=epson(Astop)wpass=2#*Pi*fpass/fsamp:omikaP=Tan(wpass/2#):epass=epson(Apass):'根據(jù)對幅頻特性的技術要求,計算模擬濾波器的階數(shù)orde=Ne_B(estop,epass,omikaS,omikaP)ord=Fix(orde)+1omk0=omika0(omikaP,epass,ord)'調(diào)用Fz_LP子程序,將低通模擬濾波器的轉移函數(shù)變量 s映射為低通數(shù)字濾波器的系統(tǒng)函數(shù)變量CallFz_LP(F1(),F2(),ord_t)'EndIfwstop=2#*Piwstop=2#*Pi*fstop/fsamp'高通濾波器;'通帶、阻帶邊界頻率IfPbType=1Thenwpass=2#*Pi*fpass/fsamp:

omikaP=1#/Tan(wpass/2#): omikaS=1#/Tan(wstop/2#)epass=epson(Apass):estop=epson(Astop)'根據(jù)對幅頻特性的技術要求,計算模擬濾波器的階數(shù)orde=Ne_B(estop,epass,omikaS,omikaP)ord=Fix(orde)+1omk0=omika0(omikaP,epass,ord)'調(diào)用Fz_HP子程序,將高通模擬濾波器的轉移函數(shù)變量sCallFz_HP(F1(),F2(),ord_t)EndIf映射為高通數(shù)字濾波器的系統(tǒng)函數(shù)變量wp2=2#*Pi*映射為高通數(shù)字濾波器的系統(tǒng)函數(shù)變量wp2=2#*Pi*fp2/fsampws2=2#*Pi*fs2/fsampwp1=2#*Pi*fp1/fsamp:ws1=2#*Pi*fs1/fsamp:Ci=BpC(wp1,wp2)omikaP=Abs((Ci-Cos(wp2))/Sin(wp2))omikaS1=Abs((Ci-Cos(ws1))/Sin(ws1))omikaS2=Abs((Ci-Cos(ws2))/Sin(ws2))IfomikaS1<=omikaS2ThenomikaS=omikaS1ElseomikaS=omikaS2EndIfepass=epson(Apass): estop=epson(Astop)'根據(jù)對幅頻特性的技術要求,計算模擬濾波器的階數(shù)orde=Ne_B(estop,epass,omikaS,omikaP)ord=Fix(orde)+1omk0=omika0(omikaP,epass,ord)'調(diào)用Fz_BP子程序,將帶通模擬濾波器的轉移函數(shù)變量sCallFz_BP(fp1,fp2,fsamp,F1(),F2(),ord_t)EndIfwp2=2#*wp2=2#*Pi*fp2/fsampws2=2#*Pi*fs2/fsampElseomikaS=Abs(omikaS2)EndIfepass=epson(Apass): estop=epson(Astop)'根據(jù)對幅頻特性的技術要求,計算模擬濾波器的階數(shù)orde=Ne_B(estop,epass,omikaS,omikaP)ord=Fix(orde)+1omk0=omika0(omikaP,epass,ord)'調(diào)用Fz_BS子程序,將帶阻模擬濾波器的轉移函數(shù)變量sCallFz_BS(fp1,fp2,fsamp,F1(),F2(),ord_t)'帶通濾波器;'通帶上下邊界頻率'帶通濾波器;'通帶上下邊界頻率'阻帶上下邊界頻率映射為帶通數(shù)字濾波器的系統(tǒng)函數(shù)變量'帶阻濾波器;'通帶上下邊界頻率'阻帶上下邊界頻率映射為帶阻數(shù)字濾波器的系統(tǒng)函數(shù)變量IfordMod2<>0Then'濾波器系統(tǒng)函數(shù)的階數(shù)為奇數(shù)時,級聯(lián)節(jié)的起始序號為‘二階節(jié))start=0Else'濾波器系統(tǒng)函數(shù)的階數(shù)為偶數(shù)時,級聯(lián)節(jié)的起始序號為start=1EndIfNR=ord\2'系統(tǒng)函數(shù)由一階、二階節(jié)級聯(lián)而成,k是節(jié)序號。此處求各節(jié)的分子分母多項式的系數(shù)Fork=startToNRIfk=0Then'求Butterworth濾波器轉移函數(shù)的一階節(jié)分子分母多項式的系數(shù)組Nums(0)=1#:Dens(0)=1#:NumSec(0,0)=Nums(0):DenSec(0,0)=Dens(0):EndIfIfk<>0Then'求Butterworth濾波器轉移函數(shù)的二階節(jié)分子分母多項式的系數(shù)組CallHS_B(ord,k,omikaP,epass,Nums(),Dens())Forj=0To2NumSec(k,j)=Nums(j):NextjEndIf'從模擬濾波器的轉移函數(shù)求數(shù)字濾波器的系統(tǒng)函數(shù)Ifk=0ThenCallBSF2(Nums(),Dens(),1,F1(),F2(),ord_t,Numz(),Denz(),order_z)ElseCallBSF2(Nums(),Dens(),2,F1(),F2(),ord_t,Numz(),Denz(),order_z)EndIf'求系統(tǒng)函數(shù)第k節(jié)的分子多項式系數(shù)組Forj=0Toorder_zNumSec_Z(k,j)=Numz(j)Nextj'求系統(tǒng)函數(shù)第k節(jié)的分母多項式系數(shù)組Forj=0Toorder_zDenSec_Z(k,j)=Denz(j)NextjNextk'求濾波器的幅頻特性Fori=0Topoints-1Fork=startToNRangle=i*2#*Pi/points0(序號為0的級聯(lián)節(jié)是一階節(jié),其余為1(級聯(lián)節(jié)都是二階節(jié),沒有一階節(jié))orderNums(1)=0#:Dens(1)=1#/omk0:NumSec(0,1)=Nums(1):DenSec(0,1)=Dens(1):Nums(2)=0#Dens(2)=0#NumSec(0,2)=Nums(2)DenSec(0,2)=Dens(2)DenSec(k,j)=Dens(j)'在單位圓上,第i點的幅值為1,相角為angle.Forj=0ToCallFind_ratio(ord,k,angle,NumSec_Z(),DenSec_Z(),ratio(k))angle,Num(),Den(),ratio(k))Ifratio(k)=0#Thenratio(k)=0.000001EndIfNextkAR(i)=1CallFind_ratio(order,Fork=startToNRAR(i)=AR(i)*ratio(k)NextkNextiEndSub'使用雙線性變換法的Chebyshev1型IIR數(shù)字濾波器設計程序'形參說明如下:'PbType 'fp1輸入整型量,濾波器通帶類型PbType=0:PbType=1:PbType=2:PbType=3:輸入雙精度量低通濾波器;高通濾波器;帶通濾波器;帶阻濾波器.,低通或高通濾波器的通帶邊界頻率(Hz);帶通或帶阻濾波器的通帶低端'fp2'Apass'fs1'fs2--'Astop--'fsamp-'points--'ord-'H0 'NumSec()'DenSec()'NumSec_Z()'DenSec_Z()'AR()邊界頻率(Hz).輸入雙精度量,帶通或帶阻濾波器的通帶低端邊界頻率 (Hz).輸入雙精度量,通帶衰減(dB).輸入雙精度量,低通或高通濾波器的阻帶邊界頻率(Hz);帶通或帶阻濾波器的阻帶高端邊界頻率(Hz).輸入雙精度量,帶通或帶阻濾波器的阻帶高端邊界頻率(Hz).輸入雙精度量,阻帶衰減(dB).輸入雙精度量,采樣頻率(Hz).輸入整型量,幅頻特性計算點數(shù).輸入整型量,濾波器階數(shù).輸出雙精度量,轉移函數(shù)和系統(tǒng)函數(shù)的常數(shù)因子.輸出雙精度量,轉移函數(shù)二階節(jié)的分子多項式系數(shù)二維數(shù)組.元素NumSec(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=0相應于常數(shù)項.輸出雙精度量轉移函數(shù)二階節(jié)的分母多項式系數(shù)二維數(shù)組.元素DenSec(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=0相應于常數(shù)項.輸出雙精度量系統(tǒng)函數(shù)二階節(jié)的分子多項式系數(shù)二維數(shù)組.元素NumSec_Z(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=0相應于常數(shù)項.輸出雙精度量系統(tǒng)函數(shù)二階節(jié)的分母多項式系數(shù)二維數(shù)組.元素DenSec_Z(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=0相應于常數(shù)項.輸出雙精度量,濾波器的幅頻特性數(shù)組.SubChebyshev1(PbTypeAsInteger,fp1AsDouble,fp2AsDouble,ApassAsDouble,fs1AsDouble,fs2AsDouble,AstopAsDouble,fsampAsDouble,pointsAsInteger,ordAsInteger,H0AsDouble,NumSec()AsDouble,DenSec()AsDouble,NumSec_Z()AsDouble,DenSec_Z()AsDouble,AR()AsDouble)Dimi%,k%,Fg%,ord_t%,order_z0%Dimangle#,A#Dimratio(0To50)AsDouble'低通濾波器wstop'低通濾波器wstop=2#*Pi*fstop/fsampomikaS=Tan(wstop/2#)

estop=epson(Astop)'高通濾波器wstop=2#*Pi*fstop/fsampomikaS=1#/Tan(wstop/2#)estop=epson(Astop)'帶通濾波器wp2=2#*Pi*fp2/fsampws2=2#*Pi*fs2/fsampIfPbType=0Thenwpass=2#*Pi*fpass/fsamp:omikaP=Tan(wpass/2#):epass=epson(Apass):'根據(jù)對幅頻特性的技術要求,計算模擬濾波器的階數(shù)orde=Ne_Ch12(omikaP,omikaS,epass,estop)ord=Fix(orde)+1A=1#/epassA=(1#/ord)*Log(A+Sqr(A人2+1#))A=sinh(A)omk0=A*omikaP'調(diào)用Fz_LP子程序,將低通模擬濾波器的轉移函數(shù)變量 s映射為低通數(shù)字濾波器的系統(tǒng)函數(shù)變量CallFz_LP(F1(),F2(),ord_t)EndIf IfPbType=1Thenwpass=2#*Pi*fpass/fsamp:omikaP=1#/Tan(wpass/2#):epass=epson(Apass):'根據(jù)對幅頻特性的技術要求 ,計算模擬濾波器的階數(shù)orde=Ne_Ch12(omikaP,omikaS,epass,estop)ord=Fix(orde)+1A=1#/epassA=(1#/ord)*Log(A+Sqr(A人2+1#))A=sinh(A)omk0=A*omikaP'調(diào)用Fz_HP子程序,將帶阻模擬濾波器的轉移函數(shù)變量s映射為帶阻數(shù)字濾波器的系統(tǒng)函數(shù)變量CallFz_HP(F1(),F2(),ord_t)EndIf IfPbType=2Thenwp1=2#*Pi*fp1/fsamp:ws1=2#*Pi*fs1/fsamp:Ci=BpC(wp1,wp2)omikaP=Abs((Ci-Cos(wp2))/Sin(wp2))omikaS1=Abs((Ci-Cos(ws1))/Sin(ws1))omikaS2=Abs((Ci-Cos(ws2))/Sin(ws2))IfomikaS1<=omikaS2ThenomikaS=omikaS1ElseomikaS=omikaS2EndIfepass=epson(Apass):estop=epson(Astop)'根據(jù)對幅頻特性的技術要求,計算模擬濾波器的階數(shù)orde=Ne_Ch12(omikaP,omikaS,epass,estop)ord=Fix(orde)+1A=1#/epassA=(1#/ord)*Log(A+Sqr(A人2+1#))A=sinh(A)omk0=A*omikaP'調(diào)用Fz_BP子程序,將帶通模擬濾波器的轉移函數(shù)變量s映射為帶通數(shù)字濾波器的系統(tǒng)函數(shù)變量CallFz_BP(fp1,fp2,fsamp,F1(),F2(),ord_t)

EndIf '帶阻濾波器wp2=2#*'帶阻濾波器wp2=2#*Pi*fp2/fsampws2=2#*Pi*fs2/fsampwp1=2#*Pi*fp1/fsamp:ws1=2#*Pi*fs1/fsamp:Ci=BpC(wp1,wp2)omikaP=Abs(Sin(wp2)/(Cos(wp2)-Ci))omikaS1=Sin(ws1)/(Cos(ws1)-Ci)omikaS2=Sin(ws2)/(Cos(ws2)-Ci)IfAbs(omikaS1)<=Abs(omikaS2)ThenomikaS=Abs(omikaS1)ElseomikaS=Abs(omikaS2)EndIfepass=epson(Apass): estop=epson(Astop)'根據(jù)對幅頻特性的技術要求,計算模擬濾波器的階數(shù)orde=Ne_Ch12(omikaP,omikaS,epass,estop)ord=Fix(orde)+1A=1#/epassA=(1#/ord)*Log(A+Sqr(A人2+1#))A=sinh(A)omkO=A*omikaPCallFz_BS(fp1,fp2,fsamp,F1(),F2(),ord_t)EndIf Nums(1)=0#:Dens(1)=1#:Nums(2)=0#Dens(2)=0#NR=ord\2IfordMod2<>0Thenstart=0Nums(0)=Nums(1)=0#:Dens(1)=1#:Nums(2)=0#Dens(2)=0#DenSec(0,i)=Dens(i)NumSec(0,i)=Nums(i):NextiH0=1DenSec(0,i)=Dens(i)HO=Sqr(1#/(1#+epass人2))EndIf'系統(tǒng)函數(shù)由一階、二階節(jié)級聯(lián)而成,k是節(jié)序號。此處求各節(jié)的分子分母多項式的系數(shù)Fork=startToNRIfk<>OThenCallHS_Ch1(ord,k,omikaP,epass,Nums(),Dens(),NumSec(),DenSec())EndIfIfk=OThenCallBSF2(Nums(),Dens(),1,F1(),F2(),ord_t,Numz(),Denz(),order_zO)order_z=order_zOElseCallBSF2(Nums(),Dens(),2,F1(),F2(),ord_t,Numz(),Denz(),order_z)EndIfFori=OToorder_zNumSec_Z(k,i)=Numz(i)Nexti

Fori=0Toorder_zDenSec_Z(k,i)=Denz(i)NextiNextk'求濾波器的幅頻特性'在單位圓上,第i點的幅值為1,相角為angle.Fori=0Topoints-1angle'在單位圓上,第i點的幅值為1,相角為angle.Ifk=0ThenCallFind_ratio(order_z0,k,angle,NumSec_Z(),DenSec_Z(),ratio(k))ElseCallFind_ratio(order_z,k,angle,NumSec_Z(),DenSec_Z(),ratio(k))EndIfIfratio(k)=0#Thenratio(k)=0.000001EndIfNextkAR(i)=1Fork=startToNRAR(i)=AR(i)*ratio(k)NextkAR(i)=AR(i)*H0NextiEndSub'使用雙線性變換法的Chebyshev2型IIR數(shù)字濾波器設計程序'形參說明如下:'PbType '形參說明如下:'PbType 'fp1輸入整型量,濾波器通帶類型PbType=0:PbType=1:PbType=2:PbType=3:輸入雙精度量低通濾波器;高通濾波器;帶通濾波器;帶阻濾波器.,低通或高通濾波器的通帶邊界頻率(Hz);帶通或帶阻濾波器的通帶低端'fp2'Apass''fp2'Apass'fs1'fs2--'Astop-'fsamp'points--'ord'H0 'NumSec()'DenSec()邊界頻率(Hz).輸入雙精度量,帶通或帶阻濾波器的通帶低端邊界頻率(Hz).輸入雙精度量,通帶衰減(dB).輸入雙精度量,低通或高通濾波器的阻帶邊界頻率(Hz);帶通或帶阻濾波器的阻帶高端邊界頻率(Hz).輸入雙精度量,帶通或帶阻濾波器的阻帶高端邊界頻率(Hz).輸入雙精度量,阻帶衰減(dB).輸入雙精度量,采樣頻率(Hz).輸入整型量,幅頻特性計算點數(shù).輸入整型量,濾波器階數(shù).輸出雙精度量,轉移函數(shù)和系統(tǒng)函數(shù)的常數(shù)因子.輸出雙精度量,轉移函數(shù)二階節(jié)的分子多項式系數(shù)二維數(shù)組.元素NumSec(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=0相應于常數(shù)項.-輸出雙精度量轉移函數(shù)二階節(jié)的分母多項式系數(shù)二維數(shù)組.元素DenSec(k,i)中,'NumSec_Z()''NumSec_Z()'DenSec_Z()'AR()k:二階節(jié)序號;i:多項式系數(shù),i=0相應于常數(shù)項.輸出雙精度量系統(tǒng)函數(shù)二階節(jié)的分子多項式系數(shù)二維數(shù)組元素NumSec_Z(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=0相應于常數(shù)項.'輸出雙精度量系統(tǒng)函數(shù)二階節(jié)的分母多項式系數(shù)二維數(shù)組元素DenSec_Z(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=0相應于常數(shù)項.輸出雙精度量,濾波器的幅頻特性數(shù)組.SubChebyshev2(PbTypeAsInteger,fp1AsDouble,fp2AsDouble,ApassAsDouble,fs1AsDouble,fs2AsDouble,AstopAsDouble,fsampAsDouble,pointsAsInteger,ordAsInteger,H0AsDouble,NumSec()AsDouble,DenSec()AsDouble,NumSec_Z()AsDouble,DenSec_Z()AsDouble,AR()AsDouble)Dimi%,j%,k%,Fg%,incOrd%,ord_t%,order_z0%Dimangle#,A#Dimratio(0To20)AsDoublewstop=2#*Pi*wstop=2#*Pi*fstop/fsampomikaS=Tan(wstop/2#)estop=epson(Astop)wpass=2#*Pi*fpass/fsamp:omikaP=Tan(wpass/2#):epass=epson(Apass):orde=Ne_Ch12(omikaP,omikaS,epass,estop)ord=Fix(orde)+1ord=ord+incOrdA=(1#/ord)*Log(estop+Sqr(estop人2+1#))omk0=omikaS/sinh(A)'調(diào)用Fz_LP子程序,將低通模擬濾波器的轉移函數(shù)變量s映射為低通數(shù)字濾波器的系統(tǒng)函數(shù)變量CallFz_LP(F1(),F2(),ord_t)wstop=2#*Pi*wstop=2#*Pi*fstop/fsampomikaS=1#/Tan(wstop/2#)estop=epson(Astop)wpass=2#*Pi*fpass/fsamp:omikaP=1#/Tan(wpass/2#):epass=epson(Apass):orde=Ne_Ch12(omikaP,omikaS,epass,estop)ord=Fix(orde)+1ord=ord+incOrdA=(1#/ord)*Log(estop+Sqr(estop人2+1#))omk0=omikaS/sinh(A)'調(diào)用Fz_HP子程序,將高通模擬濾波器的轉移函數(shù)變量s映射高通數(shù)字濾波器的系統(tǒng)函數(shù)變量CallFz_HP(F1(),F2(),ord_t)EndIfwp2=2#*Pi*wp2=2#*Pi*fp2/fsampws2=2#*Pi*fs2/fsampwp1=2#*Pi*fp1/fsamp:ws1=2#*Pi*fs1/fsamp:Ci=BpC(wp1,wp2)omikaP=Abs((Ci-Cos(wp2))/Sin(wp2))omikaS1=Abs((Ci-Cos(ws1))/Sin(ws1))omikaS2=Abs((Ci-Cos(ws2))/Sin(ws2))IfomikaS1<=omikaS2ThenomikaS=omikaS1

ElseomikaS=omikaS2EndIfepass=epson(Apass): estop=epson(Astop)orde=Ne_Ch12(omikaP,omikaS,epass,estop)ord=Fix(orde)+1ord=ord+incOrdA=(1#/ord)*Log(estop+Sqr(estop人2+1#))omkO=omikaS/sinh(A)'調(diào)用Fz_BP子程序,將帶通模擬濾波器的轉移函數(shù)變量s映射為帶通數(shù)字濾波器的系統(tǒng)函數(shù)變量CallFz_BP(fp1,fp2,fsamp,F1(),F2(),ord_t)wp2=2#*Pi*wp2=2#*Pi*fp2/fsampws2=2#*Pi*fs2/fsampwp1=2#*Pi*fp1/fsamp:ws1=2#*Pi*fs1/fsamp:Ci=BpC(wp1,wp2)omikaP=Abs(Sin(wp2)/(Cos(wp2)-Ci))omikaS1=Sin(ws1)/(Cos(ws1)-Ci)omikaS2=Sin(ws2)/(Cos(ws2)-Ci)IfAbs(omikaS1)<=Abs(omikaS2)ThenomikaS=Abs(omikaS1)ElseomikaS=Abs(omikaS2)EndIfepass=epson(Apass): estop=epson(Astop)orde=Ne_Ch12(omikaP,omikaS,epass,estop)ord=Fix(orde)+1ord=ord+incOrdA=(1#/ord)*Log(estop+Sqr(estop人2+1#))omkO=omikaS/sinh(A)'調(diào)用Fz_BS子程序,將帶阻模擬濾波器的轉移函數(shù)變量s映射為帶阻數(shù)字濾波器的系統(tǒng)函數(shù)變量CallFz_BS(fp1,fp2,fsamp,F1(),F2(),ord_t)EndIfNums(1)=0#:Dens(1)=1#:Nums(2)=0#Dens(2)=0#NR=ord\2IfordMod2<>0Thenstart=0Nums(0)=Nums(1)=0#:Dens(1)=1#:Nums(2)=0#Dens(2)=0#HO=Sqr(1#/(1#+epass人2))EndIf'系統(tǒng)函數(shù)由一階、二階節(jié)級聯(lián)而成,k是節(jié)序號。此處求各節(jié)的分子分母多項式的系數(shù)Fork=startToNRIfk<>OThenCallHS_Ch2(ord,k,omikaS,estop,Nums(),Dens())EndIfIfk=OThenCallBSF2(Nums(),Dens(),1,F1(),F2(),ord_t,Numz(),Denz(),order_zO)order_z=order_zO

ElseCallBSF2(Nums(),Dens(),2,F1(),F2(),ord_t,Numz(),Denz(),order_z)EndIfForj=0Toorder_zNumSec_Z(k,j)=Numz(j)NextjForj=0Toorder_zDenSec_Z(k,j)=Denz(j)NextjNextk'求濾波器的幅頻特性Fori=0Topoints-1angle=i*2#*Pi/pointsFork=startToNRIfk=0ThenCallFind_ratio(order_z0,k,angle,NumSec_Z(),DenSec_Z(),ratio(k))ElseCallFind_ratio(order_z,k,angle,NumSec_Z(),DenSec_Z(),ratio(k))EndIfIfratio(k)=0#Thenratio(k)=0.000001EndIfNextkAR(i)=1Fork=startToNRAR(i)=AR(i)*ratio(k)NextkAR(i)=AR(i)*H0NextiEndSub'在單位圓上,第i點的幅值為1,相角為angle.'在單位圓上,第i點的幅值為1,相角為angle.'形參說明如下PbType輸入整型量,濾波器通帶類型PbTypePbType=0PbType=1PbType=2低通濾波器;高通濾波器;帶通濾波器;帶阻濾波器.'低通濾波器;高通濾波器;帶通濾波器;帶阻濾波器.'fp1'fp2'Apass'fs1'fs2'Astop'fsamp'points輸入雙精度量邊界頻率(Hz).輸入雙精度量,帶通或帶阻濾波器的通帶低端邊界頻率(Hz).輸入雙精度量,通帶衰減(dB).輸入雙精度量,低通或高通濾波器的阻帶邊界頻率(Hz);帶通或帶阻濾波器的阻帶高端邊界頻率(Hz).輸入雙精度量,帶通或帶阻濾波器的阻帶高端邊界頻率(Hz).輸入雙精度量,阻帶衰減(dB).輸入雙精度量,采樣頻率(Hz).輸入整型量,幅頻特性計算點數(shù).,低通或高通濾波器的通帶邊界頻率(Hz);帶通或帶阻濾波器的通帶低端'ord-'H01 'NumSec('ord-'H01 'NumSec()'DenSec()'HO2 'NumSec_Z()'DenSec_Z()'AR()輸入整型量,濾波器階數(shù).輸出雙精度量,歸一化轉移函數(shù)的常數(shù)因子.輸出雙精度量,轉移函數(shù)二階節(jié)的分子多項式系數(shù)二維數(shù)組元素NumSec(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=O相應于常數(shù)項.輸出雙精度量轉移函數(shù)二階節(jié)的分母多項式系數(shù)二維數(shù)組元素DenSec(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=O相應于常數(shù)項.輸出雙精度量,去歸一化的轉移函數(shù)和系統(tǒng)函數(shù)的常數(shù)因子輸出雙精度量系統(tǒng)函數(shù)二階節(jié)的分子多項式系數(shù)二維數(shù)組元素NumSec_Z(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=O相應于常數(shù)項.輸出雙精度量系統(tǒng)函數(shù)二階節(jié)的分母多項式系數(shù)二維數(shù)組元素DenSec_Z(k,i)中,k:二階節(jié)序號;i:多項式系數(shù),i=O相應于常數(shù)項.輸出雙精度量,濾波器的幅頻特性數(shù)組.AsDimi%,j%,start%,k%,NR%,Flag%DimF1#,F2#,angle#Dimratio(OTo1O)AsDouble'低通濾波器IfPbType=OThenwpass=2#*Pi*fpass/fsampwstop=2#*Pi*fstop/fsampomikaP=Tan(wpass/2#)omikaS=Tan(wstop/2#)'調(diào)用Fz_LP子程序,將低通模擬濾波器的轉移函數(shù)變量CallFz_LP(Numz(),Denz(),order_z)EndIf'高通濾波器IfPbType=1Thenwpass=2#*Pi*fpass/fsampwstop=2#*Pi*fstop/fsampomikaP=1#/Tan(wpass/2#)omikaS=1#/Tan(wstop/2#)'調(diào)用Fz_HP子程序,將高通模擬濾波器的轉移函數(shù)變量CallFz_HP(Numz(),Denz(),order_z)EndIfs映射為低通數(shù)字濾波器的系統(tǒng)函數(shù)變量s映射高通數(shù)字濾波器的系統(tǒng)函數(shù)變量s映射為低通數(shù)字濾波器的系統(tǒng)函數(shù)變量s映射高通數(shù)字濾波器的系統(tǒng)函數(shù)變量IfPbType=2Thenwp1=2#*Pi*fp1/fsamp

wp2=2#*Pi*fp2/fsampws1=2#*Pi*fs1/fsampws2=2#*Pi*fs2/fsampCi=BpC(wp1,wp2)omikaP=Abs((Ci-Cos(wp2))/Sin(wp2))omikaS1=Abs((Ci-Cos(ws1))/Sin(ws1))omikaS2=Abs((Ci-Cos(ws2))/Sin(ws2))IfomikaS1<=omikaS2ThenomikaS=omikaS1ElseomikaS=omikaS2EndIf'調(diào)用Fz_BP子程序,將帶通模擬濾波器的轉移函數(shù)變量s映射為帶通數(shù)字濾波器的系統(tǒng)函數(shù)變量CallFz_BP(fp1,fp2,fsamp,Numz(),Denz(),order_z)EndIf'帶阻濾波器'帶阻濾波器IfPbType=3Thenwp1=2#*Pi*fp1/fsamp:ws1=2#*Pi*fs1/fsamp:Ci=BpC(wp1,wp2)wp2=2#*Pi*fp2/fsampws2=2#*Pi*fs2/fsampomikaS2=Abs(Sin(ws2)/(Cos(ws2)-Ci))omikaP=Abs(Sin(wp1)/(Cos(wp1)-Ci))omikaS1omikaS2=Abs(Sin(ws2)/(Cos(ws2)-Ci))IfomikaS1<=omikaS2ThenomikaS=omikaS1ElseomikaS=omikaS2EndIf'調(diào)用Fz_BS子程序,將帶阻模擬濾波器的轉移函數(shù)變量s映射為帶阻數(shù)字濾波器的系統(tǒng)函數(shù)變量CallFz_BS(fp1,fp2,fsamp,Numz(),Denz(),order_z)EndIf F1=omikaP/(2#*Pi): F2=omikaS/(2#*Pi)'求低通模擬橢圓濾波器的歸一化轉移函數(shù)CallHS_E(F1,F2,Apass,Astop,ord,Flag,H01,NumSec1(),DenSec1())IfordMod2<>0Thenstart=0startstart=0start=1ElseNR=ord/2:EndIf'將所求得的低通模擬濾波器的歸一化轉移函數(shù)去歸一化CallDeNormHs(Flag,NR,omk0,H01,NumSec1(),DenSec1(),H02,NumSec2(),DenSec2())'系統(tǒng)函數(shù)由一階、二階節(jié)級聯(lián)而成,k是節(jié)序號。此處根據(jù)模擬濾波器的一、二階節(jié)求數(shù)字濾波器的一、‘二階節(jié)的分子分母多項式系數(shù)Fork=startToNRNums(0)=NumSec2(k,0): Nums(1)=NumSec2(k,1): Nums(2)=NumSec2(k,2)Dens(0)=DenSec2(k,0):Dens(1)=DenSec2(k,1):Dens(2)=DenSec2(k,2)Ifk=0Thenorder_s=1Elseorder_s=2EndIf'根據(jù)模擬濾波器的一、二階節(jié)求數(shù)字濾波器的一、二階節(jié)的分子分母多項式系數(shù)CallBSF2(Nums(),Dens(),order_s,Numz(),Denz(),order_z,num(),Den(),order)'將二維數(shù)組NumSec_Z()和DenSec_Z()清零.Fori=OTo3NumSec_Z(k,i)=ODenSec_Z(k,i)=ONexti'將系統(tǒng)函數(shù)各個二階節(jié)的分子分母多項式的系數(shù)分別記入二維數(shù)組Forj=OToorderNumSec_Z(k,j)=num(j)DenSec_Z(k,j)=Den(j)NextjNextkFori=OTopoints-1Fork=startToNRangle=i*2#*Pi/points'第k個二階節(jié)的分子多項式的第'第k個二階節(jié)的分母多項式的第'k是二階節(jié)序號'在單位圓上,第i點的幅值為1,‘率。.個二階節(jié)的頻率響應'給定數(shù)字頻率,求第kCallFind_ratio(order,k,angle,NumSec_Z(),DenSec_Z(),ratio(k))Ifratio(k)=O#Then '避免在后續(xù)計算中發(fā)生溢出ratio(k)=O.OOOOO1EndIfNextk'給定數(shù)字頻率,求整個數(shù)字濾波器在該點的頻率響應AR(i)=1Fork=startToNRAR(i)=AR(i)*ratio(k)NextkAR(i)=AR(i)*HO2'此處已求出第i點頻率響應NextiEndSub'求Butterworth濾波器轉移函數(shù)的二階節(jié)分子分母多項式的系數(shù)組NumSec_Z()和DenSec_Z().j個系數(shù)j個系數(shù)相角為angle。此即第i個數(shù)字頻SubHS_B(nAsInteger,iAsInteger,omikaPAsDouble,epAsDouble,Nums()AsDouble,Dens()AsDouble)DimomkO#,arg#omkO=omikaO(omikaP,ep,n)arg=thetas(n,i)Nums(O)=1#:Dens(O)=1#:EndSubNums(1)=O#: Nums(2)=O#Dens(1)=(-2#/omkO)*Cos(arg):Dens(2)=(1#/omkO)人2'求切比雪夫1型模擬濾波器轉移函數(shù)的二階節(jié)分子分母多項式的系數(shù)組SubHS_Ch1(nAsInteger,iAsInteger,omikaPAsDouble,epAsDouble,Nums()AsDouble,Dens()AsDouble,NumSec()AsDouble,DenSec()AsDouble)Dimj%Dimphase#,A#,omkO#,omki#phase=thetas(n,i)A=(1#/n)*arcsinh(1#/ep)omk0=omikaP*sinh(A): omki=omikaP*Sin(phase)Nums(0)=omk0A2+omkiA2: Nums(1)=0#: Nums(2)=0#Dens(0)=Nums(0): Dens(1)=-2#*omk0*Cos(phase): Dens(2)=1#DenSec(i,j)=DenSec(i,j)=Dens(j)NextjEndSub'求切比雪夫2型模擬濾波器轉移函數(shù)的二階節(jié)分子分母多項式的系數(shù)組SubHS_Ch2(nAsInteger,iAsInteger,omikaSAsDouble,eSAsDouble,num()AsDouble,Den()AsDouble)Dimphase#,A#,omkO#,omki#phase=thetas(n,i)A=(1#/n)*arcsinh(eS)omk0=omikaS/sinh(A)omki=omikaS/Sin(phase)Den(2)=omkO人Den(2)=omkO人(-2)+omki人(-2)Den(0)=1#: Den(1)=-2#*(omk0A(-1))*Cos(phase):EndSub'求歸一化橢圓模擬低通濾波器的轉移函數(shù)SubHS_E(fpassAsDouble,fstopAsDouble,ApassAsDouble,AstopAsDouble,ordAsInteger,FlagAsInteger,HOAsDouble,NumSec()AsDouble,DenSec()AsDouble)Dimi%,j%,k%,start%,M%,order%,NR%,sign%Dimangle#,temp#,Au#,PinAu#,Omi#,Omi2#,Vi#,SigVi#,Denor#,ep#,ep2#,B2#,omkC#,D#,q#DimQO#,QO4#,QO5#,QO9#,QO13#,Q14#,PiN#,PiN2#,TR#,TN#,Rk#,RkPr#Dimarg#,Arg1#,Arg2#,Sum1#,Sum2#,SO#,SO2#,w#,omkO2#Dimratio(OTo1O)AsDoubleomkO=2#*Pi*Sqr(fpass*fstop)omk02=omkO卜2omikaP=2#*Pi*fpass/omkOomikaS=1/omikaPsign=1Sum2=0#ep2=10#A(0.1*Apass)ep=Sqr(ep2)B2=10#A(0.1*Astop)D=(B2-1#)/(ep2-1#)Rk=omikaPA2RkPr=(1#-Rk*Rk)A0.25Q0=0.5*(1#-RkPr)/(1#+RkPr)Q04=Q0A4Q05=Q0A5Q09=Q04*Q05

Q013=Q04*Q09q=Q0+2#*Q05+15#*Q09+150#*Q013orde=comlog(16#*D)/comlog(1#/q)ord=Fix(orde)+1PiN=Pi/ordPiN2=2#*PiNTR=(ep+1#)/(ep-1#)arg=Log(TR)/(2#*ord)Sum1=sinh(arg)ForM=1To4sign=-signArg2=2#*M*arg:Arg1=Arg2+argFlag=1:H0=S0Sumi=Sumi+sign*q人(M*(M+1))*sinh(Argl)Sum2=Sum2+Flag=1:H0=S0Flag=0:H0Flag=0:H0=1#/epAu=kIfFlag=0ThenSum1=Sum1=Sin(PinAu):Sum2=0#Sumi=Sumi+sign*qA(M*(M+i))*Sin(Argi)Sum2=Sum2+sign*qA(M*M)*Cos(Arg2)NextMOmi=Qi4*Sumi/(i#+2#*Sum2): Omi2=Omi*OmiVi=Sqr((i#-Rk*Omi2)*(i#-Omi2/Rk))SigVi=S0*ViDenor=i#+((S0)A2)*Omi2NumSec(k,0)=i#/Omi2NumSec(k,i)=0#NumSec(k,2)=i#DenSec(k,0)=((SigVi)A2+(Omi*w)A2)/(DenorA2)DenSec(k,i)=2#*SigVi/DenorDenSec(k,2)=i#H0=H0*DenSec(k,0)/NumSec(k,0)NextkIfFlag=iThenNumSec(0,1)=0#:NumSec(0,2)=0#NumSec(0,1)=0#:NumSec(0,2)=0#DenSec(0,0)=S0:EndIfEndSubDenSec(0,1)=1#:DenSec(0,2)=0#'將所求得的低通模擬濾波器的歸一化轉移函數(shù)去歸一化SubDeNormHs(FlagAsInteger,NRAsInteger,omk0AsDouble,H01AsDouble,NumSec1()AsDouble,DenSec1()AsDouble,H02AsDouble,NumSec2()AsDouble,DenSec2()AsDouble)Dimk%,start%,omk02#IfFlag=1ThenH02=H01*omk0:ElseH02DenSec(0,0)=S0:EndIfEndSubDenSec(0,1)=1#:DenSec(0,2)=0#'將所求得的低通模擬濾波器的歸一化轉移函數(shù)去歸一化SubDeNormHs(FlagAsInteger,NRAsInteger,omk0AsDouble,H01AsDouble,NumSec1()AsDouble,DenSec1()AsDouble,H02AsDouble,NumSec2()AsDouble,DenSec2()AsDouble)Dimk%,start%,omk02#IfFlag=1ThenH02=H01*omk0:ElseH02=H01:EndIfomk02=omkO人2Fork=startToNRIfk<>0ThenNumSec2(k,0)=NumSec1(k,0)*omk02NumSec2(k,1)=NumSec1(k,1)*omk0NumSec2(k,2)=NumSec1(k,2)DenSec2(k,0)=DenSec1(k,0)*omk02DenSec2(k,1)=DenSec1(k,1)*omk0DenSec2(k,2)=DenSec1(k,2)ElseNumSec2(0,0)=NumSec1(0,0)DenSec2(0,0)=DenSec1(0,0)*omk0DenSec2(0,1)=DenSec1(0,1)EndIfNextkEndSubstart=0start=1'從S平面到Z平面的低通映射函數(shù)SubFz_LP(F1()AsDouble,F2()AsDouble,ord_tAsInteger)F1(0)=1#:F2(0)=1#:ord_t=1EndSubF1(1)=-1#:F2(1)=1#:F1(2)=0F2(2)=0'從S平面到平面的高通映射函數(shù)F1(1)=1#:F2(1)=-1#:F1(2)=0F2(2)=0'從S'從S平面到平面的帶通映射函數(shù)SubFz_BP(fpaAsDouble,fpbAsDouble,fsAsDouble,F1()AsDouble,F2()AsDouble,ord_tAsInteger)DimC#,temp#,wpa#,wpb#temp=(2#*Pi/fs): wpa=temp*fpa:C=(Sin(wpa+wpb))/(Sin(wpa)+Sin(wpb))F1(0)=1#:F1(1)=-2#*C:F2(0)=1#:F2(1)=0#:ord_t=2EndSubwpb=temp*fpbF1(2)=1#F2(2)=-1#'從S平面到Z平面的帶阻映射函數(shù)SubFz_BS(fpaAsDouble,fpbAsDouble,fsAsDouble,F1()AsDouble,F2()AsDouble,ord_tAsInteger)DimC#,temp#,wpa#,wpb#temp=(2#*Pi/fs): wpa=temp*fpa:C=(Sin(wpa+wpb))/(Sin(wpa)+Sin(wpb))F1(0)=1#:F1(1)=0#:F2(0)=1#:F2(1)=-2#*C:ord_t=2EndSubwpb=temp*fpbF1(2)=-1#F2(2)=1#'這個程序用來求二階節(jié)的頻率響應。所謂頻率響應是二階節(jié)在單位圓上的取值。'給定第k個二階節(jié)的分子多項式系數(shù)數(shù)組為n(),分母多項式系數(shù)數(shù)組為d(),此二階節(jié)在單位圓上求值?!產(chǎn)ngle是該點在單位圓上的角度。order=2是二階節(jié)的階數(shù)。輸出量rt是二階節(jié)在單位圓上指定點的取‘值。SubFind_ratio(orderAsInteger,kAsInteger,angleAsDouble,n()AsDouble,D()AsDouble,rtAsDouble)Dimi%DimSum1Asrad,Sum2AsradDimA(0To59)AsradFor

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論