C语言实现FFT算法

C语言实现FFT算法

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.1415926535897932384626433832795028841971

typedef 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语言运行结果

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值