【文件属性】:
文件名称:巴特沃兹滤波器 C语言
文件大小:3KB
文件格式:RAR
更新时间:2011-12-07 11:14:28
滤波器 C语言
用C语言实现巴特沃兹滤波器的原理
#include
#include "math.h"
void gainc(b,a,n,ns,x,y,len,sign)
int n,ns,len,sign;
double b[],a[],x[],y[];
{
int i,j,k,n1;
double ar,ai,br,bi,zr,zi,im,re,den,numr,numi,freq,temp;
double hr,hi,tr,ti;
n1=n+1;
for (k=0;k0 ;i-- )
{
re=br;
im=bi;
br=(re+b[j*n1+i])*zr-im*zi;
bi=(re+b[j*n1+i])*zi+im*zr;
}
ar=0.0;
ai=0.0;
for (i=n;i>0 ;i-- )
{
re=ar;
im=ai;
ar=(re+a[j*n1+i])*zr-im*zi;
ai=(re+a[j*n1+i])*zi+im*zr;
}
br=br+b[j*n1+0];
ar=ar+1.0;
numr=ar*br+ai*bi;
numi=ar*bi-ai*br;
den=ar*ar+ai*ai;
hr=numr/den;
hi=numi/den;
tr=x[k]*hr-y[k]*hi;
ti=x[k]*hi+y[k]*hr;
x[k]=tr;
y[k]=ti;
}
switch(sign)
{
case 1:
{
temp=sqrt(x[k]*x[k]+y[k]*y[k]);
if (temp!=0.0)
{
y[k]=atan2(y[k],x[k]);
}
else
{
y[k]=0.0;
}
x[k]=temp;
break;
}
case 2:
{
temp=x[k]*x[k]+y[k]*y[k];
if (temp!=0.0)
{
y[k]=atan2(y[k],x[k]);
}
else
{
temp=1.0e-40;
y[k]=0.0;
}
x[k]=10.0*log10(temp);
}
}
}
}
【文件预览】:
FIR
----iirbcf.c(3KB)
----IIR_BCF.c(1KB)
----gainc.c(1KB)