C语言实现FFT和IFFT,并与MATLAB编写显示的结果相对比,进行验证(蝶形运算)

本次实验中在Microsoft Visual Studio 2010环境下编写,实现FFT和IFFT,并用MATLAB编写显示的结果,两者相对比,进行验证。

#include “stdafx.h”

#include
#include<math.h>
#include
const double pi=3.14159265357;

#include
using namespace std;

//FFT变换
void FFT (complex *xn,int N)
{

//实现倒序	
int k;  
int M1=(int)(log(N*1.0)/log(2.0));
complex<double> temp;
for(int j=0;j<N;j++)
{
	k=0;
	for(int i=0;i<M1;i++)
		k+=((j>>i)&1)<<(M1-1-i);
	if(k>j)
	{
		temp=xn[j];
		xn[j]=xn[k];
		xn[k]=temp;
	}
}

//三层循环

complex<double> T=0;

int M=(int)(log(N*1.0)/log(2.0));//取幂次

for(int L=1;L<=M;L++)//级循环·
{
	int B=(int)pow(2.0,L-1);
	for(int r=0;r<B;r++)//不同的旋转因子进行循环·
	{
		//int p=r*(2^(M-L));//旋转因子中的分母
		int p=r*((int)pow(2.0,M-L));
		for(int k=r;k<=N-1;k=k+(int)pow(2.0,L))//对应2^(M-L)个蝶形运算,蝶形相距2^L
		{
			//旋转因子
			std::complex<double> wnr,wnrreal,wnrimage;
			wnr=complex<double>(cos((-2.0*pi*p)/(N)),sin
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值