700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C语言实现FFT和IFFT 并与MATLAB编写显示的结果相对比 进行验证(蝶形运算)

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

时间:2019-12-01 09:39:51

相关推荐

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

本次实验中在Microsoft Visual Studio 环境下编写,实现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.0*pi*p)/(N)));//蝶形运算T=xn[k]+wnr*xn[k+B];xn[k+B]=xn[k]-wnr*xn[k+B];xn[k]=T;}}}//取共轭void conjugate (complex<double> *xn,int N){for(int i=0;i<N;i++){//real(xn[i]);complex<double> *yn;xn[i]=complex<double>(real(xn[i]),-imag(xn[i]));}}

int _tmain(int argc, _TCHAR* argv[])

{

int N;//实现序列的输入cout<<"请输入序列个数(2的整数次幂,如8)"<<endl;cin>>N;complex<double> *xn= new complex<double>[N];//复数形的动态指针complex<double> *yn= new complex<double>[N];;//保存输出值cout<<"请输入序列"<<endl;for(int i=0;i<N;i++){cin>>*(xn+i);}//FFT变换FFT(xn, N);//输出xn序列FFT变换for(int i=0;i<N;i++){cout<<*(xn+i)<<endl;}//输出xn序列FFT变换的幅值cout<<"输出模值"<<endl;for(int i=0;i<N;i++){double t=abs(xn[i]);cout<<t<<endl;}//实现IFFT//X(k)取共轭cout<<"IFFT变换:"<<endl;conjugate (xn,N);FFT(xn, N);conjugate (xn,N);for(int i=0;i<N;i++)xn[i]=xn[i]/(complex<double>)N;//complex <double>for(int i=0;i<N;i++){double t=abs(xn[i]);cout<<t<<endl;}return 0;}

MATLAB 程序 实现FFT,进行对比

N=8;%序列长为8

n=0:7;

x=[1.0 2 3 4.5 5.6 6 7 8.1];%随意输入8个数据

y=fft(x,N);% FFT变换

Y1=abs(y);%取幅值

figure(1);%窗口1,开始画图

subplot(2,1,1);

stem(n,x);title(‘实验5.4 x(n)’);%显示原序列 x(n)

subplot(2,1,2);

stem(n,Y1);title(‘实验5.4 Y1(n)’);%显示经过FFT变换后的序列

第一组数据

第二组数据

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。