このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。
この例では、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 つの差分量の空間における多境界判定領域を使用して、次の段階で行われます。有音判定は判定領域の結合として与えられ、無音判定はその相補的な論理判定です。エネルギー量の考慮事項は、隣接する過去のフレームの判定と合わせて判定の平滑化に使用されます。移動平均は、音声がある場合ではなく、バックグラウンド ノイズがある場合にのみ更新されなければなりません。適応しきい値がテストされ、しきい値の条件が満たされた場合に限り、更新が行われます。
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 = 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);
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.38668 seconds Time taken to run the MEX-File: 0.13493 seconds Speed-up by a factor of 2.8657 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