野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 110|回复: 8

精简的fft源码

[复制链接]
发表于 2020-5-19 20:06:54 | 显示全部楼层 |阅读模式
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[i] = src_x[i * 2];
        buffer[i + n] = src_y[i * 2];
        buffer[i + 2 * n] = src_x[i * 2 + 1];
        buffer[i + 3 * n] = src_y[i * 2 + 1];
    }
    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[i] = dst_y[i] * temp_y + dst_x[i] * temp_x;
        buffer[i + n] = dst_y[i] * temp_x - dst_x[i] * temp_y;
        dst_x[i] = buffer[i + 2 * n] + buffer[i];
        dst_y[i] = buffer[i + 3 * n] + buffer[i + n];
        dst_x[i + n] = buffer[i + 2 * n] - buffer[i];
        dst_y[i + n] = buffer[i + 3 * n] - buffer[i + n];
    }
    free(buffer);
}



回复

使用道具 举报

 楼主| 发表于 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
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 20:11:08 | 显示全部楼层
由于使用了malloc和free函数,单片机上慎用!除非你自实现malloc和free函数功能
回复 支持 反对

使用道具 举报

发表于 2020-5-20 07:54:01 | 显示全部楼层
大神也跑过来了
回复 支持 反对

使用道具 举报

发表于 2020-5-20 08:34:27 | 显示全部楼层
看不懂也先顶一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-20 11:01:08 | 显示全部楼层
xad1974 发表于 2020-5-20 07:54
大神也跑过来了

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

使用道具 举报

发表于 2020-5-20 11:03:48 | 显示全部楼层
好,收藏了                           
回复 支持 反对

使用道具 举报

发表于 2020-5-20 22:36:09 | 显示全部楼层
您就是那个数学大牛!
回复 支持 反对

使用道具 举报

发表于 2020-5-21 12:11:51 | 显示全部楼层
cool
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|联系站长|手机版|站点地图|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号-2 ) 大学生ARM嵌入式2群

GMT+8, 2020-5-29 02:45 , Processed in 0.198173 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表