HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

FFTとは何か、フーリエ変換との関連と絶対抑えるべき注意点

 

 

follow us in feedly

f:id:s0sem0y:20170322032536p:plain

 

FFT:高速フーリエ変換

FFTとは?

高速フーリエ変換(Fast Fourier Transform)の略です。

 

より正確には高速に「離散フーリエ変換」を行うアルゴリズムのことです。

 

FFTを調べた場合には、何やら難しげな数式がずらっと並んで出てきますが、それは離散フーリエ変換を高速に動作させるための工夫が書かれているのです。この部分を完全に理解しておくことでデータに対する深い理解できるというわけではありません。

 

スペクトル解析をしたいと思った時によく使われるアルゴリズムで、信号処理・解析をしたことがある人は一度は必ず聞いたこと、使ったことがあるはずです。

 

FFTが離散フーリエ変換である以上、抑えておくべき注意点があります。

 

それを把握すべく、フーリエ変換を再度見ましょう。

 

4つのフーリエ変換の仲間たち

以下にフーリエ変換の仲間たちを4つ記載します。

便宜的にフーリエ級数展開からはじめ、フーリエ逆変換を紹介していきます。

 

フーリエ級数展開

周期時間信号f(t)を以下で表現。

 

\displaystyle f(t)=\sum_{n=-∞}^{∞} a_n e^{jnω_0t}

 

時間tは連続、周波数のインデックスnは離散です。

周期的な連続関数を周期関数の線形和で表現します。微分方程式を簡単に解くことに一役買いました。(展開された右辺では、微分がとても簡単になっています)

 

 

フーリエ逆変換

非周期時間信号f(t)を以下で表現。

 

\displaystyle f(t)=\frac{1}{2π}\int_{-∞}^{∞}F(ω)e^{jωt}dω

 

時間tは連続、周波数ωも連続です。

非周期的な連続関数を周期関数の線形和で表現しようと思ったら、右辺の周期関数の周波数がωが連続になってしまいました。非周期関数を周期無限大の周期関数とみなしたことで生じてきます。

 

離散時間フーリエ逆変換

非周期時間信号f_tを以下で表現。

 

\displaystyle f_t=\frac{1}{2π}\int_{-∞}^{∞}F(ω)e^{jωt}dω

 

時間tは離散、周波数ωは連続です。

センサーの読み取りが離散的に行われた場合、当然信号は離散時間で表現されます。非周期的な関数を扱う限り、相変わらず右辺は積分のままです。

 

離散フーリエ逆変換

周期時間信号f_tを以下で表現。

 

\displaystyle f_t=\sum_{n=-∞}^{∞} a_n e^{j \frac{2π}{N}nt}

 

時間tは離散、周波数のインデックスnも離散です。

 

フーリエ変換対の関係

フーリエ変換対とは

フーリエ変換対という言葉について抑えておきます。フーリエ変換対とは、フーリエ変換と逆変換で相互に変換される変数のペアです。信号解析では時間と周波数がフーリエ変換対になります。

 

フーリエ変換対には様々な関係(制約)が存在しており、例えば不確定性関係などは最たる例です。今回はFFTを抑える上で更に重要な関係性に言及します。

 

一方が周期的ならば、他方は離散的

4つのフーリエ逆変換(フーリエ級数展開を含む)たちを見て、周期時間信号を変換した場合、周波数が離散的になっていることに気づいたでしょうか。

 

これは単純に解釈すると、周期的な時間信号を線形和で表現しようとした場合、ある周波数の整数倍の周波数の信号だけで表現できるということです。もともとが綺麗だから、少ない種類で表現できるというわけです。

 

 

一方が離散的ならば、他方は周期的

上記のことを単純に入れ替えただけに過ぎません。

しかしこれはとても重要なことです。

 

時間が離散的ならば、周波数は周期的になります。

 

 

FFTを用いる際に注意すること

 離散フーリエ変換

