2015-06-19 310 views
1

我想用偶數偶數對稱對複數輸入數組進行1D IFFT變換,其中z(1)z(N/2+1)是真實的。該陣列的總大小爲N=256。如果我準備IFFT像下面這樣:使用MKL從複數到實數IFFT

stat = DftiCreateDescriptor(desc_handle, DFTI_DOUBLE, DFTI_REAL, 1,256) 
stat = DftiSetValue(desc_handle, DFTI_CONJUGATE_EVEN_STORAGE, DFTI_COMPLEX_COMPLEX) 

stat = DftiSetValue(desc_handle, DFTI_PLACEMENT, DFTI_NOT_INPLACE) 

stat = DftiComputeBackward(desc_handle, X_in, M_out) 

...其中X_in具有上面甚至描述的共軛對稱。這意味着,M_out預計是在這個意義上,如果一個數學實陣列:

real(dp) :: M_out(N+2) 

然後與預期實際Fortran數組具有等於零的所有其他元素。

complex(dp) :: M_out(N/2) 

則期望複雜FORTRAN陣列將具有N/2大小與虛部爲零。

但是,我得到的結果是不真實的做完上述。這就像例程不理解輸入複數fortran陣列不具有共軛偶對稱性。這是爲什麼?是否需要添加其他首選項參數以確保正確讀取輸入的結構?

+0

很好的問題,達卡洛!雖然我不知道答案,但我對格式進行了一些編輯,以幫助保持其可讀性。如果您點擊「編輯」,您將能夠看到我所做的更改,並且可以在您提出更多問題或提供答案時自行完成。 –

+0

非常感謝您的更改。對不起,我是新的論壇,所以我不知道如何做到這一切。我會學習它們,這樣我可以使我的問題更具可讀性。再次感謝!! – dakarot

+0

結果如何呢?對於哪個輸入?嘗試製作一個簡單的測試程序,我們可以嘗試(並使用較小的矢量)。 –

回答

0

在此示例中,正向域是真實的,即使存在複雜存儲,反向域也是共軛的。因此,MKL期望X_in的類型爲Complex [],並且M_out的類型爲Real []。結果是真實的。

我懷疑你是否提供了一個複雜的數組作爲M_out。然後這個數組被解釋爲Real []幷包含反向變換的實際結果。對於虛部沒有插入零。