long9998 发表于 2009-12-7 20:56

巴特沃斯低通滤波器 VC 求助

下面是我写的2阶的巴特沃斯低通滤波的部分VC程序,高手们帮看看哪里错了,主要是内存方面的问题,本人是新手,不太懂

void CFilterView::Butterworth(float *x, float *y, float fp,float FS,int num)
{
    float wp,fs,wc,ap,wwp,Fs1,epsl,A0,B0,B1,B2,a0,a1,a2,b1,b2,A,C;
ap=0.5;//通带截至频率
fs=0.1*fp;
    int num1,i;
    int n=2;
Fs1=FS;//采样频率
    float *x1,*y1;
    wp=2*pi*fp/Fs1;
//ws=2*pi*fs/Fs1;
epsl=sqrt(pow(10,ap/10));
wwp=2*Fs1*tan(wp/2);
wc=wwp/(pow(epsl,n));
C=2*Fs1;
A0=1;    H(s)的系数
B2=1/(wc*wc);
B1=1.4142/wc;
B0=1;
A=B0+B1*C+B2*C*C;
//下面是H(z)的系数
    a0=A0/A;
a1=2*A0/A;
    a2=a0;
b1=(2+B0-2*B2*C*C)/A;
b2=(B0-B1*C+B2*C*C)/A;
    num1=num;
    x1=(float *)malloc(sizeof(float)*num1);
    y1=(float *)malloc(sizeof(float)*num1);
    memcpy(x1,x,sizeof(float)*num1);
   
    y1=a0*x1;
y1=a0*x1+a1*x1-b1*y;
for(i=2;i<num1;i++)
{
y1=a0*x+a1*x+a2*x-b1*y-b2*y;//迭代过程
}
    for(i=0;i<num1;i++)
{
y=y1;
}
    free(x1);
    free(y1);
}

void CFilterView::drawboxing()
{
for(int i;i<20000;i++)
{
x=0;
y=0;
}
int num;
num=1000;
for(i=0;i<1000;i++)
{
x=sin(float(2*pi*50*i/1000))+0.5*sin(float(2*pi*500*i/1000));//正弦信号
}
Butterworth(x,y,100,1000,1000);//滤波(即使没有这句,在运行时也会报错)
CClientDC dc(this);
   CRect rect;
      GetClientRect(&rect);
dc.SetMapMode(MM_ANISOTROPIC);
      dc.SetViewportOrg(rect.right/10,rect.bottom/2);
      dc.SetViewportExt(rect.right,rect.bottom);

dc.SetWindowOrg(0,0);
      dc.SetWindowExt(1200,-200);
for(i=0;i<1000;i++)
{
dc.MoveTo(i,y);
dc.LineTo(i+1,yi+1]);
}
}

高手们帮看看啊,实在搞不懂到底哪里出错!

wsktm 发表于 2011-12-9 22:49

void CFilterView::drawboxing()
{
for(int i;i<20000;i++)
{
x=0;y=0;
int num;
num=1000;
for(i=0;i<1000;i++)
{
x=sin(float(2*pi*50*i/1000))+0.5*sin(float(2*pi*500*i/1000));//正弦信号
}
Butterworth(x,y,100,1000,1000);//滤波(即使没有这句,在运行时也会报错)
CClientDC dc(this);
   CRect rect;
      GetClientRect(&rect);
dc.SetMapMode(MM_ANISOTROPIC);
      dc.SetViewportOrg(rect.right/10,rect.bottom/2);
      dc.SetViewportExt(rect.right,rect.bottom);

dc.SetWindowOrg(0,0);
      dc.SetWindowExt(1200,-200);
for(i=0;i<1000;i++)
{
dc.MoveTo(i,y);
dc.LineTo(i+1,yi+1]);
}
}

wsktm 发表于 2011-12-9 22:50

x,y?
页: [1]
查看完整版本: 巴特沃斯低通滤波器 VC 求助