基于C++任意点数的FFTIFFT(时域和频域)变换实现 下载本文

内容发布更新时间 : 2024/11/13 12:26:18星期一 下面是文章的全部内容请认真阅读。

/***************预编译文件头文件complex.h********/ #include%using namespace std;

/***********************定义复数类,重载基本运算符*********************/ class complex {

double real,image; public:

complex(){real=0;image=0;}

complex(float i,float j){real=i;image=j;} double getr(){return real;} double geti(){return image;} void show() {

if(image>=0)

cout<

cout<

void setvalue(double i=0,double j=0) {

real=abs(i)<0.0001?0:i; image=abs(j)<0.0001?0:j; }

complex operator +(complex&); complex operator-(complex&); complex operator*(complex&); complex operator /(int n); void operator+=(complex&); void operator =(complex&);

friend complex W(int m,int n, int flag); };

complex complex::operator +(complex& c)

; \

{

complex t;

t.real=real+c.real;

t.image=image+c.image; return t; }

complex complex::operator*(complex& c) {

complex t;

t.real=real*c.real-image*c.image ; t.image=real*c.image+image*c.real; return t;

}

complex complex::operator/ (int n) {

complex temp; temp.real=real/n; temp.image=image/n; return temp; }

complex complex::operator -(complex& c) {

complex t;

t.real=real-c.real;

t.image=image-c.image; return t; }

void complex::operator+=(complex&c) {

real=real+c.real;

image=image+c.image; }

void complex::operator =(complex&c) {

real=abs(c.real)<0.00001?0:(c.real);

image=abs(c.image)<0.00001?0:(c.image); }

/*******************主函数体***********************/ #include \#include\#include\#include\#define pi 3.141592657

#define N 16//需要运算的fft的点数

#define length 4//存储需要的二进制位,即length=log2(N) using namespace std;

/*********************重新排列输入序列函数****************************/ void bit_reversal(complex a[],int n) {

int bitdesicion(unsigned);//用来重现排序原来的输入信号序列应该对应变换的信号的序号 complex temp; int j;

for(int i=0;i

j=(int)bitdesicion(i);

if(i

int bitdesicion(unsigned n) {

int j=0; double k;

double result=0;