数字滤波器的频率响应H(w)的c语言求解问题,带程序,看不懂什么意思
程序原理见附件三张图片(懒得打字^_^)程序代码如下,运行无误,红色部分看不懂,看了好久了,请高手帮忙解释一下好吗?子程序:gain(b,a,m,n,x,y,len,sign)
#include "math.h"
void gain(b,a,m,n,x,y,len,sign)
int m,n,len,sign;
double b[],a[],x[],y[];
{int i,k;
double ar,ai,br,bi,zr,zi,im,re,den,numi,numr,freq,temp;
for(k=0;k<len;k++)
{
freq=k*0.5/(len-1);
zr=cos(-8.0*atan(1.0)*freq);
zi=sin(-8.0*atan(1.0)*freq);
br=0.0;
bi=0.0;
for(i=m;i>0;i--)
{re=br;
im=bi;
br=(re+b[i])*zr-im*zi;
bi=(re+b[i])*zi+im*zr;
}
ar=0.0;
ai=0.0;
for(i=n;i>0;i--)
{re=ar;
im=ai;
ar=(re+a[i])*zr-im*zi;
ai=(re+a[i])*zi+im*zr;
}
br=br+b[0];
ar=ar+1.0;
numr=ar*br+ai*bi;
numi=ar*bi-ai*br;
den=ar*ar+ai*ai;
x[k]=numr/den;
y[k]=numi/den;
switch(sign)
{case 1:
{temp=sqrt(x[k]*x[k]+y[k]*y[k]);
y[k]=atan2(y[k],x[k]);
x[k]=temp;
break;
}
case 2:
{temp=x[k]*x[k]+y[k]*y[k];
y[k]=atan2(y[k],x[k]);
x[k]=10.0*log10(temp);/*???????估计应该是20.0*/
}
}
}
}