【スペクトル解析】音声信号処理の基礎知識シリーズその2

こんにちは。スキルアップAI編集部です。

本ブログでは、AI を用いた音声・音楽モデルに必要な、音声信号処理の基礎知識について解説します。第2回の今回は、スペクトル解析について解説します。
第1回の内容は[こちら](https://qiita.com/skillup_ai/items/01d882fe52085022f118)です。

<目次>
1.スペクトル解析
2.スペクトルから派生した特徴量
3.まとめ
4.おわりに
5.参考文献

# 1.スペクトル解析
音声データの分析においては、音声波形そのものを分析するということは少なく、通常は周波数成分に分解した状態で分析を行います。フーリエ変換を用いて音声波形を周波数成分に分解したものをスペクトル（Spectrum）と呼び、スペクトルを解析することをスペクトル解析と呼びます。

**1-1.フーリエ変換**
音声波形を周波数成分に分解する際にはフーリエ変換を用います。コンピュータで扱われる音声信号は離散信号（デジタル信号）であるため、フーリエ変換の中でも離散フーリエ変換を用います。元の音声信号を x 、スペクトルを X とおくと離散フーリエ変換は次のように定式化されます。

<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/2e45131a-4c2c-d80e-35e7-c4b69adb936a.png">

x(n) は元の音声信号のn番目の値、T はサンプリング周期（サンプリング周波数の逆数）であり、nT は 1 サンプルあたりの時間を表しています。 一見すると複雑ですが、この式は波形に関する公式（①）とオイラーの公式（②）の知識があれば理解することができます。

①周波数 f・角速度 ω・角度 θ・時間 t の関係式波形に関する公式

<img width="300" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/a5c9d436-5034-b5ad-74ed-2b397ffa9067.png">

②複素指数関数と三角関数の間の関係式（オイラーの公式）

<img width="300" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/f59119db-8bf3-8705-41d7-0dd16e98d14b.png">

この2式を踏まえると、最初のフーリエ変換の式は「ある角速度 ω における周波数成分は、信号のサンプルに角速度 ω のコサイン波・サイン波を掛け合わせたものを、全サンプル分足し合わせることにより求められる」ということを表しているといえます。

**1-2.スペクトルとスペクトログラム**
フーリエ変換の結果は実部（コサイン波）と虚部（サイン波）の複素数となり、その絶対値を取るとスペクトルを見ることができます。 スペクトルを時間方向に並べたものを、スペクトログラム（Spectrogram）またはソナグラム（Sonagram）と呼びます。スペクトルは2次元（周波数×振幅）、スペクトログラムは3次元（周波数×時間×振幅）のデータです。

**1-3.FFT（高速フーリエ変換）**
スペクトルを算出するための数値計算ライブラリでは、高速フーリエ変換（FFT: Fast Fourier Transform）という手法が用いられています。また、音声波形を短い区間に切り分け、窓関数を掛けながら FFTを実行することを短時間フーリエ解析といいます。短時間フーリエ解析を行うとソナグラムが出力されます。
<img width="700" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/3c020100-531e-906b-159b-4293a5466dd9.png">
図1. 音声波形とスペクトルの例

短時間フーリエ解析を行うための関数では、通常、n_fft（フレーム長）・hop_length（フレーム間隔）・win_length（窓関数の長さ）の3つの引数を受け取ります。

n_fft は切り出す区間の長さ、win_length は切り出した波形に掛ける窓関数の長さを表します。基本的には同じ値を用いますが、win_length を n_fft より小さく設定すると、波形の特徴を強調することができます。また hop_length は、波形を切り出す間隔を表します。これを小さくすると、出力されるソナグラムが時間方向に長くなります。

n_fft や win_length を大きくすると周波数分解能が細かくなりますが、時間分解能は粗くなってしまいます。逆に時間分解能が細かすぎると、低い音（波長の長い信号）を捉えることができません。低い音を解析するためには、その波形を少なくとも3波含むようにパラメータを設定する必要があります。

# 2.スペクトルから派生した特徴量
音声認識・音声合成のモデルでは、入力データとして、スペクトルから取り出した情報がよく用いられます。

**2-1.ケプストラム**
対数スペクトルを波形とみなしてフーリエ変換したものを**ケプストラム**（Cepstrum）と呼びます。また、ケプストラムの横軸をケフレンシー（Quefrency）と呼びます。ケフレンシーの低い部分を取り出して逆フーリエ変換を行うと、**スペクトル包絡**（声道の特性を表す特徴量）を取り出すことができます。

<img width="700" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/8d852e57-76c8-0e69-8259-cb4e69e9c0d6.png">
図2：ケプストラムとスペクトル包絡の例

**2-2.メルスペクトル**
人間の聴覚には、高い音ほど音高（音の高さ）の変化に鈍感になるという特性があります。その知覚特性を考慮した尺度を**メル尺度**と呼びます。メル尺度における数値の差は、人間が感じる音高の差とほぼ同じになっています。また、スペクトルの周波数をメル尺度に変換したものを**メルスペクトル**と呼びます。

<img width="700" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/235fc932-b687-abbf-825d-31ddf388449b.png">
図3：周波数[Hz]とメル尺度 (基準周波数 700 Hz) の関係

**2-3.MFCC**
メルスペクトルからケプストラムを算出し、さらに対数をとったあとに、離散コサイン変換を行ったものを MFCC（メル周波数ケプストラム係数）と呼びます。MFCC の低い方から 12～18 次元ほどを取り出したものは、スペクトル包絡のような声道特性（話者の特徴）を表します。

<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/9016e30a-94bd-4d2b-30e7-c9859960f3ef.png">
図4：MFCCの例

# 3.まとめ
今回は、波形をスペクトルに変換するためのフーリエ変換と、スペクトルから派生した特徴量を紹介しました。データサイズの関係上、従来はMFCCが多く用いられていましたが、ディープラーニングの登場以降はメルスペクトルを用いることが主流です。
次回は、音声認識システムの概要について解説します。

# 4.おわりに
プログラミング言語の1つであるPythonを用いると、音声をはじめとした様々なデータを手軽に扱うことができます。スペクトル解析を行うには、Python用の音声処理ライブラリの1つであるLibrosaを用いると便利です。

スキルアップAIでは、「[機械学習のためのPython入門講座](https://bit.ly/30YmhYA)」を開講中です。本講座では、Pythonの基本的な使い方から、scikit-learnを用いた機械学習モデルの構築までを学ぶことができます。 ぜひ受講をご検討ください。

# 5.参考文献
[1] [DFT（離散フーリエ変換） – 情報処理実習2｜明治大学](https://www.isc.meiji.ac.jp/~be00085/2021ji2/dft/index2.html)
[2] [中山 謙二『ディジタル通信と信号処理』3章 離散フーリエ変換 （pp.58-84）](http://leo.ec.t.kanazawa-u.ac.jp/~nakayama/edu/file/signal_proc_ch3.pdf)

# 25卒向け！AIエンジニアになるための長期インターンプログラム参加者募集中！
25卒学生向けに、AIの基礎を学びながら就活も一括サポートする無料カリキュラムを提供しています。
修了するとE資格の受験資格も獲得できるプログラムとなっています！

<img width="700" alt="長期インターン" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/bfce4c26-1ebe-c54d-bacb-e804048a7a08.png">

**特長①AIエンジニアやデータサイエンティストの基礎が身に付く**
AIジェネラリスト基礎講座や機械学習のためのPython入門講座など、市場価値向上のための基礎を習得。

**特長②AI・データ分析領域の優良求人を紹介**
非公開求人や選考直結型インターンをご紹介し、早期内定の獲得をサポート。

**特長③長期インターンプログラム専用の学生コミュニティ参加可**
学生同士で就活情報をシェアしたり、学習を進めるうえでアドバイスをしあったりできるコミュニティに参加可能。

＞＞[長期インターン詳細](https://bit.ly/3pXW5JM)

☆☆☆
スキルアップAIのメールマガジンでは会社のお知らせや講座に関するお得な情報を配信しています。
配信を希望される方は[こちら](https://share.hsforms.com/1_XlReV-4Te-zcxCl9lhffA2mtef)

また、SNSでも様々なコンテンツをお届けしています。興味を持った方は是非チェックしてください♪
Twitterは[こちら](https://twitter.com/SkillupAi)
Facebookは[こちら](https://www.facebook.com/skillupai)
LinkedInは[こちら](https://www.linkedin.com/company/skillup-ai)