2011-12-30 80 views
12

我想重新实现一个matlab工具箱。 他们在那边使用fft。 当我在相同的数据上执行相同的操作时,我得到了不同的结果,从matlab的结果。 只要看一看:Matlab中的FFT和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  

PYTHON

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]]) 

尽我所能得到,如果NP的我惹参数(轴等)。 fft.fft()/ np.fft.fft2()/ np.fft.fftn()是相同的值,但移位。不幸的是,手动移位不是一个选项,因为Msig矩阵的大小和形状因输入参数而异。

你有任何线索如何解决这个问题,可能是什么原因?

+2

即转仅仅是有一些不相关的原因,对不对? – Ali 2011-12-30 15:23:12

回答

14

Matlab在矩阵的列上应用fft,numpy在默认情况下在最后一个轴(行)上应用fft。你想:

>>> 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 2011-12-30 18:36:23

相关问题