x
次のような波形がある場合
x = [math.sin(W*t + Ph) for t in range(16)]
任意W
の とPh
で、その (実数) FFTf
を で計算します
f = numpy.fft.rfft(x)
でオリジナルx
を取得できます
numpy.fft.irfft(f)
ここで、復元された波形の範囲をサンプル数だけ左右に拡張する必要がある場合はどうすればよいでしょうか? つまり、 、、が元の波形の周期的な延長であるy
ような波形です。len(y) == 48
y[16:32] == x
y[0:16], y[32:48]
言い換えれば、FFT がその入力が でf(t)
サンプリングされた無限関数であると想定している場合t = 0, 1, ... N-1
、どうすればforとの値を回復できますか?f(t)
t<0
t>=N
注:例として完全な正弦波を使用しましたが、実際には、 やx
などの任意の信号、またはランダム ファイルから取得した任意の長さのセグメントなど、何でもかまいx = range(16)
ませんx = np.random.rand(16)
。.wav