今回は スペクトル解析 について学びます。
スペクトルとは 「光源をプリズムに当てると様々な色の光線に分散する」という実験を覚えていますか? スペクトルは、分散した色の線1本1本のことを言います。 分散された色の光線は、それぞれ違う周波数成分を持ちますが、この性質は音でも同じです。音も、様々な周波数成分の組み合わせで構成されています。この 周波数成分1つ1つをスペクトル と呼びます。
スペクトル解析は、時系列データを周波数データに変換すること です。
この記事は主に、
音声の性質(時系列データ)
周波数データ
窓関数
という言葉が出てきます。
スペクトル解析
データ変換の概要
スペクトル解析は 信号(波)がどのようなスペクトル(周波数成分)を持っているか を表現するという意味です。
何故このような処理が必要なのかについて、説明していきます。
- 音声データ(時系列データ)
音とは、波です (特に、機械で録音してデジタルデータにするとき、音声データは「信号」と呼ばれることもあります。)
つまり、音声データは
横軸:時刻 縦軸:振幅 (空気がどれだけ震えたか)
を表現したグラフであるということです。横軸が時刻であることから変換前の音声データは 時系列データ と呼ばれます。
従って、時系列データは 「この音声は、どの時刻のときどの程度空気を震わせているか」を表現しています。 しかし、これでは音声の特徴がわかりません。 (実際に再生すれば分かるかもしれませんが、上図の青グラフだけで何を言っているか、分かりません)
そこで、もっと特徴が表現されたグラフへ変換します。
- 周波数データ(スペクトル)
人間は音を 高さ で認識していると考えられており、機械学習による音声認識にもこの考えを適用したシステムが作られました。 (音は、周波数が大きいほど高い音、小さいほど低い音であるとされます)
周波数データは、
横軸:周波数 縦軸:パワー(強さ)
というグラフで表現されます。 この音声は、どの大きさの周波数成分がどの程度強く現れているのか という特徴が表現されたということになります。
そして、時系列データを周波数データに変換する計算を フーリエ変換 と言います。
フーリエ変換について
上記で書いた通り、時系列データを周波数データに変換するには フーリエ変換 をします。
フーリエ変換は、音声認識において(今のところ)最も主流で必要不可欠な処理と言えます。 では、フーリエ変換という処理について完璧に理解する必要があるかと言うと・・・そんなこともないです。(機械にプログラムすれば自動で計算してくれます・・・と言えば身も蓋もないですが)
従って、本記事及びシリーズではフーリエ変換について、音声認識の精度に関わる部分の解説はしますが、それ以外では単純に 時系列データを周波数データに変換する処理 として扱います。
どうしても仕組みが知りたい! 理解したい! という方はこちらのサイトを参考にしてみて下さい。 個人的に理解しやすかったです。数学アレルギーの方、読まなくても音声認識は出来ますよ。
スペクトル解析の流れ
前処理について
録音された時系列データに対してそのままフーリエ変換は出来ません。
時系列データに対する処理として、
エイリアシング問題
サンプリング
窓関数による切り出し
と続きますが、 アンチエイリアス、 サンプリング は前処理として先ほどの記事でまとめられているので本記事では省略します(ただし、図として示すと上図の流れになります)。
窓関数による切り出し
時系列データは、様々な周波数が組み合わさって出来ています。つまり、時系列データ内では常に周波数の強度が変わることになります(時刻によっていろいろな形の波が出来ていると言う意味です)。
フーリエ変換をするには、周期的で離散的な時間信号(データ) である必要があります。そこで、時系列データ全体から1周期分になる様な区間で切り出す作業を行います。切り出しの簡単な例として、単一周波数のサイン波で考えてみます。(本当はサンプリングした離散時間信号ですが、今回はサンプリング周期が非常に短いとします)。
下のサイン波に対して、以下のように切り出すと、周期拡張が可能になります。 (周期拡張は単純にコピペした情報としても成り立つという解釈で良いです。周期拡張によって、極端に短く信号を切り出したとしてもスペクトル解析が出来ます。)
ところが、上図のように切り出すと、周期拡張した時に元の時系列データと異なったデータになってしまいます。
最初に書いた様に、時系列データは時間によって複数の周波数成分が含まれます(周波数の強度が常に変わる)。それぞれの状況に応じた区間の切り出しを行うのは不可能です。
そこで、つなぎ目がおかしくなるのを回避するために ハミング窓 などの 窓関数 を用います。
そもそも窓関数は時系列データから信号区間を切り出すのに用いる関数で、上のように単に区間を切り出す場合は「矩形窓(方形窓)」を使用していることになります。しかし矩形窓では良くないのでハミング窓という両端が緩やかになるような切り出しを用いたほうが、より良いデータ変換が出来ます。
(赤線が時系列データ、青線が窓関数で、WはWindowを意味する)
両端が緩やかに切り出されるような窓関数でグラフを切り出しても、必ず精密なスペクトル解析となる訳ではありません。
矩形窓よりはましという程度です。
よって、時系列データをどのような窓関数で切り出すかで、音声認識の精度に差が出ます。都度選択することが重要と言えます。
高速フーリエ変換(FFT)
最後に、音声のスペクトル解析で使われているフーリエ変換の代表的な手法を紹介します。
高速フーリエ変換(Fast Fourier Transform)のこと。デジタル信号をスペクトル解析するためのフーリエ変換の手法の一つ。
当然ですが、機械による計算はなるべく速く、簡単な処理にした方が良いです。高速フーリエ変換は名称からも処理が速そうという印象ですが、実際に通常のフーリエ変換に比べて計算時間が大幅に削減出来ます。通常のフーリエ変換とは以下の点が異なります。
- 複素数を用いて計算を行う
- このため実部と虚部は別々に計算される
また、FFTは時系列データを短い時間間隔で切り取って分析を行います。この部分については次回説明します。
まとめ
スペクトル解析は、時系列データを周波数データに変換すること であり、 元の時系列データにより近いデータに変換するには、窓関数を調整する必要がある という記事でした。 次回は、変換した周波数データから特徴量ベクトルを抽出する処理についての記事です。 どうぞよろしくお願いします!