fft1d.c和fft1d.h见https://download.csdn.net/download/weixin_43216875/12009644
1 fft1d.h
#ifndef FFT1D_H
#define FFT1D_H#include "math.h"#define PI 3.1415926535897932384626433832795028841971typedef struct complex //复数类型
{float real; //实部float imag; //虚部
}complex;void conjugate_complex(int n,complex in[],complex out[]);
void c_plus(complex a,complex b,complex *c);//复数加
void c_mul(complex a,complex b,complex *c) ;//复数乘
void c_sub(complex a,complex b,complex *c); //复数减法
void c_div(complex a,complex b,complex *c); //复数除法
void fft(int N,complex f[]);//傅立叶变换 输出也存在数组f中
void ifft(int N,complex f[]); // 傅里叶逆变换
void c_abs(complex f[],float out[],int n);//复数数组取模#endif // FFT1D_H
2 main.cpp
#include <iostream>
using namespace std;#include "fft1d.h"
#define N 4 //N取值为2^n
int main()
{complex a[N];float b[N];for(int i=0;i<N;i++){a[i].real = i+1;a[i].imag = 0;}cout << "data:" << endl;for(int i=0;i<N;i++)cout << a[i].real << endl;fft(N,a);cout << endl << "fft:" << endl;for(int i=0;i<N;i++)cout << a[i].real << "+" << a[i].imag << "j" << endl;ifft(N,a);c_abs(a,b,N);cout << endl << "ifft:" << endl;for(int i=0;i<N;i++)cout << b[i] << endl;return 0;
}
3 与Matlab对比
3.1 Matlab运行结果

3.2 C语言运行结果
