快速傅利葉變換的基2FFT演算法的C 實現

2021-05-24 04:47:04 字數 2937 閱讀 8032

快速傅利葉變換的基2fft演算法的c++實現

2011-01-19 05:26

快速傅利葉變換的基本原理由於公式不好顯示請讀者參考其它文章或書籍,本文重點給出了時域抽取法fft的c++實現。

下面是演算法的流程圖

倒序的流程圖

c++實現**:

1. fft.h

#pragma once

#ifndef fft_h

#define fft_h

#include

#include

using namespace std;

#define pi 3.141592

class fft

;#endif

2.fft.cpp

#include "./fft.h"

fft::fft()

/////倒序實現

//xr實部,xi虛部,n為2的冪

///void fft::changeorder(double *xr,double *xi,int n)

k=lh;

while(j>=k)

j=j+k;}}

////複數fft

//ctxr和ctxi的長度為len

//cfxr和cfxi的長度為2的冪

//void fft::fft_1d(double *ctxr,double *ctxi,double *cfxr,double *cfxi,int len)

memcpy(cfxr,ctxr,sizeof(double)*len);

memcpy(cfxi,ctxi,sizeof(double)*len);

for(l=len;l

changeorder(cfxr,cfxi,n); //倒序

for(l=1;l<=m;l++)}}

delete rcos;

delete isin;}/

//實數fft

//ctxr的長度為len

//cfxr和cfxi的長度為2的冪

void fft::rfft_1d(double *ctxr,double *cfxr,double *cfxi,int len)

double* txr=new double[(len+1)/2];

double* txi=new double[(len+1)/2];

for(int i=0;i

if(len%2==1)

fft_1d(txr,txi,cfxr,cfxi,(len+1)/2);

double* x1r=new double[n/2];

double* x1i=new double[n/2];

double* x2r=new double[n/2];

double* x2i=new double[n/2];

x1r[0]=cfxr[0];

x1i[0]=0;

x2r[0]=cfxi[0];

x2i[0]=0;

for(int k=1;k

double rkb,ikb;

for(i=0;i

delete txr;

delete txi;

delete x1r;

delete x1i;

delete x2r;

delete x2i;

delete rcos;

delete isin;

}

/////複數ifft

//cfxr和cfxi的長度為n(2的冪)

//ctxr和ctxi的長度為len

///void fft::ifft_1d(double *cfxr,double *cfxi,double *ctxr,double *ctxi,int len)

delete txr;

delete txi;}

////實數ifft

//cfxr和cfxi的長度為n(2的冪)

//ctxr的長度為len

//void fft::rifft_1d(double *cfxr,double *cfxi,double *ctxr,int len)

delete txr;

delete txi;}

fft::~fft(void)

3.test.cpp

#include

#include "fft.h"

using namespace std;

void main()

; //實部

double xi[10]=; //虛部

double *cxr,*cxi;

cxr=new double[16];

cxi=new double[16];

fft f;

f.rfft_1d(xr,cxr,cxi,10);

for(int i=0;i<16;i++)

cout<

double *fxr,*fxi;

fxr=new double[10];

fxi=new double[10];

f.rifft_1d(cxr,cxi,fxr,10);

for(i=0;i<10;i++)

delete fxr;

delete fxi;

delete cxr;

delete cxi;}

快速傅利葉變換FFT

fft的作用就不多說了,搞訊號處理的人都會用上。fft的由來 傅利葉變換ft 離散傅利葉變換dft 快速傅利葉變換fft。學習資料 1 陳後金的 數字訊號處理 裡面深入淺出,該有的公式都有,程式設計思想也有。2 一篇系統講述傅利葉變換的帖子 3 學生對fft的理解 4 工程人員對fft的簡單明瞭的總...

快速傅利葉變換 FFT

bzoj 2179 fft快速傅利葉 果題 bzoj2194 請計算c k sigma a i b i k 其中 k i n 並且有 n 10 5。a,b中的元素均為小於等於100的非負整數。注意到i 和 i k有奇妙的聯絡 不妨嘗試把b翻轉 然後就變成卷積了。貼個模板 include define...

快速傅利葉變換 FFT

首先說一下我用fft做什麼,我要做的是多項式乘法,或者說,加速多項式乘法。考慮多項式a x j 0n 1aj xj,它一共有 n 項,我們稱它的次數界為 n。假設我們有兩個次數界為 n 的多項式a x 和b x 要求它們的和是非常簡單的,只需要將對應的係數相加,複雜度為o n 如果要求他們的積,則需...