c语言傅立叶变换,傅立叶变换与傅立叶反变换的C语言实现
#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语言实现相关推荐
- 理解离散傅立叶变换(一)——傅立叶变换的由来
理解离散傅立叶变换(一) --傅立叶变换的由来 关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶变换的描述,但是大都是些故弄玄虚的文章,太过抽象,尽是一些让人看了就望而生畏的公式的罗列,让 ...
- UA OPTI512R 傅立叶光学导论17 离散傅立叶变换简介
UA OPTI512R 傅立叶光学导论17 离散傅立叶变换简介 DFT及其矩阵形式 DFT的性质 上一讲提到对连续波形f(x)f(x)f(x)做周期性采样时可以用采样函数来表示采样结果: fS(x)= ...
- matlab prefourier,用matlab求单位阶跃函数的傅立叶变换fourier变换
傅立叶变换常常应用于在信号处理,其在信号处理中有着很重要的位置.下面我们就介绍一种最简单的傅立叶变换,即单位阶跃函数的傅立叶变换.然后用matlab实现单位阶跃函数的傅立叶变换. 1.傅立叶变换简介 ...
- Problem B: C语言习题 矩阵元素变换
Problem B: C语言习题 矩阵元素变换 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 942 Solved: 558 [Submit][St ...
- 简述计算机三大变换的联系和区别 (傅里叶变换 拉普拉斯变换 z变换)
Q:简述计算机三大变换的联系和区别 (傅里叶变换 拉普拉斯变换 z变换) (1) 傅里叶变换定义: 表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合.傅立叶变 ...
- dct变换java_DCT变换的基函数与基图像(图)
DCT变换的基函数与基图像(图) 07-25栏目:技术 TAG:dct变换 dct变换 1. 图像变换的基函数 在图像的二维变换中,如果图像本身是正方形的(图像的长与宽相等),并且图像的变换核满足课可 ...
- 信号与系统(三):系统分析方法对比:微分方程 相量 傅里叶级数/变换 拉普拉斯变换
特点 方法 适用范围 数学意义 物理意义 系统响应类型 输入信号类型 简化计算的方法 简化计算的原因 微分方程 全响应 可求特解的信号 - - 特解:输入决定 + 通解:系统结构.初 ...
- MATLAB能进行拉氏变换吗,matlab拉氏反变换
§2.3 拉氏变换和拉氏反变换的定义 ? §2.4 典型时间函数的拉氏变换 ? §2.5 拉氏变换的性质 ? §2.6 拉氏反变换的数学方法 ? §2.7 用拉氏变换解...... 实验八 拉氏正反变 ...
- 【数字图像处理】-- 弄懂等距变换(刚性变换)、相似变换、仿射变换、透视变换(投影变换)
目录 概述(Introduction) 等距变换(Euclidean Transformation) 平移变换(Translation Transformation) 旋转变换(Rotation Tr ...
- 特征选择降维聚类变换集群变换KL变换模式识别
特征选择(三)-K-L变换 各个特征(各个分量)对分类来说,其重要性当然是不同的. 舍去不重要的分量,这就是降维. 聚类变换认为:重要的分量就是能让变换后类内距离小的分量. 类内距离小,意味着抱团抱得 ...
最新文章
- chapter3.3字典
- REST 在 Java 中的使用
- 超级实用的列表提示错误一览显示框
- 在Laravel中使用Middleware进行身份验证
- 【超时原因】1047 Student List for Course (25 分)
- mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...
- 前端学习(2968):实现路由跳转的两种方式
- wps 复制流程图_简单三步,用WPS轻松完成一个又大气又好看的流程图!
- Python——如何将不规范的英文名字转化为“首字母大写,其他字母小写”的规范名字
- 3.15	送货通知单
- 在Visual Studio里设置VA助手(VAssistX)的快捷键
- 【电机控制入门】——电机控制书籍推荐
- 单片机仿真器和烧写器的区别
- IT项目管理流程总结·二十三
- 如何使用Excel绘制图表?
- Markdown中给图片增加超链接
- 最亮的win7主题桌面
- AVM环视:系统搭建整体流程
- H.264 H.265 数据量及存储量计算
- 用Python 画螺旋正方形