n4okins / Sinusoidal Frequency Estimation by Gradient Descent

Created Tue, 11 Jun 2024 02:47:34 +0900 Modified Tue, 11 Jun 2024 02:47:34 +0900

概要

勾配降下により求めた複数の正弦波の組み合わせで周波数推定を行う手法だそうです。 学習可能パラメータとして、正弦波の周波数、振幅、位相があり、これらを複素数表現にしたうえで最適化することで周波数推定を行います。

上記の記事で紹介された情報、行われていた実験を参考に、a, e, i, o, uの5つの母音の音声データの周波数推定の様子を可視化し、推測した音声データを生成してみました。

以下がその結果です。

左側にオリジナルの音声データのプロットと、各エポック時点での推定した音声データのプロットを表示しています。

右側には各エポック時点で推定に使用された正弦波(256個)それぞれの波形を表示しています。

実験

実験に使ったコードはこちら。

データセット

  • 上記に含まれるa, e, i, o, uの5つの母音の音声データ
  • 16000Hzにリサンプリング
  • 長さ2048のフレームを切り出し、正弦波の周波数、振幅、位相を推定
  • 5つの母音それぞれについて学習、推定 オリジナルの音声データと推定した音声データを比較し、さらに学習の様子を可視化

aの推定

  • オリジナル

  • 推定

  • 学習の様子

eの推定

  • オリジナル

  • 推定

  • 学習の様子

iの推定

  • オリジナル

  • 推定

  • 学習の様子

oの推定

  • オリジナル

  • 推定

  • 学習の様子

uの推定

  • オリジナル

  • 推定

  • 学習の様子

まとめ

最初はLoss(二乗和誤差)も大きいため、正弦波同士を打ち消し合うように学習が進み、続いて位相を調整しているように見えます。今回は256個の正弦波を使用していますが、可視化した右側の結果を見るとほとんど変化のない正弦波も見られたため、母音の音声データを表現するためには過剰だったかもしれません。

音声の知識はあまりないですが、パラメータの調整で任意の音声を生成出来そうなのは面白そうです。