最近在做轴承故障检测,C语言编程,在滤波部分遇到了问题,由于本人对滤波知之甚少,想求助:
这是测得的振动信号,在这个基础上我分别用C语言与LabVIEW对其做了滤波,都是用iir巴特沃兹滤波,频域上两者结果一样(我就不放图了),但时域差距很大。
这是LabVIEW做得滤波之后的时域图像看上去很正常,iir巴特沃兹滤波3阶
这是C语言同样采用iir巴特沃兹滤波的时域结果,非常不像。为什么会出现这样的问题。C语言是用的双线性变换
void iirbcf(short ifilt,short band,short ns,short n,double f1,double f2,double f3,double f4,double db,double b[],double a[])
{
short k;
double omega,lamda,epslon,fl,fh;
double d[5],c[5];
if((band==1)||(band==4)) fl=f1;
if((band==2)||(band==3)) fl=f2;
if(band<=3) fh=f3;
if(band==4) fh=f4;
if(ifilt<3)
{ switch (band)
{ case 1:
case 2:
{ omega=warp(f2)/warp(f1);
break;
}
case 3:
{ omega=omin(bpsub(warp(f1),fh,fl),bpsub(warp(f4),fh,fl));
break;
}
case 4:
{ omega=omin(1.0/bpsub(warp(f2),fh,fl),1.0/bpsub(warp(f3),fh,fl));}
}
lamda=pow(10.0,(db/20.0));
epslon=lamda/cosh(2*ns*cosh1(omega));
}
for(k=0;k
{ switch