2016-11-18 109 views
4

這篇文章的目的是爲了正確理解Python或Matlab上的數值傅立葉變換,其中傅里葉變換的分析是衆所周知的。爲此,我選擇矩形功能,轉換它的解析表達式及其傅立葉這裏 https://en.wikipedia.org/wiki/Rectangular_function矩形函數的數值傅立葉變換

報道下面的代碼在Matlab

x = -3 : 0.01 : 3; 
y = zeros(length(x)); 
y(200:400) = 1; 
ffty = fft(y); 
ffty = fftshift(ffty); 
plot(real(ffty)) 

這裏的代碼在Python

import numpy as np 
import matplotlib.pyplot as plt 
x = np.arange(-3, 3, 0.01) 
y = np.zeros(len(x)) 
y[200:400] = 1 
ffty = np.fft.fft(y) 
ffty = np.fft.fftshift(ffty) 
plt.plot(np.real(ffty)) 

在這兩種編程語言中,我都遇到了一些問題: 首先,傅里葉變換並不像預期的那樣真實,而且即使選擇真實的部分,解決方案看起來不像解析解決方案:事實上,這裏報告的第一個情節是至少應該是形狀,第二個情節是我從我的計算中得到的。

有沒有人可以建議我如何分析計算矩形函數的傅立葉變換?

enter image description here

enter image description here

回答

7

有你的Matlab代碼兩個問題:

首先,y = zeros(length(x));應該y = zeros(1,length(x));。目前,您創建了一個方形矩陣,而不是一個矢量。

其次,如果y是DFT(或FFT)將是真實和對稱的。您的y應該是對稱的,這意味着相對於0。所以,而不是y(200:400) = 1;使用y(1:100) = 1; y(end-98:end) = 1;。回想一下,DFT就像傅里葉級數的信號,從中您輸入只是一個週期,第一樣本對應於時刻0

所以:

x = -3 : 0.01 : 3; 
y = zeros(1,length(x)); 
y(1:100) = 1; y(end-98:end) = 1; 
ffty = fft(y); 
ffty = fftshift(ffty); 
plot(ffty) 

>> isreal(ffty) 
ans = 
    1 

enter image description here

0

在Python代碼是

import matplotlib.pyplot as plt 
import numpy as np 

x = np.arange(-3, 3, 0.01) 
y = np.zeros(len(x)) 
y[200:400] = 1 
yShift = np.fft.fftshift(y) 
fftyShift = np.fft.fft(yShift) 
ffty = np.fft.fftshift(fftyShift) 

plt.plot(ffty) 
plt.show()