FFT
- FFTはFast Fourier Transform
- 厳密にはDFTの一種
- FFTでは、有限長のデータをループさせて無限長の仮想データを作り、それに対して変換を施す。ゆえに、データの両端で振幅が一致していないと仮想データが連続ではなくなってしまい、おかしな周波数成分が入ってしまう。
- それを避けるために、FFTの前処理としてオーバーラップと窓関数を使う。
- 全体のステップとしては、
- 時系列データを集める
- オーバーラップをかけて、時間窓の配列をつくる
- それぞれに窓関数を適用して、つりがね型の時間窓の配列をつくる
- それぞれにFFTを適用して、時間窓に対応する周波数成分の配列Yをつくる
- Yのすべての要素の平均をとって、もとの時系列データ全体を代表する周波数特性を得る
- 平均を取るので、時系列データ中ではだいたい同じような特徴のデータが並んでいる前提
- 外れ値は他の時間窓に押されて目立たなくなる
- オーバーラップは情報をダブった形で取り出すので、戻すときにも配慮して戻す必要がある - overlap add - overlap save
- 窓関数
- ハミング窓、ハニング窓は別物
- 図式化するとスペクトルを得る
## 参考
-
[Pythonを使ったFFT実装 (窓関数とオーバーラップも実装) 理系夫婦の方程式](https://rikei-fufu.com/2020/06/27/post-3237-python-fft/#index_id1) - 窓関数を用いる理由 - ロジカルアーツ研究所
- 窓関数とは - Cognicull
- 11. スペクトル解析と窓関数 (やる夫で学ぶディジタル信号処理)
- サイドローブとメインローブはこれがわかりやすい
Backlinks
STFT
異常値の検知など、長い時系列データの全体の傾向ではなく、短い時間でのことを知りたい場合がある そこで使うのがSTFT(短時間フーリエ変換) 時系列データを分割して、別々にFFTに入れただけ FFTに入れると無限長の信号扱いになって境界で不連続になるから、[[時間窓]]を使う 短時間でも低周波成分は入ることに注意 局所的な性格が反映されやすく、遠い時刻のことが反映されなくなるというだけ [[FFT]]と違って時間軸を含めた3つの軸が必要になるから、スペクトルとは別の図を使う。それがスペクトログラム。時間と周波数で平面を作って、成分の強さは色で表現する。 しかし、[[フーリエ変換の不確定性原理]]により、周波数での分解能と時間での分解能を両立することはできない 長い時間窓でみると細かい周波数の差がわかる 短い時間窓で見ると周波数は大まかにしかわからない...