2011-12-30 10 views
12

मैं मैटलैब टूलबॉक्स में से एक को फिर से कार्यान्वित करने की कोशिश कर रहा हूं। वे वहां पर एफएफटी का उपयोग करते हैं। जब मैं एक ही डेटा पर एक ही ऑपरेशन करता हूं तो मुझे मैटलैब के उन लोगों के लिए अलग-अलग परिणाम मिलते हैं। बस एक बार देख ले:मैटलैब में एफएफटी और numpy/scipy अलग-अलग परिणाम

MATLAB:

Msig = 

0  0  0  0 
0  0  0  0 
0  0  0  0 
0  0  0  0 
0  1  0  0 
0  0  0  0 

fft(Msig.') 

Columns 1 through 4 

    0     0     0     0   
    0     0     0     0   
    0     0     0     0   
    0     0     0     0   

Columns 5 through 6 

1.0000     0   
     0 - 1.0000i  0   
-1.0000     0   
     0 + 1.0000i  0  

अजगर:

Msig= 
array([[ 0., 0., 0., 0.], 
     [ 0., 0., 0., 0.], 
     [ 0., 0., 0., 0.], 
     [ 0., 0., 0., 0.], 
     [ 0., 1., 0., 0.], 
     [ 0., 0., 0., 0.]]) 

np.fft.fft(Msig.transpose()) 
array([[ 0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j, 
     0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j, 
     0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j], 
     [ 1.0 +0.00000000e+00j, -0.5 +8.66025404e-01j, 
     -0.5 -8.66025404e-01j, 1.0 -3.88578059e-16j, 
     -0.5 +8.66025404e-01j, -0.5 -8.66025404e-01j], 
     [ 0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j, 
     0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j, 
     0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j], 
     [ 0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j, 
     0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j, 
     0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j]]) 
सबसे अच्छा मैं प्राप्त कर सकते हैं

अगर एनपी के मापदंडों के साथ मैं गड़बड़ (अक्ष आदि)। fft.fft()/np.fft.fft2()/np.fft.fftn() एक ही मान है लेकिन स्थानांतरित किया गया है। दुर्भाग्य से मैन्युअल स्थानांतरण एक विकल्प नहीं है क्योंकि एमएसआईजी मैट्रिक्स का आकार और आकार इनपुट पैरामीटर के आधार पर भिन्न होता है।

आपके पास इस समस्या को हल करने का कोई संकेत है, कारण क्या हो सकता है?

+2

स्थानांतरित यही कारण है, सही कुछ असंबंधित कारण के लिए बस नहीं है? – Ali

उत्तर

14

मैटलैब मैट्रिक्स के कॉलम पर एफएफटी लागू करता है, numpy डिफ़ॉल्ट रूप से अंतिम अक्ष (पंक्तियों) पर एफएफटी लागू करता है। आप चाहते हैं:

>>> np.fft.fft(Msig.T, axis=0) 
array([[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j], 
     [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.-1.j, 0.+0.j], 
     [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, -1.+0.j, 0.+0.j], 
     [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+1.j, 0.+0.j]]) 

या

>>> np.fft.fft(Msig).T 
array([[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j], 
     [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.-1.j, 0.+0.j], 
     [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, -1.+0.j, 0.+0.j], 
     [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+1.j, 0.+0.j]]) 
+0

ऐसा लगता है कि यह है! बहुत धन्यवाद मेरे सर! – Chris