[英]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.