2011-12-30 47 views
12

Tôi đang cố gắng triển khai lại một trong các hộp công cụ MATLAB. họ sử dụng fft ở đó. khi tôi thực hiện cùng một thao tác trên cùng một dữ liệu, tôi nhận được kết quả khác với các kết quả từ MATLAB. Chỉ cần có một cái nhìn:FFT trong Matlab và numpy/scipy cho kết quả khác nhau

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

Điều tốt nhất tôi có thể nhận được nếu tôi gây rối với các thông số (trục, vv) của np. fft.fft()/np.fft.fft2()/np.fft.fftn() có cùng giá trị nhưng được dịch chuyển. không may thay đổi hướng dẫn sử dụng không phải là một lựa chọn gây ra kích thước và hình dạng của ma trận Msig khác nhau tùy thuộc vào các thông số đầu vào.

bạn có bất kỳ đầu mối nào để giải quyết vấn đề này, nguyên nhân có thể là gì?

+2

Đó transpose là chỉ có đối với một số lý do không liên quan, phải không? – Ali

Trả lời

14

Matlab áp dụng fft trên các cột của ma trận, numpy áp dụng fft trên trục cuối cùng (các hàng) theo mặc định. Bạn muốn:

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

hoặc

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

Có vẻ như vậy! Rất cám ơn Sir! – Chris

Các vấn đề liên quan