c代码实现 ifft运算_二维FFT,IFFT,c语言实现 | 学步园

学习DIP第6天

网上关于FFT的实例有很多,具体也可以参照上一篇,其实Matlab,OpenCV都可以很轻松的实现相关操作,但是对于学习其原理,还是自己操作下比较好。

二维FFT的是实现方法是先对行做FFT将结果放回该行,然后再对列做FFT结果放在该列,计算完所有的列以后,结果就是响应的二维FFT。

本次所有操作都是对基2的数据进行的操作。

二维IFFT网上很少见到,操作过程是:上述的傅里叶变换结果,先对每列做一维IFFT,结果放在该列,取复数矩阵其共轭,然后再按照每行做一维IFFT,其结果放在该行,即为最终结果。上代码:

1D.c:

//

// 1D.c

// Fourer

//

// Created by 谭升 on 14/11/25.

// Copyright (c) 2014年 谭升. All rights reserved.

//

#include "Fourer.h"

int isBase2(int size_n){

int k=size_n;

int z=0;

while (k/=2) {

z++;

}

k=z;

if(size_n!=(1<

return -1;

else

return k;

}

//复数基本运算

///

void Add_Complex(Complex * src1,Complex *src2,Complex *dst){

dst->imagin=src1->imagin+src2->imagin;

dst->real=src1->real+src2->real;

}

void Sub_Complex(Complex * src1,Complex *src2,Complex *dst){

dst->imagin=src1->imagin-src2->imagin;

dst->real=src1->real-src2->real;

}

void Multy_Complex(Complex * src1,Complex *src2,Complex *dst){

double r1=0.0,r2=0.0;

double i1=0.0,i2=0.0;

r1=src1->real;

r2=src2->real;

i1=src1->imagin;

i2=src2->imagin;

dst->imagin=r1*i2+r2*i1;

dst->real=r1*r2-i1*i2;

}

void Copy_Complex(Complex * src,Complex *dst){

dst->real=src->real;

dst->imagin=src->imagin;

}

void Show_Complex(Complex * src,int size_n){

if(size_n==1){

if(src->imagin>=0.0)

printf("%lf+%lfj ",src->real,src->imagin);

else

printf("%lf%lfj ",src->real,src->imagin);

}

else if(size_n>1){

for(int i=0;i

if(src[i].imagin>=0.0){

printf("%lf+%lfj ",src[i].real,src[i].imagin);

}

else

printf("%lf%lfj ",src[i].real,src[i].imagin);

}

}

//计算WN

///

void getWN(double n,double si

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值