最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

G.729 音声区間検出

この例では、ITU-T G.729 音声区間検出 (VAD) の実行方法を説明します

はじめに

音声区間検出 (VAD) は、音声符号化、音声認識、音声強調などの多くの音声/オーディオ アプリケーションにおける重要な課題です。たとえば、ITU-T G.729 規格では、VAD モジュールを使用して無音区間の伝送速度を低減しています。

アルゴリズム

最初の段階で、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 System 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 = dsp.TimeScope(2, 'SampleRate', [8000/80 8000], ...
                      'BufferLength', 80000, ...
                      'YLimits', [-0.3 1.1], ...
                      'ShowGrid', true, ...
                      '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)}

速度の比較

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:')
disp(['Time taken to run the MATLAB code: ', num2str(t1), ' seconds']);
disp(['Time taken to run the MEX-File: ', num2str(t2), ' seconds']);
disp(['Speed-up by a factor of ', num2str(t1/t2),...
    ' is achieved by creating the MEX-File']);
RESULTS:
Time taken to run the MATLAB code: 0.35153 seconds
Time taken to run the MEX-File: 0.081699 seconds
Speed-up by a factor of 4.3028 is achieved by creating the MEX-File

参照

ITU-T Recommendation G.729 - Annex B: A silence compression scheme for G.729 optimized for terminals conforming to ITU-T Recommendation V.70