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

📄 amplit.cpp

📁 DSP原理及其C编程开发技术的源码 真的很好呀
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	  ch = getch();
	  if (ch >= '0' && ch <= '9')
	  {
	    if (wherex() != 10)
	      putch(ch);
	    else
	    {   
	      writechar(ch,LIGHTGRAY,BLUE,1);
	      beep();
	    }
	  }
	  else 
	    if (ch != 0)
	    { 
	      switch(ch)
	      {
		case 13 : fk = 1; ch = 80; break;    //enter key pressed
		case 8 :                             //backspace key
		  if (wherex() != 1)
		  {
		    writechar(0,LIGHTGRAY,BLUE,1);
		    putch(ch);
		    writechar(0,LIGHTGRAY,BLUE,1);
                  }
		  else beep();
		  break;
		case '.' :
		  X = wherex();
		  gotoxy(1, wherey());
		  period = 0;
		  for (loop = 1; loop <= 10; loop++)
		  {
		    gotoxy(loop, wherey());
		    if (read_char() == '.') period = 1;
                  }
		  gotoxy(X,wherey());
		  if (period == 1) beep();
		  else
		    putch(ch); 
		  break;
		case '+' : 
		  if (wherex() == 1) 
		    putch(ch); 
		  else
		    beep();
		   break;
		case '-' : 
		  if (wherex() == 1) 
		    putch(ch); 
		  else
		    beep();
		  break;
		case 9 : 
		  if (num)
		    num = 0;
		  else
		    num = 1;
		  switch_line();
		  if (!num)
		    window(47,8,59,18);
		  else
		    window(27,8,59,18);
		  gotoxy(1,1);
                  for (loop = 0; loop <= 9; loop++)
                  {
	            str[loop] = read_char();
                    gotoxy(wherex()+1,wherey());
                  }
                  reverse_video();
                  gotoxy(1,wherey());
                  for (loop = 0; loop <= 9; loop++)
                  { 
	            putch(str[loop]);
                  }
                  gotoxy(1,wherey());
		  tab = 1;
                break;
		default : beep(); break;
	      }
            }
	    else
	    {
	      ch = getch();
              fk = 0;
	      switch (ch)                          
	      {
		 case 75 :                         //left arrow key pressed
		   if (wherex() != 1) 
		     gotoxy(wherex()-1,wherey());
		   else
		     beep();
		   break;
		 case 77 :                         //right arrow key pressed
		   if (wherex() != 10)
		     gotoxy(wherex()+1,wherey());
		   else
		     beep();
		   break;
		 case 59 : help(); break;          // F1 key pressed
		 case 63 :                         // F5 key pressed
		   window (1,1,80,25);
		   textbackground(BLACK);
		   textcolor(WHITE);
		   clrscr(); 
		   exit(0);                 
		 default : fk = 1;
	       }
	     }
      }
      while (!fk || tab);
      if (fk == 1)
      {
	 fk = 0;
	 switch (ch)
	 {
           case 72 :                          //up arrow key pressed
	     switch_line();
	     if (wherey() != 1) 
	       gotoxy(1,wherey()-1);
	     else
	       gotoxy(1,11);
	     break;
	   case 80 :                         //down arrow key pressed
	     switch_line();
	     if (wherey() != 11)
	       gotoxy(1,wherey()+1);
	     else
	       gotoxy(1,1);
	     break;
	   case 68 : test = 1; break;       // F10 key pressed
	   default : beep(); gotoxy(1,wherey()); break;
	 }
      }
    }
    while (!test);
  }

