加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

用DFT计算频谱

(2024-10-25 08:00:50)
标签:

dft

信号分析与处理

分类: 《信号分析与处理》课
#include "stdio.h"
#include "math.h"
#define N 1024
void dft(xr,xi,flag)
float xr[N],xi[N];
int flag;
{ float XR[N],XI[N];
  int k,n;
  float sum1,sum2,cita;
  for(k=0;k<=N-1;k++)
  { sum1=0.0;
    sum2=0.0;
    { for(n=0;n<=N-1;n++)
          cita=2.0*3.1415926/N*n*k;
            sum1=sum1+xr[n]*cos(cita)+flag*xi[n]*sin(cita);
            sum2=sum2-flag*xr[n]*sin(cita)+xi[n]*cos(cita);
        }
      XR[k]=sum1;
      XI[k]=sum2;
    }
  }
  if(flag==1)
      for(k=0;k<=N-1;k++)
        {
            xr[k]=XR[k];
            xi[k]=XI[k];
        }
  else
      for(k=0;k<=N-1;k++)
        {
            xr[k]=XR[k]/N;
            xi[k]=XI[k]/N;
        }
}

main()
{ void dft();
float xr[N],xi[N]={0},bai[N],dt,df;
  int n;
  FILE *fp1,*fp2,*fp3,*fp4;
  dt=4.0/N;
  df=1.0/(N*dt);
  fp1=fopen("xt.txt","w");
  fp2=fopen("bai.txt","w");
  fp3=fopen("Xk.txt","w");
  fp4=fopen("Xt1.txt","w");
  for(n=0;n<=N/2-1;n++)
    { xr[n]=0.0;}
  for(n=3*N/4;n<=N-1;n++)
    { xr[n]=0.0;}
  for(n=N/2;n<=3*N/4-1;n++)
    { xr[n]=1.0;}

  for(n=0;n<=N-1;n++)
    { fprintf(fp1,"%8.3f %8.3f\n",n*dt,xr[n]);}
  fclose(fp1);
  dft(xr,xi,1);

  dft(xr,xi,-1);
  for(n=0;n<=N-1;n++)
    { fprintf(fp4,"%8.3f %8.3f\n",n*dt,xr[n]);}
  fclose(fp4);
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有