参考 《C》C语言实现FFT算法_杨贵安的博客-CSDN博客_c语言 fft 实现了 fft 运算;

如果要实现 ifft 运算,只需要在输入和输出时取共轭就好了,故 ifft 的 C 语言实现如下(已经通过matlab 验证)。

// n 为信号长度, n=2^k
// pr 为输入信号实部,pi 为输入信号虚部
// fr 为输出信号实部,fi 为输出信号虚部
// 函数执行后,pr 变为输出信号的模
void ifft(int n, int k,long double pr[], long double pi[], long double fr[], long double fi[])
{int it, m, is, i, j, nv, l0;long double p, q, s, vr, vi, poddr, poddi;for (i = 0; i < n; i++)    // 取共轭{pi[i] = -pi[i];}for (it = 0; it <= n - 1; it++)  //将pr[0]和pi[0]循环赋值给fr[]和fi[]{m = it;is = 0;for (i = 0; i <= k - 1; i++){j = m / 2;is = 2 * is + (m - 2 * j);m = j;}fr[it] = pr[is];fi[it] = pi[is];}pr[0] = 1.0;pi[0] = 0.0;p = 6.283185306 / (1.0 * n);pr[1] = cos(p); //将w=e^-j2pi/n用欧拉公式表示pi[1] = -sin(p);for (i = 2; i <= n - 1; i++)  //计算pr[]{p = pr[i - 1] * pr[1];q = pi[i - 1] * pi[1];s = (pr[i - 1] + pi[i - 1]) * (pr[1] + pi[1]);pr[i] = p - q; pi[i] = s - p - q;}for (it = 0; it <= n - 2; it = it + 2){vr = fr[it];vi = fi[it];fr[it] = vr + fr[it + 1];fi[it] = vi + fi[it + 1];fr[it + 1] = vr - fr[it + 1];fi[it + 1] = vi - fi[it + 1];}m = n / 2;nv = 2;for (l0 = k - 2; l0 >= 0; l0--) //蝴蝶操作{m = m / 2;nv = 2 * nv;for (it = 0; it <= (m - 1) * nv; it = it + nv)for (j = 0; j <= (nv / 2) - 1; j++){p = pr[m * j] * fr[it + j + nv / 2];q = pi[m * j] * fi[it + j + nv / 2];s = pr[m * j] + pi[m * j];s = s * (fr[it + j + nv / 2] + fi[it + j + nv / 2]);poddr = p - q;poddi = s - p - q;fr[it + j + nv / 2] = fr[it + j] - poddr;fi[it + j + nv / 2] = fi[it + j] - poddi;fr[it + j] = fr[it + j] + poddr;fi[it + j] = fi[it + j] + poddi;}}for (i = 0; i < n; i++)  // 取共轭{fr[i] = fr[i] / n;fi[i] = -fi[i] / n;}for (i = 0; i <= n - 1; i++){pr[i] = sqrt(fr[i] * fr[i] + fi[i] * fi[i]);  //幅值计算}return;
}

C语言实现 IFFT 运算相关推荐

  1. c代码实现 ifft运算_X^n+1=0上的FFT和IFFT(基2)——C语言实现

    我们一般意义上学习的FFT都是基于 的,即FFT中的单位根我们取的是 ,但是在某些情况下我们需要 上的FFT和IFFT变换. 1.直接想到的思路是把 的根替换成 的根. 解法: 的根可以使用 的2n个 ...

  2. c代码实现 ifft运算_fft算法c语言_matlab fft算法_ifft c语言

    FFT快速算法C程序_工学_高等教育_教育专区.电子信息工程综合课程设计报告书 DSP 课程设计 报告 题学 目: 院: FFT 快速算法 C 程序 计算机与信息工程学院 09 ... fft算法代码 ...

  3. c语言指针的相关运算,C语言指针的运算

    本文讨论使用指针进行的运算,最重要的运算是获取指针所引用的对象或函数.也可以比较指针,使用指针来遍历一个内存区域. 使用指针读取与修改对象 间接运算符 * 生成内存中的位置,该位置的地址存储在一个指针 ...

  4. c语言 枚举,位运算

    c语言 枚举,位运算 枚举 枚举类型的定义和枚举变量的说明 一.枚举的定义枚举类型定义的一般形式为 二.枚举变量的说明 枚举类型变量的赋值和使用 位运算 位域 一.位域的定义和位域变量的说明 二.位域 ...

  5. 单片机c语言位运算写法,单片机与嵌入式系统中C语言的位运算小记

    原标题:单片机与嵌入式系统中C语言的位运算小记 编了个PIC的项目,对里的还是蛮有感悟的,特此记录一下. 譬如说,在程序中定义了一个char类型的变量, purge_short_enable_flag ...

  6. C语言实现乘方运算---m的n次方(附完整源码)

    C语言实现乘方运算---m的n次方 int power(int m, int n) {int i = 1;int result = 1;if (n == 0)

  7. c语言集合运算有菜单,怎样用C语言实现集合运算

    [转]STL算法-合并(集合) hechao322514692017-02-24 R:集合运算 thoixy29792014-10-27 C++ STL 集合运算 weixin_42993054605 ...

  8. c语言程序设计施莹答案,C语言课件-位运算.ppt

    C语言课件-位运算.ppt C语言程序设计,信息工程学院 施莹 2019年11月,第12章 位运算,C语言是为描述系统而设计的,其功能应当具有汇编的功能 故C语言具有高级语言的的功能,也肯定低级语言的 ...

  9. 谭浩强c语言不讲位运算呢,谭浩强C语言_CHAR12位运算.DOC

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspC/C++资料 谭浩强C语言_CHAR12位运算.DOC11页 ...

最新文章

  1. C++ 对象的声明与引用
  2. 通过C#代码 压缩/解压文件
  3. 连接数process与会话session
  4. CMake 条件判断
  5. mvc中signalr实现一对一的聊天
  6. 关于Android加载的优化
  7. swiper用loop不出图片_swiper实现双向控制
  8. VS2010与.NET4系列 23.Visual Studio 2010 扩展管理器(和新的 VS2010 PowerComman
  9. 还敢乱写代码??腾讯 Code Review 规范出炉!
  10. xbox手柄适配器驱动_用于Windows的Xbox 360控制器无线接收器适配器
  11. Google新一代操作系统Fuchsia详解
  12. windows配置本地hosts
  13. MIPI换EDP芯片-LT8911EXB芯片,商显行业新选择
  14. 东软睿驰 bms车载测试工程师
  15. C语言网 1881: 蓝桥杯2017年第八届真题-Excel地址(python)
  16. java异常判断_Java异常类
  17. console.log()打印花样颜色
  18. 马克一下 Michael Moore
  19. Watershed算法
  20. mo java_MO-JAVA-2.1学习--1

热门文章

  1. funny_upload
  2. 举着一片片小小柔柔的叶子
  3. 电气系统中防雷接地保护的综合解决方案
  4. 增设区域分销商:APC渠道变革拒绝“扁平化”
  5. Placement service – placement安装(wallaby-allinone)
  6. arch nvidia驱动安装记录
  7. 一步一步做高性能服务器(C++) -- Day 0
  8. 浏览器导出ssl证书导入jdk
  9. 水果店促销方案,水果店开业怎么搞促销
  10. 程序员的自我修养--链接、装载与库笔记:第一章温故而知新