main()
{
  int left, top, right, bottom, maxx, maxy, loop, loop1;
  double v, mag, mag_1, real_part, imag_part, phase, phase_1;
  char str[10];
  char ch;
  double A[11] = {0.0};
  double B[11] = {0.0};
  complex NUM, DEN;
     textmode(C80);  
  coeff_box();
  window(27,8,59,18);
  for (loop = 0; loop <= 10; loop++)        //reads data info from the display
  {
    for (loop1 = 1; loop1 <= 10; loop1++)
    {
      gotoxy(loop1,loop+1);                 //move cursor to read next char
      str[loop1-1] = read_char();
    } 
    A[loop] = atof(str);                    //converts string to float
    for (loop1 = 1; loop1 <= 10; loop1++)
    {
      gotoxy(loop1+20,loop+1);
      str[loop1-1] = read_char();
    }
    B[loop] = atof(str);
  }
  window(1,1,80,25);
  clrscr();
  
  int gdriver = DETECT, gmode, errorcode;    // request auto detection
  initgraph(&gdriver, &gmode, "");           // initialize graphics mode
  errorcode = graphresult();                 // read result of initialization 
  if (errorcode != grOk)                     // an error occurred
    {
       printf("Graphics error: %s\n", grapherrormsg(errorcode));
       printf("Press any key to halt:");
       getch();
    }

  maxx = getmaxx();                       //number of horizonal screen pixel
  maxy = getmaxy();                       //number of vertical screen pixel
  left = maxx/2 - 200;                    //left side of graph
  right = maxx/2 + 200;                   //right side of graph
  top = maxy/2 - 170;                     //top side of graph
  bottom = maxy/2 + 130;                  //bottom side of graph
  rectangle (left, top, right, bottom);
  setviewport (left, top, right, bottom, 1);
  for (loop = 1; loop <= 5; loop++)
  {
    line(loop*80,300,loop*80,292);        //draws vert hash marks
    line(0,loop*100,5,loop*100);          //draws horz hash marks
  }
  setlinestyle (SOLID_LINE,1,1);
  setviewport (left, top, right, bottom, 0);
  settextjustify(CENTER_TEXT,CENTER_TEXT);
  outtextxy(200,330, "Normalized Frequency = f/fN");
  outtextxy(200,345, "F1 for PRINTOUT      ENTER to continue");

  for (loop = 0; loop <= 5; loop++)
  {
    gcvt(loop/5.0, 10, str);              //converts float to string
    outtextxy(loop*80,310,str);
  }
  settextstyle(DEFAULT_FONT, VERT_DIR, 1);
  outtextxy(-75,150, "Magnitude");
  settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);
  settextjustify (RIGHT_TEXT,CENTER_TEXT);
  outtextxy(-10,300,"0.0");
  outtextxy(-10,200,"0.5");
  outtextxy(-10,100,"1.0");
  outtextxy(-10,0,"1.5");
  setviewport (left, top, right, bottom, 1);
  for (loop = 1; loop <= 400; loop++)        //loop to plot graph
  {
    v = loop/400.0;
    NUM = complex(A[0],0);                   //numerator 
    DEN = complex(B[0],0);                   //denominator 
    for (loop1 = 1; loop1 <= 10; loop1++)    //transfer fuction
    {
      NUM += complex(A[loop1]*cos(pi*v*loop1),-A[loop1]*sin(pi*v*loop1));
      DEN += complex(B[loop1]*cos(pi*v*loop1),-B[loop1]*sin(pi*v*loop1));
    }
    mag = sqrt(norm(NUM/DEN));               //magnitude of transfer function
    if (loop == 1) 
      mag_1 = mag;
    else                                     //plot graph
      {
	line (loop-1, 300 - mag_1*200, loop, 300 - mag*200);
	mag_1 = mag;
      }
   } 
  while(!kbhit());
  ch = getch();
  if (ch == 0)
  {
    ch = getch();
    if (ch == 59)
      LJ_Graphic();                          //print graphics
  }
  setviewport(0,0,115,maxy,0);
  clearviewport();
  setviewport(left+1,top+1,right-1,bottom-1,1);
  clearviewport();
  setviewport(left,top,right,bottom,0);
  setlinestyle(DASHED_LINE,1,1);
  line(0,150,400,150);
  setlinestyle(SOLID_LINE,1,1);
  for (loop = 1; loop <= 5; loop++)
    line(loop*80,300,loop*80,292);        //draws vert hash marks
  outtextxy(-15,0,"1.57");
  outtextxy(-15,150,"0.0");
  outtextxy(-15,300,"-1.57");
  settextstyle(DEFAULT_FONT,VERT_DIR,1);
  outtextxy(-75,150,"RADIANS");
  settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
  setviewport (left, top, right, bottom, 1);
  for (loop = 1; loop <= 400; loop++)
  {
    v = loop/400.0;
    NUM = complex(A[0],0);
    DEN = complex(B[0],0);
    for (loop1 = 1; loop1 <= 10; loop1++)
    {
      NUM += complex(A[loop1]*cos(pi*v*loop1),-A[loop1]*sin(pi*v*loop1));
      DEN += complex(B[loop1]*cos(pi*v*loop1),-B[loop1]*sin(pi*v*loop1));
    }
    real_part = real(NUM/DEN);
    imag_part = imag(NUM/DEN);
    phase = atan(imag_part/real_part);           //phase of transfer function
  if (loop == 1)
     phase_1 = phase;
  else                                           //plot phase
    {
      line (loop-1, 150-(150*phase_1/(pi*0.5)), loop, 150-(150*phase)/(pi*0.5));
      phase_1 = phase;
    }
  }          
  while (!kbhit());
  ch = getch();
  if (ch == 0)
  {
    ch = getch();
    if (ch == 59)
      LJ_Graphic();
  }
  closegraph();
  textcolor(WHITE);
  textbackground(BLACK);
  clrscr();
  return(0);
}    
  



  











⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -