fucks 发表于 2020-5-19 20:06:54

精简的fft源码

void fft(const double* src_x, const double* src_y, double* dst_x, double* dst_y, int k) {
    int i, n;
    double temp, temp_x, temp_y;
    double* buffer;
    if (0 == k) {
      *dst_x = *src_x;
      *dst_y = *src_y;
      return;
    }
    n = 1 << (k - 1);
    buffer = (double*)malloc(4 * n * sizeof(double));
    for (i = 0; i < n; i++) {
      buffer = src_x;
      buffer = src_y;
      buffer = src_x;
      buffer = src_y;
    }
    fft((const double*)buffer + 2 * n, (const double*)buffer + 3 * n, dst_x, dst_y, k - 1);
    fft((const double*)buffer, (const double*)buffer + n, (double*)buffer + 2 * n, (double*)buffer + 3 * n, k - 1);
    for (i = 0; i < n; i++) {
      temp = i * M_PI / n;
      temp_x = cos(temp);
      temp_y = sin(temp);
      buffer = dst_y * temp_y + dst_x * temp_x;
      buffer = dst_y * temp_x - dst_x * temp_y;
      dst_x = buffer + buffer;
      dst_y = buffer + buffer;
      dst_x = buffer - buffer;
      dst_y = buffer - buffer;
    }
    free(buffer);
}


fucks 发表于 2020-5-19 20:09:12

参数说明:
const double* src_x, 输入数据实部的指针
const double* src_y, 输入数据虚部的指针
double* dst_x, 输出数据实部的指针
double* dst_y, 输出数据虚部的指针
int k, FFT点数,比如1024点,k=10,4096点,k=12

fucks 发表于 2020-5-19 20:11:08

由于使用了malloc和free函数,单片机上慎用!除非你自实现malloc和free函数功能

xad1974 发表于 2020-5-20 07:54:01

大神也跑过来了

听我瞎扯蛋 发表于 2020-5-20 08:34:27

看不懂也先顶一下

fucks 发表于 2020-5-20 11:01:08

xad1974 发表于 2020-5-20 07:54
大神也跑过来了

受疫情影响,没钱吃饭,只好去食堂蹭不花钱的紫菜蛋汤嘛

sinmin 发表于 2020-5-20 11:03:48

好,收藏了                           

a123123 发表于 2020-5-20 22:36:09

您就是那个数学大牛!
:handshake

fire 发表于 2020-5-21 12:11:51

cool
页: [1]
查看完整版本: 精简的fft源码