初步了解快速傅里叶变换、反变换的处理过程。

C++语言编写

#include <math.h>  //编写头文件,还可采用#include "***"方式编写头文件#include <malloc.h>//添加需要使用到的头文件#define pi (double)3.14159265359 //定义所需要的参数变量typedef struct{double re;//定义double类型的变量double im;}COMPLEX;//COMPLEX是一个类型,可以用来定义变量//计算权重COMPLEX Add(COMPLEX c1, COMPLEX c2)//加法函数{COMPLEX c;c.re=c1.re+c2.re;c.im=c1.im+c2.im;return c;}COMPLEX Sub(COMPLEX c1, COMPLEX c2)//减法程序{COMPLEX c;c.re=c1.re-c2.re;c.im=c1.im-c2.im;return c;}COMPLEX Mul(COMPLEX c1, COMPLEX c2)//乘法程序{COMPLEX c;c.re=c1.re*c2.re-c1.im*c2.im;c.im=c1.re*c2.im+c2.re*c1.im;return c;}void FFT(COMPLEX * TD, COMPLEX * FD, int power)//快速傅里叶变换{//COMPLEX * TD: 指向时域数组的指针
//COMPLEX * FD:  指向频域数组的指针
//int power:    2的幂数,即迭代次数int count;//傅里叶变换点数int i,j,k,bfsize,p;//循环变量i,j,k和中间变量bfsize,pdouble angle;//角度COMPLEX *W,*X1,*X2,*X;count=1<<power;//计算傅里叶变换点数W=(COMPLEX *)malloc(sizeof(COMPLEX)*count/2);//分配运算所需要的存储器X1=(COMPLEX *)malloc(sizeof(COMPLEX)*count);X2=(COMPLEX *)malloc(sizeof(COMPLEX)*count);for(i=0;i<count/2;i++)//计算加权系数{angle=-i*pi*2/count;W[i].re=cos(angle);W[i].im=sin(angle);}memcpy(X1,TD,sizeof(COMPLEX)*count);//将时域点写入x1for(k=0;k<power;k++)//采用蝶形算法惊醒快速傅里叶变换{for(j=0;j<1<<k;j++){bfsize=1<<power-k;for(i=0;i<bfsize/2;i++){p=j*bfsize;X2[i+p]=Add(X1[i+p],X1[i+p+bfsize/2]);X2[i+p+bfsize/2]=Mul(Sub(X1[i+p],X1[i+p+bfsize/2]),W[i*(1<<k)]);}}X=X1;X1=X2;X2=X;}for(j=0;j<count;j++)//重新排序{p=0;for(i=0;i<power;i++){if (j&(1<<i)) p+=1<<power-i-1;}FD[j]=X1[p];}free(W);//释放内存free(X1);free(X2);}void IFFT(COMPLEX *FD, COMPLEX *TD, int power)//快速傅立叶反变换//COMPLEX *TD: 指向时域数组的指针
//COMPLEX *FD:  指向频域数组的指针
//int power:    2的幂数,即迭代次数{int i,count;//定义循环变量和傅里叶变换点数COMPLEX *x;count=1<<power;//计算傅里叶变换点数x=(COMPLEX *)malloc(sizeof(COMPLEX)*count);//分配运算所需要的存储器memcpy(x,FD,sizeof(COMPLEX)*count);    //将频域点写入xfor(i=0;i<count;i++)   //求共轭{x[i].im=-x[i].im;}FFT(x,TD,power);  //调用快速傅里叶变换函数for(i=0;i<count;i++)   //求时域点共轭{TD[i].re/=count;TD[i].im=-TD[i].im/count;}free(x);  //释放内存}

c++快速傅里叶变换、反变换(FFT、IFFT)相关推荐

  1. 快速傅里叶变换(FFT)和逆快速傅里叶变换(IFFT)

    多项式表示法与卷积 多项式有两种表示方法 系数表示法 点值表示法 系数表示法 就是最普通的表示方法,如 f(x)=a0x0+a1x1+a2x2+......+an−1xn−1f(x) = a_0x^0 ...

  2. 快速傅里叶变换(FFT)的C#实现及详细注释

    快速傅里叶变换(FFT)的C#实现及详细注释 ----------------------------------------------------------------------------- ...

  3. 快速傅里叶变换 (FFT)基础

    参考博文 频谱分析是一种将复杂信号分解为较简单信号的技术. 首先来很清楚几个概念: FT(Fourier Transformation): 傅里叶变换.其时域信号.频域信号都是连续的. DTFT(Di ...

  4. 【学习笔记】超简单的快速傅里叶变换(FFT)(含全套证明)

    整理的算法模板合集: ACM模板 目录 一.概念概述 二.前置知识 1. 多项式 2. 复数 4. 欧拉公式证明 3. 复数的单位根 / 单位向量 三.FFT 算法概述 四.离散傅里叶变换(DFT) ...

  5. 快速傅里叶变换_计算物理基础:第八章-快速傅里叶变换(FFT)

    参考北京师范大学的<计算物理基础> 第八章-快速傅里叶变换 计算物理基础_中国大学MOOC(慕课)​www.icourse163.org 1.快速傅里叶变换 1.1 离散傅里叶变换及其变换 ...

  6. 数字信号处理知识点总结(四):快速傅里叶变换(FFT)

    本篇文章主要介绍快速傅里叶变换(FFT)的优化原理,基-2FFT算法的推导.实现及用FFT实现的线性卷积. 主要参考知乎[精品讲义]-快速傅里叶变换(Fast Fourier Transformati ...

  7. 卷积和快速傅里叶变换(FFT)的实现

    卷积运算 卷积可以说是图像处理中最基本的操作.线性滤波通过不同的卷积核,可以产生很多不同的效果.假如有一个要处理的二维图像,通过二维的滤波矩阵(卷积核),对于图像的每一个像素点,计算它的领域像素和滤波 ...

  8. 快速傅里叶变换(FFT)详解

    快速傅里叶变换(FFT)详解 (这是我第一次写博,不喜勿喷...) 关于FFT已经听闻已久了,这次终于有机会在Function2的介绍下来了解一下FFT了. 快速傅里叶变换(Fast Fourier ...

  9. 11.频域里的卷积——介绍,傅里叶变换和卷积,快速傅里叶变换(FFT)_1

    目录 介绍 傅里叶变换和卷积 FFT 介绍 我们将继续讨论频率分析以及如何用频率分量的概念来研究图像.如果你还记得上次我们讲过的基于频率的图像分解的概念.我们通过给你们看这张照片来回忆它(如图).这是 ...

  10. DIT和DIF实现快速傅里叶变换的FFT

    DIT和DIF实现快速傅里叶变换的FFT 数字信号处理课程老师要求做的一个小程序,在此分享~ %***************基2的DIF&DIT-FFT算法***************** ...

最新文章

  1. 8086CPU的出栈(pop)和入栈(push) 都是以字为单位进行的
  2. scp: /usr/java: Permission denied
  3. 大牛推荐的15本学习数据分析挖掘的好书
  4. SAP CRM WebClient UI和Hybris Commerce的懒加载机制
  5. ac 梦幻布丁 启发式合并
  6. jmxtrans安装使用
  7. 跨站脚本攻击之反射型XSS漏洞【转载】
  8. ActionErrors和ActionError
  9. 高德地图如何取消订单_一文教你如何爬取高德地图
  10. Linux查看最后一页日志,linux常用查看文件或日志命令
  11. 知识点二十五:启发式搜索算法——A*算法
  12. 长江存储一笔高额投资,让SK海力士开始钻研我国专利法
  13. 详谈GoLang的panic和error
  14. 反问疑问_反问疑问句
  15. html聊天室ui,震惊!这个H5居然是在线聊天室!(内附完整教程)
  16. Xilinx基于PCIE的部分重配置实现(一)
  17. python爬取武汉二手房房价
  18. 飞机大战游戏制作思路
  19. 解决input输入框与select下拉框水平不对齐
  20. 室内定位技术(四)——产品研发进度

热门文章

  1. 奇摩,你来大陆干什么?
  2. 基于PowerBuilder的病案统计系统的设计与实现
  3. php除数不能为零,0为什么不能做除数(为什么0不能作为除数)
  4. 【C语言】十进制转换二进制
  5. win7由于无法确定计算机,nvme固态硬盘安装win7教程((解决硬盘无法识别)
  6. MOOC大奖赛现场统分(10分)
  7. 联想微型计算机装Win10,联想小新 潮5000重装win10系统教程
  8. Windows 利用IIS搭建需要身份验证登录的FTP站点
  9. Matlab 工作区变量和 MAT 文件
  10. multsim 函数发生器的使用