资源简介
使用VC++6.0进行编写的C语言快速傅里叶变换和逆变换(FFT和IFFT)
代码片段和文件信息
#include
#include
#include
#include “fft12_ifft12.h“
/*快速付里哀变换
TD为时域值FD为频域值power为2的幂数*/
void FFT(COMPLEX * TD COMPLEX * FD int power)
{
int count;
int ijkbfsizep;
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(X1TDsizeof(COMPLEX)*count);
/*蝶形运算*/
for(k=0;k {
for(j=0;j<1< {
bfsize=1<<(power-k);
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< }
FD[j]=X1[p];
}
/*释放存储器*/
free(W);
free(X1);
free(X2);
}
/*快速付里哀反变换利用快速付里哀变换
FD为频域值TD为时域值power为2的幂数*/
void IFFT(COMPLEX *FD COMPLEX *TD int power)
{
int icount;
COMPLEX *x;
/*计算付里哀反变换点数*/
count=1< /*分配运算所需存储器*/
x=(COMPLEX *)malloc(sizeof(COMPLEX)*count);
/*将频域点写入存储器*/
memcpy(xFDsizeof(COMPLEX)*count);
/*求频域点的共轭*/
for(i=0;i {
x[i].im=-x[i].im;
}
/*调用快速付里哀变换*/
FFT(xTDpower);
/*求时域点的共轭*/
for(i=0;i {
TD[i].re/=count;
TD[i].im=-TD[i].im/count;
}
/*释放存储器*/
free(x);
}
/*************************************************************************
*
* 函数名称:
* Fourier()
*
* 参数:
* COMPLEX* TD - 输入的时域序列
* long lWidth - 图象宽度
* long lHeight - 图象高度
* COMPLEX* FD - 输出的频域序列
*
* 返回值:
* BOOL - 成功返回TRUE,否则返回FALSE。
*
* 说明:
* 该函数进行二维快速付立叶变换。
*
************************************************************************/
void FFT2(COMPLEX * TD long lWidth long lHeight COMPLEX * FD)
{ COMPLEX *TempT *TempF;
// 循环变量
long i;
long j;
long k;
// 进行付立叶变换的宽度和高度(2的整数次方)
long w = 1;
long h = 1;
int wp = 0;
int hp = 0;
// 计算进行付立叶变换的宽度和高度(2的整数次方)
while (w < lWidth)
{
w *= 2;
wp++;
}
while (h < lHeight)
{
h *= 2;
hp++;
}
// 分配内存
TempT = (COMPLEX *)malloc(sizeof(COMPLEX)*h);
TempF = (COMPLEX *)malloc(sizeof(COMPLEX)*h);
// 对y方向进行快速付立叶变换
//rgb
/*for (i = 0; i < w * 3; i++)
{
// 抽取数据
for (j = 0; j < h; j++)
TempT[j] = TD[j * w * 3 + i];//rgb
// 一维快速傅立叶变换
FFT(TempT TempF hp);
// 保存变换结果
for (j = 0; j < h; j++)
TD[j * w * 3 + i] = TempF[j];
}
*/
//灰度
for (i = 0; i < w ; i++)
{
// 抽取数据
for (j = 0; j < h; j++)
{ TempT[j] = TD[j * w + i];}//rgb
// 一维快速傅立叶变换
FFT(TempT TempF hp);
// 保存变换结果
for (j = 0; j < h; j++)
{ TD[j * w + i
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2009-04-17 19:53 快速傅里叶变换_C语言代码\
文件 664 2009-04-17 17:38 快速傅里叶变换_C语言代码\complex_oper.h
目录 0 2009-04-17 19:50 快速傅里叶变换_C语言代码\Debug\
文件 9810 2009-04-17 19:11 快速傅里叶变换_C语言代码\Debug\fft12_ifft12.obj
文件 208959 2009-04-17 19:50 快速傅里叶变换_C语言代码\Debug\fft2_ifft2.exe
文件 209332 2009-04-17 19:50 快速傅里叶变换_C语言代码\Debug\fft2_ifft2.ilk
文件 204828 2009-04-17 19:11 快速傅里叶变换_C语言代码\Debug\fft2_ifft2.pch
文件 459776 2009-04-17 19:50 快速傅里叶变换_C语言代码\Debug\fft2_ifft2.pdb
文件 3092 2009-04-17 19:50 快速傅里叶变换_C语言代码\Debug\main.obj
文件 41984 2009-04-17 19:50 快速傅里叶变换_C语言代码\Debug\vc60.idb
文件 53248 2009-04-17 19:50 快速傅里叶变换_C语言代码\Debug\vc60.pdb
文件 6786 2009-04-17 19:11 快速傅里叶变换_C语言代码\fft12_ifft12.cpp
文件 831 2009-04-17 18:30 快速傅里叶变换_C语言代码\fft12_ifft12.h
文件 4456 2009-04-17 19:52 快速傅里叶变换_C语言代码\fft2_ifft2.dsp
文件 528 2009-04-17 17:25 快速傅里叶变换_C语言代码\fft2_ifft2.dsw
文件 41984 2009-04-17 19:53 快速傅里叶变换_C语言代码\fft2_ifft2.ncb
文件 54784 2009-04-17 19:53 快速傅里叶变换_C语言代码\fft2_ifft2.opt
文件 1314 2009-04-17 19:50 快速傅里叶变换_C语言代码\fft2_ifft2.plg
文件 361 2009-04-17 19:51 快速傅里叶变换_C语言代码\main.cpp
相关资源
- c语言实现pl0编译器的扩充
- C语言数据结构课程设计迷宫问题
- 房屋销售系统
- c语言实现图像的旋转与平移
- C语言课程设计——家庭财务管理系统
- 51单片机基于C语言双机通信
- C语言经典讲义!华科密文
- 西南交大程序设计综合实验源代码c语
- 两串口通讯C语言源代码
- openssl c语言应用
- Kruskal C语言实现
- 公司员工信息管理系统c语言实现
- C语言源代码学生成绩管理系统、图书
- C语言实现的图形化电梯仿真系统
- linux平台下C语言实现一个简单的http
- DAC8831 MSP430 c语言控制程序
- linux下的C语言POSIX正则表达式头文件和
- 基于C语言的AT指令代码实现
- C语言版的AT24C01~AT24C256的读写程序
- LDPC的C语言实现
- 后缀表达式求值c语言版
- linux环境下C语言实现图片的socket传输
- des算法的c语言实现c源代码
- C语言 地图染色 非递归 源代码
- C语言实现英汉、汉英词典功能
- 最新华为C语言编程规范
- c语言编程中点画线法
- LDPC算法C语言实现
- 学生信息管理系统c语言
- RSA加密算法c语言
评论
共有 条评论