バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/
はじめに
前回は、MATLABで複数の周波数のsin波を合成したもの大してFFT&IFFT実施してみた。
想定通りの周波数分布になることが確認できた。
今回はこれのPython版を作成する。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
複数の周波数のsin波を合成したもの大してFFT&IFFT(Python版)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
フクさん
じゃ、さっそく前回のMATLABコードのPython版を貼っておこう。
import numpy as np
import matplotlib.pyplot as plt
N=1024
L=np.pi
x=np.linspace(-L,L,N)
k=np.arange(0,N)
ft=np.sin(x)+np.sin(3*x)+np.sin(7*x)
fig = plt.figure()
ax1 = fig.add_subplot(4, 1, 1)
ax1.plot(x,ft)
ax1.set_title('f(t)')
Fw=np.fft.fft(ft)
ax2 = fig.add_subplot(4, 1, 2)
ax2.plot(k,np.abs(Fw))
ax2.set_title(r'$F(\omega)$')
ax3 = fig.add_subplot(4, 1, 3)
ax3.plot(k[0:10],abs(Fw[0:10]))
ax3.set_title(r'$F(\omega)$ expansion')
fx=np.fft.ifft(Fw)
ax4 = fig.add_subplot(4, 1, 4)
ax4.plot(x,fx.real)
ax4.set_title('f(x)')
plt.show()
動作結果
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
フクさん
そして結果。
まぁ当然ではあるが、MATLABの時と一緒だな。
![合成sin波をNumpyのFFTとIFFTで解析、f(t)、F(ω)、f(x)](https://www.simulationroom999.com/blog/wp-content/uploads/2022/05/02_合成sin波をNumpyのFFTとIFFTで解析-1024x555.png)
入力サンプリング期間を伸ばした版
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
太郎くん
これも同じく入力サンプリング期間を延ばしてみよう。
L=np.pi
↓
L=2*np.pi
![合成sin波をNumpyのFFTとIFFTで解析、入力サンプリング期間を伸ばす、f(t)、F(ω)、f(x)](https://www.simulationroom999.com/blog/wp-content/uploads/2022/05/03_合成sin波をNumpyのFFTとIFFTで解析、入力サンプリング期間を伸ばす-1024x555.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
太郎くん
うん。
こっちもOKそうだ。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/はてなフクロウ.png)
フクさん
大体FFTには慣れてきたんじゃない?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
太郎くん
そうだね。
理屈の方はイマイチだけど、
出力が何を示しているのかは大体理解出来てきたよー。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
フクさん
ならば、そろそろ次のステージに行くとするか。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
太郎くん
(なんか、ヤバイ雰囲気が・・・。)
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
フクさん
まとめだよ。
- 複数の周波数のsin波を合成したもの大してFFT&IFFT実施のPython版。
- 当然ではあるが、同一の結果が得られた。
- 加えて、入力サンプリング期間を延ばしたものも実施。
- これも当然、同一の結果が得られた。
- FFT,IFFTの理屈は兎も角として使い方に関してはなんとなく慣れてきたところ。
バックナンバーはこちら。
コメント