フレーム処理

目的

ここまでは,音声データの一部を取り出し処理を行った.音声は時系列データであるため,通常は時間方向に繰り返し処理を行う必要がある.ここでは,時間方向に繰り返し処理を行うフレーム処理について学ぶ.

説明

フレーム処理

音声データの一部に窓関数をかけて取り出したものをフレームと呼び,1フレームの時間長をフレーム長と呼ぶ.通常はフレームの一部を重ねながら時間方向にずらし,フレーム毎に処理を行う.フレームをずらす時間長をフレーム周期と呼ぶ.例えば,フレーム長64ms,フレーム周期32msとすると,64msを1フレームとして処理を行い,フレーム長の半分を重ねながら時間方向に処理を繰り返すことになる.

短時間フーリエ変換とスペクトログラム

音声データに対してフレーム処理を行い,フレーム毎の短時間のデータに離散フーリエ変換をかけ,スペクトルを求め,フレームをずらしながら繰り返し処理を行うことで,時系列のスペクトルが得られる.横軸に時間を,縦軸に周波数をとり,振幅やパワーを輝度や色で表現したものをスペクトログラムと呼ぶ.

「あいうえお」と連続して発声した音声データからフレーム長を64ms,フレーム周期を8msとしてフレーム処理を行い,スペクトログラムを描画してみよう.

33行目から36行目で発話区間を切り出し,グラフの横軸のデータを作成している.38行目でフレーム長を64msとし,39行目でフレーム周期を8msとしている.40,41行目でフレーム長とフレーム周期に対応する標本点数を求めている.44,45行目でフレーム長のデータをフレーム周期だけずらしながら切り出し,Hanning Windowをかけている.46,47行目で対数パワーを求め,42行目で初期化したリストに追加し,49行目でndarrayに変換し,50行目で行と列を入れ替えている.また,スペクトログラムの横軸のデータを作るために,43行目で初期化したリストに48行目で時間を追加している.62行目から72行目でスペクトログラムを描画している.

実行すると以下のように表示され,「あいうえお」それぞれの領域でスペクトルが変化している様子が確認できる.

基本周波数の推定

日本語母音の「あ」を発声し,声の高さを2段階高くし,その後2段階に低くした音声データに対して,フレーム処理を行い,各フレームで基本周波数を求めてみよう.

自己相関関数

自己相関関数により各フレームの基本周波数を求めるには以下のようにすればよい.

38行目から41行目でフレーム長とフレーム周期を指定し,それらに対応する標本点数を求めている.48,49行目でフレーム長のデータをフレーム周期だけずらしながら切り出し,50,51行目で自己相関関数を求めている.44行目から47行目で指定したしきい値の範囲で最大となる時間を52,53行目で求め,基本周期としている.42,43行目で初期化したリストに54行目で基本周波数を,55行目で時間を保存している.66行目から70行目で求めた基本周波数を描画している.

実行すると以下のように表示され,基本周波数が2段階高くなり,その後2段階低くなっていることが確認できる.

ケプストラム

ケプストラムにより各フレームの基本周波数を求めるには以下のようにすればよい.

38行目から41行目でフレーム長とフレーム周期を指定し,それらに対応する標本点数を求めている.48,49行目でフレーム長のデータをフレーム周期だけずらしながら切り出し,Hanning Windowをかけ,50行目から53行目でケプストラムの対数パワーを求めている.44行目から47行目で指定したしきい値の範囲で最大となる時間を54,55行目で求め,基本周期としている.42,43行目で初期化したリストに56行目で基本周波数を,57行目で時間を保存している.68行目から72行目で求めた基本周波数を描画している.

実行すると以下のように表示され,基本周波数が2段階高くなり,その後2段階低くなっていることが確認できる.

日本語5母音の類似度

「あいうえお」と連続して発声した音声データに対してフレーム処理を行い,スペクトル包絡の特徴を抽出し,日本語5母音の音声データから抽出したスペクトル包絡の特徴との類似度を求めてみよう.

ケプストラム

ケプストラムを用いて各フレームのスペクトル包絡を求め,日本語5母音の音声データから抽出したスペクトル包絡の特徴との類似度を求めるには,以下のようにすればよい.

45行目から54行目で日本語5母音の音声データのURLとファイル名を指定し,60行目から65行目で各データを読み込み,66行目で発話区間のデータを求めている.56,57行目でフレーム長とフレーム周期を指定し,それに対応する標本点数を67,68行目で求めている.69,70行目で発話区間の中央のデータをフレーム長分だけ取り出し,Hanning Windowをかけている.71行目でケプストラムを,72行目でスペクトル包絡を求め,59行目で初期化したリストに73行目で追加している.74行目でリストをndarrayに変換している.

76行目から80行目で「あいうえお」と発話した音声データをダウンロードし,読み込み,81行目で発話区間を求め,82,83行目でグラフの横軸のデータを作っている.86,87行目で指定したフレーム長のデータをフレーム周期だけずらしながら取り出し,Hanning Windowをかけている.88行目でケプストラムを,89行目でスペクトル包絡を求め,84行目で初期化したリストに90行目で追加し,92行目でndarrayに変換している.また,85行目で初期化したリストに91行目で時間を追加し,グラフを描くときに使用している.

94行目で日本語5母音の音声データから抽出したスペクトル包絡の特徴と,「あいうえお」と発話した音声の各フレームのデータから抽出したスペクトル包絡の特徴とのコサイン類似度を求めている.105行目から111行目でコサイン類似度を描画している.

実行すると以下のように表示され,「あ」と発声している区間では「あ」との類似度が高く,「い」と発声している区間では「い」との類似度が高くなっていることがわかる.また,「あ」と「お」は類似度が高く,「い」と「え」や「う」と「え」も類似度が高いことがわかる.

LPC

LPCを用いて各フレームのスペクトル包絡を求め,日本語5母音の音声データから抽出したスペクトル包絡の特徴との類似度を求めるには,以下のようにすればよい.

ケプストラムを用いた場合との違いは,スペクトル包絡の特徴を抽出する部分だけである.66,67行目で日本語5母音の音声データからLPC係数を求め,スペクトル包絡の特徴を抽出している.また,83,84行目で「あいうえお」と発話した音声の各フレームのデータからLPC係数を求め,スペクトル包絡の特徴を抽出している.

実行すると以下のように表示され,「あ」と発声している区間では「あ」との類似度が高く,「い」と発声している区間では「い」との類似度が高くなっていることがわかる.また,「あ」と「お」は類似度が高く,「い」と「え」や「う」と「え」も類似度が高いことがわかる.

課題

以下の音声データを使用して課題を行え.

  • 「あいうえお」と連続して発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/aiueo.wav
  • 声の高さを変えて「あ」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/a_pitch.wav
  • 「あ」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/a_normal.wav
  • 「い」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/i_normal.wav
  • 「う」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/u_normal.wav
  • 「え」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/e_normal.wav
  • 「お」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/o_normal.wav
  • 高い声で「あ」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/a_high.wav
  • 低い声で「あ」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/a_low.wav
  • 高い声で「い」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/i_high.wav
  • 低い声で「い」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/i_low.wav
  • 高い声で「う」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/u_high.wav
  • 低い声で「う」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/u_low.wav
  • 高い声で「え」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/e_high.wav
  • 低い声で「え」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/e_low.wav
  • 高い声で「お」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/o_high.wav
  • 低い声で「お」と発声している音声データ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/05/o_low.wav

課題0

「あいうえお」と連続して発声している音声データの発話区間のスペクトログラムを表示せよ.

課題1

声の高さを変えて「あ」と発声している音声データの発話区間のスペクトログラムを表示せよ.

課題2

声の高さを変えて「あ」と発声している音声データに対してフレーム処理を行い,各フレームの基本周波数を自己相関関数を用いて推定せよ.

課題3

声の高さを変えて「あ」と発声している音声データに対してフレーム処理を行い,各フレームの基本周波数をケプストラムを用いて推定せよ.

課題4

「あいうえお」と連続して発声した音声データに対してフレーム処理を行い,ケプストラムを用いてスペクトル包絡の特徴を抽出し,日本語5母音の音声データから抽出したスペクトル包絡の特徴との類似度を求めよ.

課題5

「あいうえお」と連続して発声した音声データに対してフレーム処理を行い,LPCを用いてスペクトル包絡の特徴を抽出し,日本語5母音の音声データから抽出したスペクトル包絡の特徴との類似度を求めよ.