wT=8*f*(1.0)/fs;
COMPLEX z_1(cos(wT),-sin(wT));//z的-1次方变成e^jwt形式,然后用欧拉公式展开Z^-1=e^(-jwt)=coswt-jsinwt。
for(sum=0,i=0;i {m=polyval(&(H[i][0][0]),5,z_1)/polyval(&(H[i][1][0]),5,z_1);//求系统函数的多项式比值; sum=sum+(atan2(m.i,m.r));}//相频为系统函数虚部与实部比值的正切arctan(H.i/H.r); return sum; } void IIR(int bandType,double db1,double db2,double fs,double f1,double f2,double f3,double f4) { int i,j,k; order=btwOrder(bandType,db1,db2,fs,f1,f2,f3,f4);//返回值为N L=btwAf(b,order);//级连数 btwC23(c,bandType,order,db1,fs,f1,f2,f3,f4);//其中oroder为N,即阶数。函数返回的是Wc btwAf2Df(H,L,b,c); printf(\ for(i=0;i getch(); window2(\幅频\xy2(BLUE); plotxy2(RED,2,f,btw20lgHz(f,fs,H,L));//画相频特性曲线 //绘制通阻带参考线: if(bandType==LOWPASS||bandType==HIGHPASS) {line2(0,-db1,win2.x2,-db1); line2(0,-db2,win2.x2,-db2); line2(f1,0,f1,win2.y1); line2(f2,0,f2,win2.y1); } else{ line2(0,-db1,win2.x2,-db1); line2(0,-db2,win2.x2,-db2); line2(f1,0,f1,win2.y1); line2(f2,0,f2,win2.y1); line2(f3,0,f3,win2.y1); line2(f4,0,f4,win2.y1); } getch(); frame2(); for(i=0;i getch(); window2(\相频\xy2(BLUE); plotxy2(RED,2,f,btwphHs(f,fs,H,L));//画幅频特性曲线 getchar(); frame2(); } void IIRLv(int bandType,double db1,double db2,double fs,double f1,double f2,double f3,double f4) { order=btwOrder(bandType,db1,db2,fs,f1,f2,f3,f4);//返回值为N L=btwAf(b,order);//级连数 btwC23(c,bandType,order,db1,fs,f1,f2,f3,f4);//其中oroder为N,即阶数。函数返回的是Wc btwAf2Df(H,L,b,c); chouyang(100.); JILian_(); getchar(); } void IIRLv2(int bandType,double db1,double db2,double fs,double f1,double f2,double f3,double f4) { order=btwOrder(bandType,db1,db2,fs,f1,f2,f3,f4);//返回值为N L=btwAf(b,order);//级连数 btwC23(c,bandType,order,db1,fs,f1,f2,f3,f4);//其中oroder为N,即阶数。函数返回的是Wc btwAf2Df(H,L,b,c); chouyang2(fs); JILian_2(); } void main() { IIR(1,3.0,18.0,2000.,200.,300.,400.,500.); IIR(2,3.0,18.0,2000.,200.,300.,400.,500.); IIR(3,3.0,18.0,2000.,200.,300.,400.,500.); IIR(4,3.0,18.0,2000.,200.,300.,400.,500.); IIRLv(1,3.0,18.0,2000.,200.,300.,400.,500.);//对方波进行低通滤波; IIRLv2(2,3.0,18.0,2000.,300.,400.,500.,600.);//对多次正弦谐波进行高通滤波; } void JILian_(void)//实现L级级联 { int i,j,n; window2(\函数图形显示\ xy2(RED);//画xy轴。 plotgri2(BLUE,RED,x,N);//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch(); frame2(); dft(X,x,N,1); for(i=0;i window2(\函数图形显示\ xy2(RED);//画xy轴。 plotgri2(BLUE,RED,Y,N);//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数的自变量。 getch(); frame2(); for(i=0;i<=L-1;i++) { a[0]=0; for(j=1;j<5;j++)//归一化 {a[j]=-H[i][1][j]/H[i][1][0];}//y[n]系数归一 for(j=0;j<5;j++) {b0[j]=H[i][0][j]/H[i][1][0];}//x[n]系数归一 IIRT(x,y,a,b0,N,5); for(n=0;n void JILian_2(void)//实现L级级联,第二个滤波实现 { int i,j,n; window2(\函数图形显示\ xy2(RED);//画xy轴。 plotgri2(BLUE,RED,x,N);//宏函数工具方式,注意x是形式上的宏参数,它指明后面函数
相关推荐: