以下の課題を実施して、略式レポート(表紙ページは不要)にまとめて提出するか、口頭試問による実演をおこなえ。
レポートの場合はプログラムリストとその説明(コメントでもよい)を必ず掲載すること。
Labo Aを実行せずに過去の受講者等が収録した音声データを利用してもよいが、その場合はレポートの謝辞として必ず音声提供者の氏名を記載すること.
なお,他の受講者と異なるプログラムであれば,他の受講者と同一の音声ファイルを用いた結果を提出しても良い.(連名化ルールの例外措置)
音声ファイル(.le)を入力として、その音声ファイルのSNRを出力するプログラムを作成せよ。
SNRの計算は、GMMを学習してその分布パラメータを利用して求めること。
なお、簡単のために以下の条件でプログラムを作成して構わない。
音声の分析
- Labo Xのプログラムを流用する
- 演習3A-2の分析パラメータ固定で、#defineなどの定数宣言をする
GMMのEM学習
- 入力を1次元とみなす
- 2混合GMMだけが求められる
- 再学習は最高でも100回で打ち切る
- 初期値(特に平均値の)をプログラム内で適当に与える、あるいは、引数として入力させる
SNRの計算
- パワーの強いものを音声と仮定する
ヒント:おおよその手順
- 音声ファイルの読み込み
- フレームパワー[dB]の系列に変換
- Labo Xのパラメータを演習3A-2の値に変更する
- フレームパワーの分布を2混合のGMMとして推定
- 初期値の計算
(- 重みベクトル、平均ベクトル、分散ベクトルをデバッグ用に表示する)
- 重みの計算 → 平均ベクトル・分散ベクトルの計算 → 重みの計算 → ・・・
- 二つの分布の平均値の差分(の絶対値)を求める。
自作したプログラムを利用して、Labo1で収録した音声ファイル(コマンド文5文)のSNRを計算して表にまとめよ。
なお、ほとんど雑音の入らない環境で収録した場合、計算が収束しない事もあり得る。
その場合は、レポートには注意書きをした上で Labo B と同等の音声ファイルの平均パワーそのものを記載しても構わない。
ヒント:
引数に入力ファイル名を与えるようにプログラムを作った場合、デバイスファイル /dev/stdin や /dev/stdout を使えばSPTKのようにパイプで接続することも出来る。
例えば、自作プログラムがgmmという名前で、第一引数にファイル名を取る場合、
sox ../speech/command/c1-01.wav -t raw /dev/stdout | ./gmm /dev/stdin
などの書き方が考えられる。