gain.c

来自「关于滤波器设计的源代码」· C语言 代码 · 共 55 行

C
55
字号
#include"math.h"
void gainc(double b[],double a[],int m,int n,
		  double x[],double y[],int len,int sign)
{
  int i,k;
  double ar,ai,br,bi,zr,zi,im,re,den,numr,numi,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);
		  }
	  }
}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?