野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7255|回复: 8

精简的fft源码

[复制链接]
发表于 2020-5-19 20:06:54 | 显示全部楼层 |阅读模式
  1. void fft(const double* src_x, const double* src_y, double* dst_x, double* dst_y, int k) {
  2.     int i, n;
  3.     double temp, temp_x, temp_y;
  4.     double* buffer;
  5.     if (0 == k) {
  6.         *dst_x = *src_x;
  7.         *dst_y = *src_y;
  8.         return;
  9.     }
  10.     n = 1 << (k - 1);
  11.     buffer = (double*)malloc(4 * n * sizeof(double));
  12.     for (i = 0; i < n; i++) {
  13.         buffer[i] = src_x[i * 2];
  14.         buffer[i + n] = src_y[i * 2];
  15.         buffer[i + 2 * n] = src_x[i * 2 + 1];
  16.         buffer[i + 3 * n] = src_y[i * 2 + 1];
  17.     }
  18.     fft((const double*)buffer + 2 * n, (const double*)buffer + 3 * n, dst_x, dst_y, k - 1);
  19.     fft((const double*)buffer, (const double*)buffer + n, (double*)buffer + 2 * n, (double*)buffer + 3 * n, k - 1);
  20.     for (i = 0; i < n; i++) {
  21.         temp = i * M_PI / n;
  22.         temp_x = cos(temp);
  23.         temp_y = sin(temp);
  24.         buffer[i] = dst_y[i] * temp_y + dst_x[i] * temp_x;
  25.         buffer[i + n] = dst_y[i] * temp_x - dst_x[i] * temp_y;
  26.         dst_x[i] = buffer[i + 2 * n] + buffer[i];
  27.         dst_y[i] = buffer[i + 3 * n] + buffer[i + n];
  28.         dst_x[i + n] = buffer[i + 2 * n] - buffer[i];
  29.         dst_y[i + n] = buffer[i + 3 * n] - buffer[i + n];
  30.     }
  31.     free(buffer);
  32. }
复制代码



回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 17:04 , Processed in 0.039194 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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