私はこの領域の古典的な例であるfftを使ってsunspots.datデータ(以下)を解析しました。私はfftの結果を実際の部品とimaginery部品で得ました。その後、フーリエ変換の式に従ってデータを再作成するために、これらの係数(最初の20)を使用しようとしました。 B_NするA_Nとimagineryに対応し、実際の部品を考えて、私はいくつかの理由ifftを使用せずにFFT結果を使って時系列データを再作成する
import numpy as np
from scipy import *
from matplotlib import pyplot as gplt
from scipy import fftpack
def f(Y,x):
total = 0
for i in range(20):
total += Y.real[i]*np.cos(i*x) + Y.imag[i]*np.sin(i*x)
return total
tempdata = np.loadtxt("sunspots.dat")
year=tempdata[:,0]
wolfer=tempdata[:,1]
Y=fft(wolfer)
n=len(Y)
print n
xs = linspace(0, 2*pi,1000)
gplt.plot(xs, [f(Y, x) for x in xs], '.')
gplt.show()
を持っているが、私のプロットは、IFFTによって生成されたものを(私は両側の係数の同じ番号を使用)ミラー化されません。何が間違っていますか?
データ:あなたはfft(wolfer)
を呼ばれると
http://linuxgazette.net/115/misc/andreasen/sunspots.dat
スペクトルから何をやっていますか?さまざまなコンポーネントの相対的なスペクトル振幅を求める場合は、データウィンドウ(en.wikipedia.org/wiki/Window_function)を使用するとよいでしょう。例えば、 'np.abs(fft(wolfer * hanning(len(wolfer))))') 'をプロットすると、n = 30の周りのピークは、ウィンドウなしの場合より少し多くの構造を示します。 – mtrw