このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
G.729 音声区間検出
この例では、ITU-T G.729 音声区間検出 (VAD) の実行方法を説明します
はじめに
音声区間検出 (VAD) は、音声符号化、音声認識、音声強調などの多くの音声/オーディオ アプリケーションにおける重要な課題です。たとえば、ITU-T G.729 規格では、VAD モジュールを使用して無音区間の伝送速度を低減しています。
アルゴリズム
1 段目で、4 つのパラメーター特性が入力信号から抽出されます。抽出されるパラメーターは、全帯域フレーム エネルギー、低帯域フレーム エネルギー、線スペクトル周波数 (LSF) のセットおよびフレームのゼロクロッシング率です。フレーム番号が 32 より小さい場合には、長期間平均の初期化段階が発生し、LPC 解析のフレーム エネルギーが 21 dB を超えた場合には、有音判定は強制的に 1 となります。それ以外の場合、有音判定は強制的に 0 となります。フレーム番号が 32 と等しい場合、バックグラウンド ノイズ特有のエネルギーの初期化段階が発生します。
次の段階では、差分パラメーターのセットが計算されます。このセットは、現フレームのパラメーターとバックグラウンド ノイズ特性のランニング平均との間の差分量として生成されます。次の 4 つの差分量が計算されます。
a) A spectral distortion
b) An energy difference
c) A low-band energy difference
d) A zero-crossing difference
最初の有音判定は、4 つの差分量の空間における多境界判定領域を使用して、次の段階で行われます。有音判定は判定領域の結合として与えられ、無音判定はその相補的な論理判定です。エネルギー量の考慮事項は、隣接する過去のフレームの判定と合わせて判定の平滑化に使用されます。ランニング平均は、音声がある場合ではなく、バックグラウンド ノイズがある場合にのみ更新されなければなりません。適応しきい値がテストされ、しきい値の条件が満たされた場合に限り、更新が行われます。
VAD 実装
vadG729 はアルゴリズムの実装を含む関数です。
初期化
音源をセットアップします。この例ではオーディオ ファイル リーダーを使用します。
audioSource = dsp.AudioFileReader(SamplesPerFrame=80,... Filename='speech_dft_8kHz.wav',... OutputDataType='single'); % Note: You can use a microphone as a source instead by using an audio % device reader (NOTE: audioDeviceReader requires an Audio Toolbox % (TM) license) % audioSource = audioDeviceReader(OutputDataType='single', ... % NumChannels=1, ... % SamplesPerFrame=80, ... % SampleRate=8000); % Create a time scope to visualize the VAD decision (channel 1) and the % speech data (channel 2) scope = timescope(SampleRate=[8000/80 8000], ... TimeSpanSource='property', ... TimeSpan=10, ... YLimits=[-0.3 1.1], ... Title='Decision speech and speech data', ... TimeSpanOverrunAction='Scroll');
ストリーム処理ループ
% Initialize VAD parameters VAD_cst_param = vadInitCstParams; clear vadG729 % Run for 10 seconds numTSteps = 1000; while(numTSteps) % Retrieve 10 ms of speech data from the audio recorder speech = audioSource(); % Call the VAD algorithm decision = vadG729(speech, VAD_cst_param); % Plot speech frame and decision: 1 for speech, 0 for silence scope(decision, speech); numTSteps = numTSteps - 1; end release(scope);
クリーンアップ
オーディオ入力デバイスの終了とリソースの解放
release(audioSource);
MEX ファイルの生成と使用
MATLAB Coder を使用して、関数 vadG729 の C コードを生成できます。MEX ファイルを生成するには、以下のコマンドを実行します。
codegen vadG729 -args {single(zeros(80,1)), coder.Constant(VAD_cst_param)}
Code generation successful.
速度の比較
MEX ファイルを作成すると、シミュレーションの実行時間が短縮されることが多くあります。次のコード行は、はじめに MATLAB 関数でかかる時間を測定し、次に対応する MEX ファイルの実行時間を測定します。高速化係数は、マシンによって異なる場合があることに注意してください。
audioSource = dsp.AudioFileReader('speech_dft_8kHz.wav', ... SamplesPerFrame=80, ... OutputDataType='single'); clear vadG729 VAD_cst_param = vadInitCstParams; tic; while ~isDone(audioSource) speech = audioSource(); decision = vadG729(speech, VAD_cst_param); end t1 = toc; reset(audioSource); tic; while ~isDone(audioSource) speech = audioSource(); decision = vadG729_mex(speech, VAD_cst_param); end t2 = toc; disp('RESULTS:')
RESULTS:
disp(['Time taken to run the MATLAB code: ', num2str(t1), ' seconds']);
Time taken to run the MATLAB code: 1.1096 seconds
disp(['Time taken to run the MEX-File: ', num2str(t2), ' seconds']);
Time taken to run the MEX-File: 0.27497 seconds
disp(['Speed-up by a factor of ', num2str(t1/t2),... ' is achieved by creating the MEX-File']);
Speed-up by a factor of 4.0353 is achieved by creating the MEX-File
参照
[1] ITU-T Recommendation G.729 - Annex B: A silence compression scheme for G.729 optimized for terminals conforming to ITU-T Recommendation V.70