用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);
}
#include "math.h"
#define N 1024
void dft(xr,xi,flag)
float xr[N],xi[N];
int flag;
{ float XR[N],XI[N];
}
main()
{ void dft();
float xr[N],xi[N]={0},bai[N],dt,df;
}
前一篇:院工会组织教职工到诸城参观、采摘
后一篇:用DFT计算雷克子波的频谱

加载中…