簡體   English   中英

2D復數FFT實現

[英]2D complex FFT implementation

我正在使用Dev-C ++在C中工作

我已經創建了一個二維復數數組,如下所示:

#include<complex.h>

double complex **x;

x = malloc(Nx * sizeof *X);

if (x)
{
for (i = 0; i < Nx; i++) 
{
x[i] = malloc(Nx * sizeof *x[i]);

}   

並用數據填充,我用真實和虛構的部分進行了繪制,這些部分已經過驗證和正確。

我只想對此數據執行FFT(希望該函數僅接受數組,數組的維數和fft方向),這將對數組進行轉換並能夠執行逆運算。

我已經看過FFTW之類的庫,但是盡管我努力理解,但實現仍然令我難以理解。

有人可以為我解釋最好的方法嗎? 謝謝

從頭開始,您需要獲取系統的FFTW庫。 根據您正在運行的代碼,您可能必須從源代碼中獲取代碼,如下所示:

http://www.fftw.org/fftw3_doc/Installation-and-Customization.html

配置,制造,制造安裝過程可能需要一段時間。

完成此操作后,您需要使用以下命令將庫包含在代碼中

    #include<fftw3.h>

這可能會根據您使用的版本而改變。 要編譯代碼,您將需要使用-lfftw3鏈接庫。

現在要實際包括FFT代碼。 這可以分為大約三個步驟:規划,填充輸入數組和執行。

二維復數FFT的規划階段可以在此處顯示: http : //www.fftw.org/fftw3_doc/Complex-Multi_002dDimensional-DFTs.html#Complex-Multi_002dDimensional-DFTs除非規划FFT變化。

第二階段要求您使用提供的FFTW陣列。 前一個鏈接中顯示了一個用於格式化數組的有用鏈接。

第三階段就像調用“ fftw_execute”例程一樣簡單。 一旦調用此方法,輸出數組將被FFT的輸出填充。

我最終通過制作單獨的實數和虛數2D數組解決了這個問題。 然后編寫函數以獲取數組,創建雙倍長度的一維數組,其中實數和虛數值交替表示行和列。 通過連續對每一行和每一列執行轉換,這使我可以使用簡單的代碼內FFT four1函數(在C中的數字食譜中提供)。

不需要庫就可以完成這項工作!

只需記住在每次轉換后都包括標准化即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM