バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/
はじめに
前回は、「複数の周波数のsin波を合成したもの大してFFT&IFFT」のPython版を実施。
当然ではあるが想定通りの結果は得られた。
IFFTに関しては、単に元に戻るかを試していただけだが、
今回からは、このIFFTが活躍することとなる。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
IFFTを活躍させる。
前回の最後で、
「ならば、そろそろ次のステージに行くとするか。」
とか言ってたけど、何やらせる気?
そんな難しいことをやるわけじゃないよ。
IFFTに活躍してもらおうと思って。
IFFTだったら前回までも使ってたと思うのだけど?
単に元の波形に戻るかどうかを見てただけだけどね。
それ以外に何ができるの?
FFT,IFFTの代表的な利用方法に
- ローパスフィルタ
- ハイパスフィルタ
- バントパスフィルタ
があるって以前言ってたじゃん?
あれに相当することをやるだけだ。
あー、特定の周波数帯を取り出そうって話か。
言われてみると、具体的に何するかはよくわからんな。
(本当に業務でFFT使ってるのか?)
簡易的なバントパスフィルタ
今回やろうとしているのは超簡易的なバントパスフィルタだな。
FFTで周波数分布関数が取得されるんで、
欲しい周波数以外を0で消してしまえばOKだ。
なんだ。
それだけか。
そして注意点としては、周波数分布関数の後半に居る複素共役の成分に対しても同じ処置をする必要がある。
そういうえば、そういうのが居たな・・・。
周波数分布を見る上では不要って事だったから気持ち的には存在しないものとして扱ってたのに・・・。
複素共役が居ないと狙ったフィルタ効果は得られないんで、対応は必須だ。
うーん、めんどくさい。
周波数分布のローテーション
そして、これはやらなくてもOKと言えばOKなんだけど、
複素共役をマイナスの周波数分布側に持ってきておきたいんだよね。
なんでやらなくても良いことをやるのか。
現状の周波数分布関数の配置だと、複素共役同士の位置が分かりずらいんだよね。
1[Hz]の複素共役は-1[Hz]
3[Hz]の複素共役は-3[Hz]
みたいな位置関係にしておきたい。
それって簡単にできるの?
めんどくさいことはやりたくないなー。
ベクトルのシフトまたはローテーションの機能でできるはずだ。
MATLAB、Python(Numpy)共に同等の関数が存在しているとは思うよ。
まぁローテーションさせるだけだから、for文でぶん回してもできるけど。
まぁ言われてみれば大した処理じゃないから、別にいいような気もしてきたな。
というわけで、まずはFFT後の周波数分布関数のローテーションが出来る状態までもってこよう。
まとめ
まとめだよ。
- IFFTにも活躍してもらうため簡易的なバンドパスフィルタを実施予定。
- 周波数分布関数の後半に複素共役が居るため、これも同等の処置が必要。
- 複素共役の位置を分かりやすくするため、マイナス側に持ってくる予定。
- ベクトルに対するシフト、ローテーションで対応可能。なはず。
バックナンバーはこちら。
コメント