C++遞歸FFT快速傅里葉變換算法


在這個專欄中,我們將探討如何使用C++實現(xiàn)遞歸FFT(快速傅里葉變換)算法,一個在信號處理和數(shù)學(xué)計算中廣泛使用的重要技術(shù)。我們將分別介紹三個文件:myFFT.cpp
,my_fft.h
和 my_fft.cpp
,其中 my_fft
類實現(xiàn)了遞歸FFT算法的關(guān)鍵步驟。
這個示例程序是我在學(xué)習(xí)FFT的過程中嘗試編寫的,可能寫的不好,但是很好的提現(xiàn)了FFT的思想。這是我學(xué)習(xí)用的視頻,對FFT的數(shù)學(xué)原理講的很通透:

1. 文件:my_fft.h
my_fft.h
是實現(xiàn)遞歸FFT算法的核心文件,它包含了 my_fft
類的聲明和函數(shù)原型。該類用于計算FFT,以及獲取復(fù)數(shù)的幅度和相位。以下是 my_fft.h
文件的主要內(nèi)容:
在 my_fft.h
中,我們定義了 my_fft
類,其中包含了構(gòu)造函數(shù)、獲取π的方法、FFT計算方法、復(fù)數(shù)幅度計算方法和復(fù)數(shù)相位計算方法等。
2. 文件:my_fft.cpp
在 my_fft.cpp
中,我們實現(xiàn)了 my_fft
類中的各個函數(shù)。這個文件的主要內(nèi)容如下:
my_fft::fft(double* input, complex* output, complex* W, int size, int count)
這是遞歸FFT算法的實現(xiàn)函數(shù)。它根據(jù)傳入的序列長度 size
進行奇偶分解,并在遞歸的過程中計算FFT結(jié)果。當序列長度達到一定小的值時,直接進行分解計算,不再遞歸。
3. 文件:main.cpp
main.cpp
文件是用于演示遞歸FFT算法的文件。在這里,我們生成了一個信號,對它進行FFT運算,并展示了輸出的復(fù)數(shù)、頻域幅度和相位。以下是 main.cpp
的核心內(nèi)容:
在 main.cpp
中,我們首先初始化參數(shù)和生成信號,通過 my_fft::FFT_SIZE
枚舉類型選擇要進行FFT計算的序列長度。
然后,我們創(chuàng)建了兩個緩沖區(qū),一個用于存儲輸入序列,另一個用于存儲FFT計算的輸出序列,使用余弦函數(shù)生成一個信號,并在控制臺輸出這個生成的信號。
最后調(diào)用 my_fft
類的 fft
方法進行FFT運算,并將輸出打印出來。輸出FFT運算得到的復(fù)數(shù)結(jié)果,包括實部和虛部。我們將復(fù)數(shù)結(jié)果轉(zhuǎn)換為頻域的幅度和相位,并打印。
這是輸出結(jié)果:
