信息工程实验报告3.docx
《信息工程实验报告3.docx》由会员分享,可在线阅读,更多相关《信息工程实验报告3.docx(32页珍藏版)》请在冰豆网上搜索。
信息工程实验报告3
实验18
0)这块具体忘了怎么按题分的了,大家自己研究一下吧
#include
#include
#defineNUM20
doublefunc1(doublet,double*fs)
{returnsin(8*atan
(1)*50*t/fs[0]+0.3);}
main()
{
inti,n,h,w,key,kv;
dcomplexx[20],X[20];
doublepi,sumx,sumy,AX[300],AY[300];
doublefs=50,dy;
charbuf[20],sbuf[30];
intdecpt,sign;
pi=4*atan
(1);
for(n=0;nx[n].r=sin(2*pi*50*n/fs+0.3);
x[n].i=0;
line2(n*1.0,0.0,n*1.0,x[n].r);
}
dft_ccc(x,X,NUM,1);
getch();
}
initgd("");
window2("dfgt",-1.0,1.0,(double)NUM,-1.0,"t","f",WHITE,BLUE);
plotxy2(RED,func1,&fs);
setcolor(BLUE);
getch();
closegraph();
}
setviewport(0,h+10,2*w,2*h+10,1);
setcolor(WHITE);
rectangle(scrr,scrt,scrl,scrb);
setfillstyle(SOLID_FILL,YELLOW);
floodfill(scrr+2,scrt+2,WHITE);
window2(-1.0,50.0,(double)NUM,-2.0,WHITE,BLUE);setcolor(RED);
for(sumx=0,sumy=0,n=0;ny=X[n].i*X[n].i+X[n].r*X[n].r;
sumx=sumx+x[n].r*x[n].r;
sumy=sumy+y;
y=sqrt(y);
AX[n]=n*1.0;
AY[n]=y;
line2(n*1.0,0.0,n*1.0,y);}
insPoly(AX+(int)(50*NUM/fs-5),AY+(int)(50*NUM/fs-5),10,50*NUM/fs,&y,&dy);
setcolor(GREEN);
line2(0.0,0.0,50*NUM/fs,0.0);
line2(50*NUM/fs,0.0,50*NUM/fs,y);
setviewport(0,2*h+20,2*w,3*h+30,1);*****/
printf("%f,,%f=%f$$$%f",fs,sumx,sumy/NUM,2*y*y/NUM);
outtextxy(10,0,"fs=");outtextxy(10+8*8,0,gcvt(fs,10,buf));
outtextxy(200,0,"M50=f*NUM/fs=");outtextxy(200+8*14,0,gcvt(50*NUM/fs,10,buf));
outtextxy(400,0,"NUM=");outtextxy(400+8*8,0,gcvt(NUM,10,buf));
outtextxy(10,20,"sumx2=");outtextxy(10+8*8,20,gcvt(sumx,10,buf));
outtextxy(10,40,"sumX2=");outtextxy(10+8*8,40,gcvt(sumy/NUM,10,buf));
outtextxy(10,60,"X50=");outtextxy(10+8*8,60,gcvt(2*y*y/NUM,10,buf));
outtextxy(200,30,"leak=");outtextxy(200+8*8,30,gcvt(sumx-2*y*y/NUM,10,buf));
setcolor(WHITE);
outtextxy(200,60,"q:
tobalustereffection,+:
fsincrease,-:
fsdecrease");
key=getch();
if(key=='+')kv=5;
elseif(key=='-')kv=-5;
elsekv=0;
}
cleardevice();
setviewport(0,0,2*w,h,1);window2(-1.0,1.0,(double)256,-1.0,WHITE,BLUE);
plotf_a2(RED,func1,&fs);
setcolor(GREEN);
for(n=0;n<250;n++){
x[n].r=sin(2*pi*50*n/fs+0.3);
x[n].i=0;
line2(n*1.0,0.0,n*1.0,x[n].r);}
dft_ccc(x,X,250,1);
setviewport(0,h+10,2*w,2*h+10,1);
window2(-1.0,50.0,(double)250,-2.0,WHITE,BLUE);setcolor(RED);
for(sumx=0,sumy=0,n=0;n<250;n++){
y=X[n].i*X[n].i+X[n].r*X[n].r;
y=sqrt(y);
line2(n*1.0,0.0,n*1.0,y);}
for(n=250;n<256;n++)
{x[n].r=0;x[n].i=0;}
fft_ccc(x,256,1);
setviewport(0,2*h+20,2*w,3*h+30,1);
window2(-1.0,50.0,(double)256,-2.0,WHITE,BLUE);setcolor(RED);
for(sumx=0,sumy=0,n=0;n<256;n++){
y=x[n].i*X[n].i+x[n].r*x[n].r;
y=sqrt(y);
line2(n*1.0,0.0,n*1.0,y);}
1)
#include
#include
#defineNUM100
#definePI4*atan
(1)
main()
{
inti,n;
dcomplexx[NUM],X[NUM];
/*doublepi;*/
doublefs=100;
doublesumT,sumF;
doubleEt,Ef;
/*pi=4*atan
(1);*/
for(n=0;n{
x[n].r=sin(2*PI*50*n/fs+0.5);
x[n].i=0;
}
initgd("");
window2("draw1DFTdatagraph",-1,-2,10,2,"n","x[n]",BLUE,GREEN);
setcolor(RED);
for(n=0;n/*for(n=0;ngetch();
dft_ccc(x,X,NUM,1);
dft_ccc(X,x,NUM,-1);
setcolor(GREEN);
for(n=0;n/*for(n=0;ngetch();
initgd("");
window2("draw1DFTdatagraph",-1,50,100,-2,"n","x5[n]",BLUE,GREEN);
setcolor(RED);
for(n=0;n/*for(n=0;ngetch();
closegraph();
for(sumT=0,sumF=0,Et=0,Ef=0,n=0;n{
sumT=sumT+x[n].r*x[n].r;
sumF=sumF+X[n].r*X[n].r+X[n].i*X[n].i;
if(n==50)
{
Et=2*x[50].r*x[50].r;
Ef=2*(X[50].r*X[50].r+X[50].i*X[50].i)/(NUM);
}
}
printf("sumT=%f,sumF=%f\n",sumT,sumF/(NUM));
printf("Et=%f,Ef=%f\n",Et,Ef);
getch();
}
2)
#include
#include
#defineNUM100
#definePI4*atan
(1)
main()
{
inti,n;
dcomplexx[NUM],X[NUM];
doublefs=110;
doublesumT,sumF;
doubleEt,Ef;
for(n=0;n{
x[n].r=sin(2*PI*50*n/fs+0.5);
x[n].i=0;
}
initgd("");
window2("draw2DFTdatagraph",-1,-2,100,5,"n","x[n]",BLUE,GREEN);
setcolor(RED);
for(n=0;n/*for(n=0;ngetch();
dft_ccc(x,X,NUM,1);
dft_ccc(X,x,NUM,-1);
setcolor(GREEN);
for(n=0;n/*for(n=0;ngetch();
initgd("");
window2("draw2DFTdatagraph",-1,50,100,-2,"n","x5[n]",BLUE,GREEN);
setcolor(RED);
for(n=0;n/*for(n=0;ngetch();
closegraph();
for(sumT=0,sumF=0,Et=0,Ef=0,n=0;n{
sumT=sumT+x[n].r*x[n].r;
sumF=sumF+X[n].r*X[n].r+X[n].i*X[n].i;
if(n==50)
{
Et=2*x[50].r*x[50].r;
Ef=2*(X[50].r*X[50].r+X[50].i+X[50].i)/NUM;
}
}
printf("sumT=%f,sumF=%f\n",sumT,sumF/(NUM));
printf("Et=%f,Ef=%f\n",Et,Ef);
getch();}
3)
#include
#include
#defineNUM100
#definePI4*atan
(1)
main()
{
inti,n;
dcomplexx[NUM],X[NUM];
doublefs=200;
doublesumT,sumF;
doubleEt,Ef;
for(n=0;n{
x[n].r=sin(2*PI*50*n/fs+0.5);
x[n].i=0;
}
initgd("");
window2("draw3DFTdatagraph",-1,-2,100,5,"n","x[n]",BLUE,GREEN);
setcolor(RED);
for(n=0;n/*for(n=0;ngetch();
dft_ccc(x,X,NUM,1);
dft_ccc(X,x,NUM,-1);
setcolor(GREEN);
for(n=0;n/*for(n=0;ngetch();
initgd("");
window2("draw3DFTdatagraph",-1,50,100,-2,"n","x5[n]",BLUE,GREEN);
setcolor(RED);
for(n=0;n/*for(n=0;ngetch();
closegraph();
for(sumT=0,sumF=0,Et=0,Ef=0,n=0;n{
sumT=sumT+x[n].r*x[n].r;
sumF=sumF+X[n].r*X[n].r+X[n].i*X[n].i;
if(n==50)
{
Et=2*x[50].r*x[50].r;
Ef=2*(X[50].r*X[50].r+X[50].i*X[50].i)/NUM;
}
}
printf("sumT=%f,sumF=%f\n",sumT,sumF/(NUM));
printf("Et=%f,Ef=%f\n",Et,Ef);
getch();
}
4)
#include
#include
#defineNUM100
#definePI4*atan
(1)
main()
{
inti,n;
dcomplexx[NUM],X[NUM];
doublefs=230;
doublesumT,sumF;
doubleEt,Ef;
for(n=0;n{
x[n].r=sin(2*PI*50*n/fs+0.5);
x[n].i=0;
}
initgd("");
window2("draw4DFTdatagraph",-1,-2,100,5,"n","x[n]",BLUE,GREEN);
setcolor(RED);
for(n=0;n/*for(n=0;ngetch();
dft_ccc(x,X,NUM,1);
dft_ccc(X,x,NUM,-1);
setcolor(GREEN);
for(n=0;n/*for(n=0;ngetch();
initgd("");
window2("draw4DFTdatagraph",-1,50,100,-2,"n","x[n]",BLUE,GREEN);
setcolor(RED);
for(n=0;n/*for(n=0;ngetch();
closegraph();
for(sumT=0,sumF=0,Et=0,Ef=0,n=0;n{
sumT=sumT+x[n].r*x[n].r;
sumF=sumF+X[n].r*X[n].r+X[n].i*X[n].i;
if(n==50)
{
Et=2*x[50].r*x[50].r;
Ef=2*(X[50].r*X[50].r+X[50].i*X[50].i)/NUM;
}
}
printf("sumT=%f,sumF=%f\n",sumT,sumF/(NUM));
printf("Et=%f,Ef=%f\n",Et,Ef);
getch();
}
5)
#include
#include
#defineNUM100
#definePI4*atan
(1)
main()
{
inti,n;
dcomplexx[NUM],X[NUM];
doublefs=250;
doublesumT,sumF;
doubleEt,Ef;
for(n=0;n{
x[n].r=sin(2*PI*50*n/fs+0.5);
x[n].i=0;
}
initgd("");
window2("draw5DFTdatagraph",-1,-2,100,5,"n","x[n]",BLUE,GREEN);
setcolor(RED);
for(n=0;n/*for(n=0;ngetch();
dft_ccc(x,X,NUM,1);
dft_ccc(X,x,NUM,-1);
setcolor(GREEN);
for(n=0;n/*for(n=0;ngetch();
initgd("");
window2("draw5DFTdatagraph",-1,50,100,-2,"n","x[n]",BLUE,GREEN);
setcolor(RED);
for(n=0;n/*for(n=0;ngetch();
closegraph();
for(sumT=0,sumF=0,Et=0,Ef=0,n=0;n{
sumT=sumT+x[n].r*x[n].r;
sumF=sumF+X[n].r*X[n].r+X[n].i*X[n].i;
if(n==50)
{
Et=2*x[50].r*x[50].r;
Ef=2*(X[50].r*X[50].r+X[50].i*X[50].i)/NUM;
}
}
printf("sumT=%f,sumF=%f\n",sumT,sumF/(NUM));
printf("Et=%f,Ef=%f\n",Et,Ef);
getch();}
实验19和21
19
#include
voidconvol(double*x,intN,double*h,intM,double*y,intL)
/*y[0]..y[L-1],x[0]..x[N-1],h[0]..h[M-1];general:
L=M+N-1;
as:
0<=k<=M+N-2,0<=n-k<=M-1,0<=k<=N-1
so:
K>=0,K>=n-M+1;
k<=N-1,K<=n;*/
{
intn,k,kk;
for(n=0;nfor(k=(n>=M)?
n-M+1:
0,kk=(N>n)?
n:
N-1,y[n]=0;k<=kk;k++)
y[n]+=x[k]*h[n-k];
}
doubleyuanshi(doublet,doubley[],intL)
{if(t>=0&&t<=L)returny[(int)t];
elsereturn0;
}
doubledaifushu(doublet,dcomplex*y,intL)
{if(t>=0&&t<=L)returnsqrt(y[(int)t].r*y[(int)t].r+y[(int)t].i*y[(int)t].i);
elsereturn0;
}
main()
{
intN=5,M=3,L=10,i,a;/*n,gd=VGA,gm=1,w,key,kv;*/
doublex[8]={1,2,3,4,5},h[8]={3,2,1},y[20];
dcomplexf[8]={1,0,2,0,3,0,4,0,5,0};
dcomplexr[8]={3,0,2,0,1,0,0,0};
initgd("C:
\xxgc");
/***step1***/
window2("functionconvolution",
-1,100,30,0,
"t","f",RED,BLUE);
printf("
(1)directlyconvolution...\n");
convol(h,M,x,N,y,L);
for(i=0;iplotxy2(RED,yuanshi,y,L);
getch();
clearviewport();
clrscr();
/***step2***/
window2("functionconvolution",
-1,100,30,0,
"t","f",RED,BLUE);
printf("
(2)fftconvolution\n");
for(i=M+N-1,L=1;i!
=0;){i=i>>1