7

データ削減の動作がおかしいため、numpy fft 関数を理解しようとしています。しかし、2 つのサインの単純な和を変換したので、奇妙な結果が得られます。私が持っているピークは非常に高く、ゼロ付近で数ポイント幅があり、残りは平らになっています。誰かが私が間違っているかもしれないことの手がかりを持っていますか?

import numpy as np
from numpy import exp, sqrt, pi, linspace
from matplotlib import cm
import matplotlib.pyplot as plt
import scipy as sp
import pylab


#fourier
tdata = np.arange(5999.)/300
datay = 3*np.sin(tdata)+6*np.sin(2*tdata)
fouriery =  np.fft.fft(datay)

freqs = np.fft.fftfreq(datay.size, d=0.1)


pylab.plot(freqs,fouriery)
pylab.show()

私が得たのはこれです: ここに画像の説明を入力 両側に2つのサイドピークがあるはずですが、一方のemはもう一方の2倍高くなっています

4

1 に答える 1

4
  • あなたdatayは本物なので、おそらく を使用して実際のシーケンスの FFT を取得する必要がありますscipy.fftpack.rfft
  • 2 つの異なるピークを持つ FFT を探している場合は、周期が の整数倍である正弦波の和であるデータを与える必要があり2*pi/nますn = len(datay)。そうでない場合は、データを近似するためにそのような正弦波が多く必要になります。

import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack as fftpack

pi = np.pi
tdata = np.arange(5999.)/300
datay = 3*np.sin(2*pi*tdata)+6*np.sin(2*pi*2*tdata)
fouriery = fftpack.rfft(datay)
freqs = fftpack.rfftfreq(len(datay), d=(tdata[1]-tdata[0]))
plt.plot(freqs, fouriery, 'b-')
plt.xlim(0,3)
plt.show()

ここに画像の説明を入力

于 2012-12-22T18:11:58.970 に答える