Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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