[英]Numerical differentiation via numpy FFT
我正在學習如何使用numpy進行快速傅里葉變換區分。 在下面的代碼中,我創建了一個簡單的正弦函數並嘗試獲得余弦。 結果顯示在圖像中,似乎有一個歸一化因素,盡管閱讀文檔但我無法理解,這使我無法獲得正確的結果。
你能告訴我如何擺脫正常化因素,或者我是否以不同的方式失敗? 還請解釋為什么當陣列長度為奇數時,奈奎斯特頻率不存在。
x = np.arange(start=-300., stop=300.1, step=0.1)
sine = np.sin(x)
Y = np.fft.rfft(a=sine, n=len(x))
L = 2.*np.pi #period
N = size(Y)
for k, y in enumerate(Y):
Y[k] *= 2.*np.pi*1j*k/L
# if N is even, the last entry is the Nyquist frequency.
#if N is odd, there it is not there.
if N%2 == 0:
Y[-1] *= 0.
cosine = np.fft.irfft(a=Y, n=len(x))
你能告訴我如何擺脫正常化因素,或者我是否以不同的方式失敗?
為術語2.*np.pi*1j*k/L
添加np.exp()
。 這個術語似乎是相位旋轉的量,所以它們的范數應該是1。
for k in range(N):
Y[k] *= np.exp(2.*np.pi*1j*k/L)
還請解釋為什么當陣列長度為奇數時,奈奎斯特頻率不存在。
這是離散傅立葉變換的本質。 簡而言之,當采樣點的數量N是奇數時,沒有等於N / 2的整數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.