時間も周波数も離散的に取り扱います。すなわち、時間も周波数も周期的になっているということです。 言い換えると、離散フーリエ変換をしようとしたときには、その信号が周期的であるということを仮定し、(しかも時間は離散的であるため)フーリエ変換の結果得られる周波数に関しても周期的な特性を持っている(かのように表示される)ことになります。

 

FFTは離散フーリエ変換を高速に動作させるアルゴリズムです。

従って離散フーリエ変換の仮定を十分に考慮しなければなりません。

  

 

解析する信号は本当に周期的か

FFTを用いようという場合には、暗に解析対象が周期的であることを仮定しています。そうでもない信号をFFTで解析したところで、何かしらの計算結果は得られるものの意味のあるデータであるかには注意が必要となります。

 

もしも何かデタラメに見える波形をFFTで解析したとしても、その波形は解析区間の外でも同じような形の波形を繰り返しているという前提のもとで計算結果が得られているのです。その計算結果は解析区間の外で同じような波形を繰り返している場合においてのみ正しいものであるということになります。

 

以下の形ならFFTを用いても良さそうです(時間信号が周期的である)。

f:id:s0sem0y:20170322032536p:plain

 

一方で以下の形はFFTを用いて良いのかを迷わなければなりません(周期的に見えるが、果たして本当が怪しい)。 

 

f:id:s0sem0y:20170322032932p:plain

 

長時間計測することで信号を見極め、対処

上記で示した信号を長時間観測すると周期性が見えてきました。実は低周波成分(ゆっくりとした波)が紛れ込んでいたため、短い時間の計測では周期性が怪しかっただけで、実はちゃんと周期性を持っていそうです。

f:id:s0sem0y:20170322033111p:plain

 

仮に無限に長い時間、信号を観測したのであればFFTを適用することは可能です。なぜならば周期性が無い信号だったとしても、無限に長い時間観測していれば、周期性の無い信号(=周期が無限大の周期信号)を捉えられたことになるからです。

 

当然これは不可能で、理屈の上での話です。

実際は、観測した信号に対して十分に長く観測することで対処します。

 

実用的問題点

周期信号の高周波成分にのみ興味がある場合

信号をハイパスフィルタなどに掛けてしまえばいいでしょう。低周波成分を落としてしまうことで、実は着目している高周波成分に関しては、しっかりと周期性を見出だせている可能性があります。当然、FFTを用いた場合、ハイパスフィルタで落とされた低周波成分を検知することはできません。

 

周期的信号を周期の区切れで解析

以下の信号は周期性を見出だせてはいるものの、これをそのままFFTで解析というわけには行きません。

f:id:s0sem0y:20170322032536p:plain

なぜなら、FFTに突っ込んだ信号自体が周期的であるという仮定で計算がなされるためです。FFTから見た時、この信号の続きは以下のように見えています。

f:id:s0sem0y:20170322035734p:plain

分かりますでしょうか。解析に突っ込んだ波形が、そのまま次も続いているという仮定で計算がなされるのです。これが正しいならば構いません。しかし本来のデータはきっと以下の波形であるはずです。

 

f:id:s0sem0y:20170322035958p:plain

 

似ていますが、少し違うという感じでしょうか。周期的な波形をしっかり周期の区切れで入れてあげなければならないということです。実際この程度なら知りたい情報と遠くかけ離れるということは無いかもしれません。

 

謎の高周波成分

次は周期的な波形を周期の区切れで入れてあげなかった場合に、どんなことが起こるのかを極端な例で示します。

以下は誰がどう見ても周期信号です。問題ありません。

f:id:s0sem0y:20170322040829p:plain

この信号を素直にFFTに与えると、FFTにとっては信号の続きは以下のように見えています。

f:id:s0sem0y:20170322041123p:plain

信号が周期的である(=始まりと終わりが同じ場所にある)と仮定があるため、これを無理に達成しようとした結果、変な波形の接続を行ってしまうのです。このように無理やり波形を接続する場合、急な変動を要することになります。そしてFFTからはその急な変動があたかも波形に本来含まれるべき成分であるかのように見えています。

 

結果、FFTによって、信号に非常に高い周波数成分が含まれていると解析がなされてしまうのです。

 

高周波成分は大抵の場合、解析の結果を大きく狂わせます。解析結果から高周波成分をなかったことにすれば良いという単純な話ではありません。

 

信号をデジタル信号(離散時間)として解析する場合には、対象の信号に含まれる最大周波数の2倍以上のサンプリング周波数が必要(標本化定理という)となります。これを満たしていない場合は、FFTの結果が(ある法則に基づいて)大きく汚されることになるので、低周波成分にも悪い影響を及ぼしてしまうのです。

 

 

ちなみに本来の信号は以下の形をしているはずです。

f:id:s0sem0y:20170322040933p:plain

 

 

最後に

まだ課題はたくさんある

今までは都合の良い話だけをしてきました。今回は目視で周期性を見いだせるケースで具体例を見てきましたが、実際の解析ではそんなケースは非常にまれです。そもそも解析しようとしている信号に関する全容を知っていることのほうが少ないわけですから当然のことと言えます。

 

そのような場合に、対象の信号が本当に周期的であるかという疑問や、そうであったとして周期的な区切りを見いだせるかというのは難しい問題です。通常はこれを諦めます。

 

十分に長い時間観測することで周期性があることを仮定し、更に、周期的な区切りを見出だせないために生じる不連続な接続は、観測の始まりと終わりが0となるような窓関数を用いて無理矢理連続にします(そうすれば不連続の問題はなくなるが、本来の波形からゆがんでしまう)。

 

いかなる窓関数を用いるべきかは難しく、多くの窓関数が提案されています。

 

また、波形自体が定常であるかの問題もあります(FFTの結果自体が刻一刻と変化する)。これはまた別種の問題であり、時間周波数解析の発展へとつながります。

 

 

フーリエ変換の基礎

何らかのデータに対してFFTを行いたいという場合、理解しておかなければならないのは離散フーリエ変換です。当然その前にフーリエ変換がどのようなものであるかを理解しなければなりません。

 

フーリエ変換はフーリエ級数展開から始まり、それが連続へ拡張されていったという経緯がありますので、まずはフーリエ級数について抑えましょう。

 

 

www.hellocybernetics.tech

 

 

フーリエ級数展開が、周期信号を三角関数の線型結合によって近似したものであると分かれば、あとは周期信号以外を同様に近似する目的で導出されたフーリエ変換(と逆変換)に関しても理解できます。

フーリエ変換を応用したフーリエ解析の狙いを知れば、ますますフーリエ変換の意義も含めて理解が深まるはずです。

 

 

www.hellocybernetics.tech

 

 

非定常な波形に対する解析には時間周波数解析が必要となります。

 

 

www.hellocybernetics.tech

 

 

ディジタル信号処理に関する参考ページ

あまりにも有名ですが、やはりわかりやすいです(わかる人は本を呼んだほうが早いですが)。

www.ic.is.tohoku.ac.jp

 

私が勉強に使った本

 すごく古い本。大学講義の指定教科書だと勘違いして購入してしまった本。

この時代からディジタル信号処理を意識して、アナログとの関連を踏まえて解説しています。いまではディジタル信号処理が当たり前ですが、発展していく時期だったからこそ力を入れられている印象です。

 

この本がおすすめと言えるほど信号処理に精通していませんが、とりあえずお世話になった本です(多分他にいい本たくさんあると思います)。

 

アナログとディジタルの 信号解析

アナログとディジタルの 信号解析

 

 

また以下の本も信号処理周りの数学について非常にわかりやすく具体例を含めて解説してくれる良書だと思っています。

 

これなら分かる応用数学教室―最小二乗法からウェーブレットまで

これなら分かる応用数学教室―最小二乗法からウェーブレットまで