離散フーリエ変換


計算機で信号から周波数スペクトルを得よう

以下、ざっくり理解のやつ

フーリエ変換のコアとなるアイデアは 3B1B をチェック
やってることは信号を色んな速度で円にまきまきしてそれらの重心っぽいもの (複素数) に注目する
言い換えると関数をオイラーの公式と乗算することで複素平面上に作られる円に巻き付けるみたいな

F(k)=∑x=0N−1f(x)e−iθ,θ=2πxkNF(k) = \sum_{x=0}^{N-1}f(x)e^{-i \theta} , \theta = \frac{2\pi xk}{N}
F(k)=周波数スペクトル,N=サンプル数,k=周波数番号,x=時間番号F(k) = 周波数スペクトル, N = サンプル数, k = 周波数番号, x = 時間番号
NNで割ってないので平均(重心)じゃなくて単なる総和になってる

逆離散フーリエ変換
f(x)=1N∑k=0N−1F(k)eiθ,θ=2πkxNf(x) = \frac{1}{N}\sum_{k=0}^{N-1}F(k)e^{i \theta} , \theta = \frac{2\pi kx}{N}
逆回転で、円に巻き付かれてる信号を直線状に戻す
離散フーリエ変換でサンプル数で割ってなかった分こっちで割る、フーリエ変換で割って逆で割らないパターンとかもあるっぽい

行列でも表せれる、というか逆行列が逆フーリエ変換になってゲースー
X=FxX=Fx
x=F−1Xx=F^{-1}X

まあコードみたほうが早いかも
https://www.mycompiler.io/view/HWoMrtHI95o
返り値は複素数のデータ配列なのに注意
絶対値の2乗取るとパワースペクトルと呼ばれるやつになるっぽい

変換後の振幅が若干元より足りてないのはスペクトル漏れが起きている
https://ja.wikipedia.org/wiki/スペクトル漏れ
離散フーリエ変換はサンプルした信号をその形のまま無限に繰り返すと解釈するので、始点と終点がほんらいの形と異なる繋がり方することで漏れる