一维dft是傅里叶变换里最为基础的形式,将时域信号转化为频域信号进行处理
input:一维信号序列
output: dft的结果(频率复数,实部代表频率,虚部/实部 代表相位)
未完待更:
#include<math.h>
#include<stdio.h>
#define pi 3.1415926
double a[100];
int N=0;
struct answer{
double x;
double y;
answer(){
x=0;y=0;
}
}ans[1000];
void DFT(int M){
int i,j,k=0;
double temp;
for(i=0;i<M;i++){
temp=i;
answer t;
for(j=0;j<N;j++){
t.x+=a[j]*cos(-2*pi*temp*j/M);
t.y+=a[j]*sin(-2*pi*temp*j/M);
}
ans[k++]=t;
}
}
int main(){
char c;
int i,M;
while(c!='\n'){
scanf("%lf",&a[N++]);
c=getchar();
}
printf("输入阶数(>=%d):\n",N);
scanf("%d",&M);
DFT(M);
for(i=0;i<M;i++){
//printf("%lf ",sqrt(ans[i].x*ans[i].x+ans[i].y*ans[i].y));
printf("%lf ",ans[i].x);
}
}