#include<xxgc.h>
#include<math.h>
static double lastvalue=0;
double abshs(dcomplex s,double a[],int *M,double b[],int *N)
{dcomplex c,d;
c=crpoly(a,*M,s);
d=crpoly(b,*N,s);
if(d.r!=0&&d.i!=0)lastvalue=c_abs(cdiv(c,d));
return lastvalue;}
double abshw(double w,double a[],int *M,double b[],int *N)
{dcomplex s;
s.r=0;s.i=w;
return abshs(s,a,M,b,N);}
main()
{int n;
double x[13]={1,2,3,4,4,4,4,4,3,2,1,0,0},y1[13]={0},y2[13]={0},y3[13]={0};
double a[3]={1.000792,-2.001584,1.000792},b[3]={1,16.942688,8.879171};
int M=3,N=3;
initgd("");
window2("digital filter ",
-3,5,20,-5,
"x","n",RED,BLUE);
/***display system input **/
setcolor(GREEN);
for(n=0;n<13;n++)line2(n,0,n,x[n]);
getch();
window2("amplitude frequency character of system",
-2.5,-1,2.5,1,
"s.i","|H|",RED,BLUE);
plotxy2(BLUE,abshw,a,&M,b,&N);
getch();
initgd("");
window2("digital filter ",
-3,1,20,-1,
"x","n",RED,BLUE);
for(n=1;n<13;n++)y1[n]=(1.0/12.06685)*(a[0]*x[n]+a[1]*x[n-1]+a[2]*x[n-2]-b[1]*y1[n-1]-b[2]*y1[n-2]);
setcolor(RED);setlinestyle(SOLID_LINE,0,3);
for(n=0;n<13;n++)line2(n,0,n,y1[n]);
getch();
for(n=1;n<13;n++)y2[n]=1.0/14.827152*(a[0]*x[n]+a[1]*x[n-1]+a[2]*x[n-2]-b[1]*y2[n-1]-b[2]*y2[n-2]);
setcolor(GREEN);setlinestyle(SOLID_LINE,0,3);
for(n=0;n<13;n++)line2(n,0,n,y2[n]);
getch();
for(n=1;n<13;n++)y3[n]=1.0/16.420909*(1.000792*y2[n]-2.001584*y2[n-1]+1.000792*y2[n-2]-16.942688*y3[n-1]-4.524946*y3[n-2]);
setcolor(LIGHTRED);setlinestyle(SOLID_LINE,0,3);
for(n=0;n<13;n++)line2(n,0,n,y3[n]);
getch();
closegraph();
}
FUPIN.zip_C++ 信号滤波
版权申诉
90 浏览量
2022-09-23
00:09:42
上传
评论
收藏 842B ZIP 举报
JonSco
- 粉丝: 70
- 资源: 1万+