DFT's C

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#define pi 3.1415926
#define N 16//16个点

typedef struct
{
    double real,imag;
} complex;//复数结构体

complex dft_out[8020];//单个点计算k
complex dft_one[8020];//单个点计算n
double amp[N];//DFT的结果

int main(void)
{
    int n,k;
    double xn[N];
    int q;
    //制造输入序列
    for(q=0;q<N;q++)
    {
        xn[q]=q;
    }
    //将DFT前的序列输出
    printf("您将要DFT的序列为:
");
    for(q=0;q<N;q++)
    {
        printf("%f
",xn[q]);
    }

    //两级循环
    for(k=0; k<N; k++)//k循环
    {
        for(n=0; n<N; n++)//n循环
        {
            //xn=0.6*sin(n*pi*100)+0.6*sin(n*pi*1000);//原信号
            dft_one[n].real=xn[n]*cos(2*pi/N*n*k);//实部
            dft_one[n].imag=xn[n]*sin(2*pi/N*n*k);//虚部
            dft_out[k].real+=dft_one[n].real;
            dft_out[k].imag+=dft_one[n].imag;//
        }
        amp[k]=sqrt(dft_out[k].real*dft_out[k].real+dft_out[k].imag*dft_out[k].imag);//正余弦合并(根号下平方之和)
        printf("%d  %f
",k,amp[k]);
    }
    return 0;
}

 参考:https://blog.csdn.net/yga_airspace/article/details/86561371

原文地址:https://www.cnblogs.com/ajiaoa/p/14274674.html