📄 正弦采样及频谱状况.txt
字号:
/*=================================================================*/
/* 正弦采样及频谱状况 */
/* ----------written by chenzhiyu */
/*=================================================================*/
#include "graphics.h"
#include "conio.h"
#include "math.h"
#include "stdio.h"
#define E 50
#define PI 3.1415926
#define LN 640
/*------------------------------------------------------------------*/
/* void DFT */
/*------------------------------------------------------------------*/
void DFT(double yc[LN],double yp[LN],int N,double dl)
{
double yr[LN],yi[LN];
int n,k;
for(k=0;k<N;k++)
{
yr[(int)(k*dl)]=0;
yi[(int)(k*dl)]=0;
for(n=0;n<N;n++)
{
yr[(int)(k*dl)]=yr[(int)(k*dl)]+yc[(int)(n*dl)]*cos(2*PI*k*n/N);
yi[(int)(k*dl)]=yi[(int)(k*dl)]-yc[(int)(n*dl)]*sin(2*PI*k*n/N);
}
yp[(int)(k*dl)]=sqrt(yr[(int)(k*dl)]*yr[(int)(k*dl)]+yi[(int)(k*dl)]*yi[(int)(k*dl)])/3;
yp[(int)(k*dl+getmaxx()/2)]=yp[(int)(k*dl)];
}
}
/*-----------------------------------------------------------------*/
/* void jianto */
/*-----------------------------------------------------------------*/
void jianto(int x,int y,int drection)
{
if(drection==0)
{
line(x,y,x-5,y-5);
line(x,y,x-5,y+5);
}
else
{
line(x,y,x-5,y+5);
line(x,y,x+5,y+5);
}
}
/*-----------------------------------------------------------------*/
/* void main */
/*-----------------------------------------------------------------*/
main()
{
int N;
double x[LN];
double ys[LN],yp[LN];
double yc[LN],ycv[LN];
double ys_z[LN],yp_z[LN],yc_z[LN],ycv_z[LN];
int i,j;
double k,dl,dl2;
int gmode;
int gdriver=DETECT;
printf("please input N =>");
scanf("%d",&N);
initgraph(&gdriver,&gmode,"\\tc\\bin");
setfillstyle(1,4);
bar(0,0,getmaxx(),getmaxy()/2);
setfillstyle(1,1);
bar(0,getmaxy()/2,getmaxx(),getmaxy());
line(0,getmaxy()/4,getmaxx(),getmaxy()/4);
jianto(getmaxx(),getmaxy()/4,0);
line(0,getmaxy()*3/4,getmaxx(),getmaxy()*3/4);
jianto(getmaxx(),getmaxy()*3/4,0);
line(getmaxx()/2,0,getmaxx()/2,getmaxy());
jianto(getmaxx()/2,0,1);
jianto(getmaxx()/2,getmaxy()/2,1);
for(i=0;i<LN;i++)
{
x[i]=i;
ys[i]=0;
yc[i]=0;
yp[i]=0;
ycv[i]=0;
ys_z[i]=0;
yc_z[i]=0;
yp_z[i]=0;
ycv_z[i]=0;
}
k=4*PI/getmaxx();
dl=getmaxx()/(2.0*N);
for(i=0;i<LN;i++)
{
ys[i]=E*sin((i-getmaxx()/2)*k);
}
for(i=0;i<N;i++)
{
yc[(int)(i*dl)]=1;
yc[(int)(i*dl+getmaxx()/2)]=1;
}
for(i=0;i<LN;i++)
{
ys_z[i]=-ys[i]+getmaxy()/4;
}
moveto(x[0],ys_z[0]);
for(i=0;i<LN;i++)
lineto(x[i],ys_z[i]);
for(i=0;i<LN;i++)
{
yc_z[i]=-E*yc[i]+getmaxy()/4;
}
getch();
for(i=0;i<LN;i++)
{
ycv[i]=ys[i]*yc[i];
ycv_z[i]=-ycv[i]+getmaxy()/4;
}
DFT(ys,yp,getmaxx()/2,1);
for(i=0;i<LN;i++)
{
yp_z[i]=-yp[i]+getmaxy()*3/4;
}
dl2=getmaxx()/10;
for(i=getmaxx()/2;i<LN;i++)
{
if(yp[(int)(i)]!=0&&yp[i]<getmaxx()/4)
{
line(getmaxx()/2+(x[i]-getmaxx()/2)*dl2,yp_z[i],getmaxx()/2+(x[i]-getmaxx()/2)*dl2,getmaxy()*3/4);
line(getmaxx()/2+(getmaxx()/2-x[i])*dl2,yp_z[i],getmaxx()/2+(getmaxx()/2-x[i])*dl2,getmaxy()*3/4);
}
if(yp[i]>getmaxx()/4)
{
line(getmaxx()/2+(x[i]-getmaxx()/2)*dl2,getmaxy()/2,getmaxx()/2+(x[i]-getmaxx()/2)*dl2,getmaxy()*3/4);
jianto(getmaxx()/2+(x[i]-getmaxx()/2)*dl2,getmaxy()/2,1);
line(getmaxx()/2+(getmaxx()/2-x[i])*dl2,getmaxy()/2,getmaxx()/2+(getmaxx()/2-x[i])*dl2,getmaxy()*3/4);
jianto(getmaxx()/2+(getmaxx()/2-x[i])*dl2,getmaxy()/2,1);
}
}
getch();
for(i=0;i<LN;i++)
{
if(yc[i]!=0)
{
line(i,yc_z[i],i,getmaxy()/4);
jianto(i,yc_z[i],1);
}
}
getch();
setfillstyle(1,4);
bar(0,0,getmaxx(),getmaxy()/2);
line(0,getmaxy()/4,getmaxx(),getmaxy()/4);
jianto(getmaxx(),getmaxy()/4,0);
line(getmaxx()/2,0,getmaxx()/2,getmaxy()/2);
jianto(getmaxx()/2,0,1);
for(i=0;i<LN;i++)
{
if(ycv[i]!=0)
{
circle(x[i],ycv_z[i],2);
line(x[i],ycv_z[i],x[i],getmaxy()/4);
}
}
circle(getmaxx()/2,getmaxy()/4,2);
setfillstyle(1,1);
bar(0,getmaxy()/2,getmaxx(),getmaxy());
line(0,getmaxy()*3/4,getmaxx(),getmaxy()*3/4);
line(getmaxx()/2,getmaxy()/2,getmaxx()/2,getmaxy());
jianto(getmaxx(),getmaxy()*3/4,0);
jianto(getmaxx()/2,getmaxy()/2,1);
getch();
for(i=0;i<LN;i++)
yp[i]=0;
DFT(ycv,yp,N,dl);
for(i=0;i<LN;i++)
{
yp_z[i]=-yp[i]+getmaxy()*3/4;
}
dl2=getmaxx()/getmaxx();
for(i=getmaxx()/2;i<LN;i++)
{
if(yp[(int)(i)]!=0&&yp[i]<getmaxx()/4)
{
line(getmaxx()/2+(x[i]-getmaxx()/2)*dl2,yp_z[i],getmaxx()/2+(x[i]-getmaxx()/2)*dl2,getmaxy()*3/4);
line(getmaxx()/2+(getmaxx()/2-x[i])*dl2,yp_z[i],getmaxx()/2+(getmaxx()/2-x[i])*dl2,getmaxy()*3/4);
}
if(yp[i]>getmaxx()/4)
{
line(getmaxx()/2+(x[i]-getmaxx()/2)*dl2,getmaxy()/2,getmaxx()/2+(x[i]-getmaxx()/2)*dl2,getmaxy()*3/4);
jianto(getmaxx()/2+(x[i]-getmaxx()/2)*dl2,getmaxy()/2,1);
line(getmaxx()/2+(getmaxx()/2-x[i])*dl2,getmaxy()/2,getmaxx()/2+(getmaxx()/2-x[i])*dl2,getmaxy()*3/4);
jianto(getmaxx()/2+(getmaxx()/2-x[i])*dl2,getmaxy()/2,1);
}
}
getch();
closegraph();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -