#include

#include

#define pi (double) 3.14159265359

/*复数的定义*/

typedef struct

{

double re;

double im;

}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 + c1.im*c2.re;

return c;

}

/*快速傅立叶变换

TD为时域值,FD为频域值,power为2的幂数*/

void FFT(COMPLEX *TD, COMPLEX *FD, int power)

{

int count;

int i,j,k,bfsize,p;

double angle;

COMPLEX *W,*X1,*X2,*X;

/*计算傅立叶变换点数*/

count=1<

/*分配运算器所需存储器*/

W=(COMPLEX *)malloc(sizeof(COMPLEX)*count/2);

X1=(COMPLEX *)malloc(sizeof(COMPLEX)*count);

X2=(COMPLEX *)malloc(sizeof(COMPLEX)*count);

/*计算加权系数*/

for(i=0;i

{

angle=-i*pi*2/count;

W[i].re=cos(angle);

W[i].im=sin(angle);

}

/*将时域点写入存储器*/

memcpy(X1, TD, sizeof(COMPLEX)*count);

/*蝶形运算*/

for(k=0; k

{

for(j=0;j<1<

{

bfsize=1<

for(i=0;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<

}

}

X=X1;

X1=X2;

X2=X;

}

/*重新排序*/

for(j=0;j

{

p=0;

for(i=0;i

{

if(j&(1<

p+=1<

}

FD[j]=X1[p];

}

/*释放存储器*/

free(W);

free(X1);

free(X2);

}

/*快速傅立叶反变换,利用快速傅立叶变换

FD为频域值,TD为时域值,power为2的幂数*/

void IFFT(COMPLEX *FD, COMPLEX *TD, int power)

{

int i,count;

COMPLEX *x;

/*计算傅立叶反变换点数*/

count=1<

/*分配运算所需存储器*/

x=(COMPLEX *)malloc(sizeof(COMPLEX)*count);

/*将频域点写入存储器*/

memcpy(x,FD,sizeof(COMPLEX)*count);

/*求频域点的共轭*/

for(i=0;i

{

x[i].im=-x[i].im;

}

/*调用快速傅立叶变换*/

FFT(x,TD,power);

/*求时域点的共轭*/

for(i=0;i

{

TD[i].re/=count;

TD[i].im=-TD[i].im/count;

}

/*释放存储器*/

free(x);

}

c语言傅立叶变换,傅立叶变换与傅立叶反变换的C语言实现相关推荐

  1. 理解离散傅立叶变换(一)——傅立叶变换的由来

    理解离散傅立叶变换(一) --傅立叶变换的由来 关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶变换的描述,但是大都是些故弄玄虚的文章,太过抽象,尽是一些让人看了就望而生畏的公式的罗列,让 ...

  2. UA OPTI512R 傅立叶光学导论17 离散傅立叶变换简介

    UA OPTI512R 傅立叶光学导论17 离散傅立叶变换简介 DFT及其矩阵形式 DFT的性质 上一讲提到对连续波形f(x)f(x)f(x)做周期性采样时可以用采样函数来表示采样结果: fS(x)= ...

  3. matlab prefourier,用matlab求单位阶跃函数的傅立叶变换fourier变换

    傅立叶变换常常应用于在信号处理,其在信号处理中有着很重要的位置.下面我们就介绍一种最简单的傅立叶变换,即单位阶跃函数的傅立叶变换.然后用matlab实现单位阶跃函数的傅立叶变换. 1.傅立叶变换简介 ...

  4. Problem B: C语言习题 矩阵元素变换

    Problem B: C语言习题 矩阵元素变换 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 942  Solved: 558 [Submit][St ...

  5. 简述计算机三大变换的联系和区别 (傅里叶变换 拉普拉斯变换 z变换)

    Q:简述计算机三大变换的联系和区别 (傅里叶变换 拉普拉斯变换 z变换) (1) 傅里叶变换定义: 表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合.傅立叶变 ...

  6. dct变换java_DCT变换的基函数与基图像(图)

    DCT变换的基函数与基图像(图) 07-25栏目:技术 TAG:dct变换 dct变换 1. 图像变换的基函数 在图像的二维变换中,如果图像本身是正方形的(图像的长与宽相等),并且图像的变换核满足课可 ...

  7. 信号与系统(三):系统分析方法对比:微分方程 相量 傅里叶级数/变换 拉普拉斯变换

          特点 方法 适用范围 数学意义 物理意义 系统响应类型 输入信号类型 简化计算的方法 简化计算的原因   微分方程 全响应 可求特解的信号 - - 特解:输入决定  + 通解:系统结构.初 ...

  8. MATLAB能进行拉氏变换吗,matlab拉氏反变换

    §2.3 拉氏变换和拉氏反变换的定义 ? §2.4 典型时间函数的拉氏变换 ? §2.5 拉氏变换的性质 ? §2.6 拉氏反变换的数学方法 ? §2.7 用拉氏变换解...... 实验八 拉氏正反变 ...

  9. 【数字图像处理】-- 弄懂等距变换(刚性变换)、相似变换、仿射变换、透视变换(投影变换)

    目录 概述(Introduction) 等距变换(Euclidean Transformation) 平移变换(Translation Transformation) 旋转变换(Rotation Tr ...

  10. 特征选择降维聚类变换集群变换KL变换模式识别

    特征选择(三)-K-L变换 各个特征(各个分量)对分类来说,其重要性当然是不同的. 舍去不重要的分量,这就是降维. 聚类变换认为:重要的分量就是能让变换后类内距离小的分量. 类内距离小,意味着抱团抱得 ...

最新文章

  1. chapter3.3字典
  2. REST 在 Java 中的使用
  3. 超级实用的列表提示错误一览显示框
  4. 在Laravel中使用Middleware进行身份验证
  5. 【超时原因】1047 Student List for Course (25 分)
  6. mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...
  7. 前端学习(2968):实现路由跳转的两种方式
  8. wps 复制流程图_简单三步,用WPS轻松完成一个又大气又好看的流程图!
  9. Python——如何将不规范的英文名字转化为“首字母大写,其他字母小写”的规范名字
  10. 3.15 送货通知单
  11. 在Visual Studio里设置VA助手(VAssistX)的快捷键
  12. 【电机控制入门】——电机控制书籍推荐
  13. 单片机仿真器和烧写器的区别
  14. IT项目管理流程总结·二十三
  15. 如何使用Excel绘制图表?
  16. Markdown中给图片增加超链接
  17. 最亮的win7主题桌面
  18. AVM环视:系统搭建整体流程
  19. H.264 H.265 数据量及存储量计算
  20. 用Python 画螺旋正方形

热门文章

  1. 斗地主系列之牌型判断
  2. 斗地主系列之牌型大小比较
  3. 小程序进阶-用户消息通知
  4. Oracle数据库进行简单优化,Oracle数据库性能优化
  5. 黑、白盒测试 和 动、静态测试
  6. 重装系统显示缺少计算机所需的介质驱动程序,安装WIN7提示“缺少所需的CD/DVD驱动器设备驱动程序”的解决办法...
  7. 2017java考证_Sun认证Java程序员考试试题
  8. 记录前端通过XShell和xftp发布版本
  9. Java获取字符串长度
  10. 拿R来画画(八):面积图与堆积图