2019年12月20日pythonで簡単な音声認識をやってみたいぞ。そもそも何から始めればいいのかしら。今回は,基本的な音声認識をpythonで行う方法をお伝えしていこうと思います。本記事はpython実践講座シリーズの内容になります。その他の記事は,こちらの「Python入門講座/実践講座まとめ」をご覧ください。9.リスト...コーディングに関して未熟な部分がたくさんあると思いますので,もし何かお気づきの方は教えていただけると幸いです。誤りについてもご指摘していただけると非常に助かります。お題STFTをpythonで実装してみよう。流れ今回対象とするデータは「あいうえお」ではなく,データ長が2をべき乗に制限した「ドレミファソラシド」にしようと思います。以下のファイルを対象とします。データ長を調整したドレミファソラシド短時間フーリエ変換の概要STFTの簡単な概要は以下のページで説明しています。ここでは,実装方法をメインにお伝えしていこうと思います。時間周波数分解能の異なるメル」周波数スペクトログラムを抽出したいゾ。前提として,窓関数は既成のライブラリを使用します。FFTの実装はこちらのページで説明しているものを利用します。wavファイルの読み込みと書き出しにはlibrosaを利用します。XSTFTの定義librosaの公式ドキュメントにもある通り,librosaのSTFTでは窓関数を端っこに適用するときは反転パディングを行っています。今回もそれに習いましょう。実信号に対するFFTの結果が対象であることに注意して,後ろ半分の情報を捨ててしまうように実装しています。今回はwin=Mとして実装。データサイズも簡単のため2のべき乗に制限。hopはデフォルトで窓幅の半分とする。窓関数をかける時に端点が問題になります。今回はlibrosaのデフォルトに習って反転パディングをしてみます。次にFFTを実行します。[path_to_wavfile]は皆さんの環境に合わせて変更してください。librosa.load("[path_to_wavfile]")STFTの実行スペクトログラムの描画にはlibrosaを使います。こちらのページでdb(デシベル)への変換は説明していますので,今回は振幅からdbへの変換はlibrosaに頼ってしまいます。短時間フーリエ変換の逆変換を実装するのも,よい練習になります。今回私も実装してみたのですが,復元された「ドレミファソラシド」の音質が非常に悪くなってしまいました。あとでlibrosaの逆変換と比べてみます。高速フーリエ変換の逆変換はこちらのページで説明しています。そのままのコードを記しておきます。X.conjugate()こちらのIFFTを利用して,本当に文字通りSTFTとは反対の操作を施していきます。STFTでFFTの結果の半分を捨てていましたので対称性に気をつけながら復元します。x結果まず,librosaで復元した音源を聞いてみましょう。次に,自作関数による復元結果を聞いてみましょう。最後に「np.asfortranarray」でfortranarrayに変換しておかないとエラーを吐くので注意です。sr)自作関数による復元結果。1MBにもなってしまったので圧縮をかけました。圧縮をかける前後は音質にほとんど変わりはありませんでしたので,こちらが復元結果のほぼオリジナルの音質です。同じディジタル信号処理のはずなのに,なぜここまで差が出るのかについては要検討です。Beginaidアカデミック【超初心者向け】PyTorchのチュートリアルを読み解く。コメントをキャンセルメールアドレスが公開されることはありません。付いている欄は必須項目です過去問解説販売中!zuka京都大学で機械学習を学んでいます。iBTの出題形式が大幅変更!新テストの注意点まとめ。