⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 正弦采样及频谱状况.txt

📁 信号系统常用程序.卷积/傅立叶级数/频谱分析/调制解调等
💻 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 + -