Chapter 04

FFTとデジタル信号処理

a3geek
a3geek
2021.05.02に更新

 信号とは、何らかの変動する情報を伝えたり表現したりするために、その情報の変動を関数として表現したものである[1]。この信号から情報を抽出したり、記録したりするために、信号を変換したり加工したりすることを信号処理という[1]。連続的に変化する信号をアナログ信号といい、離散的に変化する信号をデジタル信号という。
 アナログ信号をデジタル信号に変換し、デジタル信号に計算機で何かしらの処理を加えて、再びアナログ信号へと変換するような信号処理を、デジタル信号処理という。デジタル信号処理の一つに、音声信号処理が挙げられる。人間の発する音声はアナログ信号であるため、これを計算機で解析するには、デジタル信号に変換する必要がある。そのためには、音声をマイクロフォンなどを用いて音声信号から電気信号に変換する。変換した電気信号を一定間隔で測定することにより、音声を時間的に離散的な信号として収集する。この作業をサンプリング、もしくは標本化という。そして、サンプリングした値を量的に離散的な値にするために、有限個の値に近似する。この処理を量子化という。このようにして、サンプリングした値を量子化することで、アナログ信号をデジタル信号へと変換して音声信号を計算機で解析できるようになる。
 ここで、音声のように複雑な信号が、どのような周波数の波で構成されるかを計算機で解析する、スペクトル解析について考える。波を分解するために、フーリエ級数展開、フーリエ変換、離散時間フーリエ変換、離散フーリエ変換のいずれかを行う。フーリエ級数展開と離散時間フーリエ変換は無限の総和を取る必要があるため、そのままでは計算機で使うことができない。フーリエ変換には積分が含まれているため、同じく計算機では使うことができない。よって、有限和を取るだけで計算ができる離散フーリエ変換を使う。しかし、離散フーリエ変換の計算量はO(N^2)で、音声のようなデータ量の多い波形を解析するには計算時間が長くなりすぎる問題がある。そこで、離散フーリエ変換を高速に計算できるFFTを使う。FFTの計算量はO(N\log N)で、リアルタイムに近い速度で音声の波を構成する基本的な波の周波数を解析することができる。以上のような方法を使って計算機で音声を解析することで、発話者の特定や特定の周波数以外の音の除外(フィルタリングという)、音の合成などが可能となる。
 FFTは高速なアルゴリズムであるが、音声波形の周期性に問題がある。本来であれば、デジタル信号に変換した音声は不連続で非周期な関数であるため、離散時間フーリエ変換を使う必要がある。しかし、前述の通り離散時間フーリエ変換は無限の総和を取る必要があるため、計算機で使うことができない。そのため、有限和を取るだけで計算ができる離散フーリエ変換を使う。離散フーリエ変換における元の関数f[n]N点だけ値を取る周期関数であるとき、音声波形がサンプリングしたN点からなる周期関数であると仮定して計算をする。しかし、ほとんどの場合で音声波形は非周期であるため、サンプリングしたN点からなる波形は両端で周期性を持たない。そのため、このN点に対しFFTを行うとスペクトルに変動やノイズが出現する。
 このような問題を解決するために、FFTの計算時に生じる変動やノイズを低減する技法である窓関数が広く用いられている。代表的な窓関数の一つとして、ハニング窓(ハン窓)が挙げられる。ハニング窓w[n]は、

\tag{51} w[n] = 0.5 - 0.5\cos(\frac{2\pi n}{N}) \quad (0 \leq n \le N)

と定義される関数である。式(51)より、ハニング窓はn = \frac{N}{2}を中心とするなだらかな釣鐘型の関数であり、両端では0を取る。ハニング窓とサンプリングした音声波形f[n]を乗算し、w[n]f[n]とすることで、w[n]f[n]の両端が周期的であると見做すことができる。w[n]f[n]についてFFTを行うことで、スペクトルに出現する変動やノイズを軽減できる。
 しかし、窓関数をかけた波形は、元のサンプリングした音声波形とは異なる波形になる。そのため、FFTを行って得られる理想的なスペクトルに対して、窓関数をかけてからFFTを行って得られるスペクトルは誤差を含んでいる。よって、解析する信号の種類や目的などに応じて、窓関数を使い分けることが重要となる。