2

scipy.fftp を使用して、Python で定期的なデータを平滑化および補間しようとしています。データの fft を取得し、(myfft[wn:-wn] = 0 を実行して) wn を超える高次周波数を削除し、ifft(myfft) を使用してデータの「平滑化」バージョンを再構築することができました。ifft によって作成された配列には、元のデータと同じ数の点があります。その fft を使用して、より多くのポイントを持つ配列を作成するにはどうすればよいですか。

x = [i*2*np.pi/360 for i in range(0,360,30)]
data = np.sin(x)
#get fft
myfft = fftp.fft(data)
#kill feqs above wn
myfft[wn:-wn] = 0
#make new series
newdata = fftp.ifft(myfft)

また、ここで説明したのと同じ解像度でシリーズを手動で再作成することもできました ifft を使用せずに FFT 結果を使用して時系列データを再作成する

しかし、x値配列の解像度を上げようとしたとき、正しい答えも得られませんでした。

前もって感謝します

ニール

4

1 に答える 1

5

返されるのはnp.fft.fft、位置 0 の DC コンポーネント、すべての正の周波数、ナイキスト周波数 (要素数が偶数の場合のみ)、負の周波数の順です。したがって、さらに解像度を追加するには、ナイキスト周波数の両側にゼロを追加できます。

import numpy as np
import matplotlib.pyplot as plt

y = np.sin(np.linspace(0, 2*np.pi, 32, endpoint=False))

f = np.fft.fft(y)
n = len(f)
f_ = np.concatenate((f[0:(n+1)//2],
                     np.zeros(n//2),
                     [] if n%2 != 0 else f[(n+1)//2:(n+3)//2],
                     np.zeros(n//2),
                     f[(n+3)//2:]))
y_ = np.fft.ifft(f_)
plt.plot(y, 'ro')
plt.plot(y_, 'bo')
plt.show()

ここに画像の説明を入力

于 2013-06-07T20:34:34.790 に答える