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

📄 一个fft演示程序.c

📁 可产生矩形脉冲和正弦信号
💻 C
字号:
    函数 SignalRect()和SignalCos()可产生矩形脉冲和正弦信号,矩形脉冲的脉宽可以改变,正弦信号则可以改变频率和时宽。考虑到演示效果,FFT的点数最好去128或64点。如n取256点,则需改变space的大小。在脉宽从1到n的变化过程中,可看到频谱零点的变化。正弦信号的频率取整数时,频谱只有单条谱线。而当正旋信号的频率取非整数时,则能看到频谱泄漏的情况。
  
 
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
#include<graphics.h>
 
void InitGraphic(void);
void PlotTimeSequ(float *x,int n,float scale,int space,int y1);
void PlotSpectrum(float *x,int n,float scale,int space,int y1);
void FFT(float *xr,float *xi,int n,int inv);
void tra(float *x,float *y);
void SignalRect(int n,int m,float *yr,float *yi);
void SignalCos(int n,float f,float *yr,float *yi);

void main(void)
{ float y[128],yr[128],yi[128];
  int i,k,n=128;
  InitGraphic();
  
  SignalRect(n,16,yr,yi);/*信号为矩形脉冲*/
  PlotTimeSequ(yr,n,60,4,130);
 
  FFT(yr,yi,n,0);
  for(k=0;k<=n;k++) y[k]=sqrt(yr[k]*yr[k]+yi[k]*yi[k]);
  
  PlotSpectrum(y,n,100,4,400);
  setcolor(11);
  outtextxy(200,440,"Please press any key---");
  getch();
  closegraph();
  return;
}
 
void SignalRect(int n,int m,float *yr,float *yi)
{ int i;
  for(i=0;i<n;i++)
    yr[i]=yi[i]=0;
  for(i=0;i<m;i++)
    yr[i]=1;
}

void SignalCos(int n,float f,float *yr,float *yi)
{  int i;
   for(i=0;i<n;i++)
      yr[i]=yi[i]=0;
   for(i=0;i<n;i++)
      yr[i]=cos(2*M_PI*f*i/n);
}

⌨️ 快捷键说明

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