私はMatlabを初めて使用し、単純な周波数ベースの音声検出アルゴリズムを作成しようとしています。最終的な目標は、wav ファイルでスクリプトを実行し、各音声セグメントの開始/終了時間を出力させることです。コードを使用する場合:
fr = 128;
[ audio, fs, nbits ] = wavread(audioPath);
spectrogram(audio,fr,120,fr,fs,'yaxis')
次のような有用な周波数強度対時間グラフを取得します。
それを見ると、発話がいつ発生するかが非常に簡単にわかります。各 x 軸フレームを見て、どの周波数が優勢な (強度が最も高い) かを判断し、優勢な周波数が十分に特定の強度しきい値 (グラフの黄色と赤の違い)、そのフレームを音声または非音声としてラベル付けします。フレームにラベルが付けられると、各音声セグメントの開始/終了時間を簡単に取得できます。
私の問題は、そのデータにアクセスする方法がわからないことです。コードを使用できます:
[S,F,T,P] = spectrogram(audio,fr,120,fr,fs);
スペクトログラムのすべての機能を取得しますが、そのコードの結果は私には意味がありません. S、F、T、P 配列と行列の境界は、グラフに表示されるものとは相関しません。ヘルプ ファイルと API を調べましたが、アルゴリズムの名前と頭字語が飛び交うと混乱します。私の DSP のバックグラウンドはかなり限られています。
このスペクトログラム分析の各フレームの周波数強度値の配列を取得するにはどうすればよいですか? そこから残りを理解できます。適切なデータを取得する方法を知る必要があるだけです。