6.7.38 VADZC

6.7.38.1 ノードの概要

マルチチャネル音声波形データの各チャネルに対し,振幅レベルと零交差(ZeroCross)数について指定した閾値よりも高いか否かを判定する事により音声区間検出 (Voice Activity Detection: VAD) を行う.

例えば,ハンディマイクを複数接続出来るオーディオデバイスの各マイクチャネルの音声区間検出を独立かつ同時に行うなどの用途で使用する事が出来る.

また,マイクアレイのシングルマイクチャネルを取り出して分離音と音声認識性能を比較するといった用途にも使用できる.

6.7.38.2 必要なファイル

無し.

6.7.38.3 使用方法

どんなときに使うのか

このノードは,マルチチャネル音声波形データの各チャネルにおける音声区間をある程度知ることが出来る. 音声区間の検出は振幅レベルと零交差数の閾値を用いて行う. 本ノードから出力される音声区間検出された音響信号 Map<int, ObjectRef> (ObjectRef は Vector<float> )と音声区間検出結果(定位結果と同じ Vector<ObjectRef> 型 (ObjectRef は Source 型)として得られる)が,後段の特徴量抽出などに利用される.

典型的な接続例

VADZC ノードの接続例を図6.150 に示す.

入力は, AudioStreamFromWave や AudioStreamFromMic などから出力される Matrix<float> 型の多チャネル音響信号データである. また出力は, Map<int, ObjectRef> 型(ObjectRef は Vector<float> 型)の音声区間検出された音響信号データと Vector<ObjectRef> 型(ObjectRef は Source 型)の音声区間検出結果であり, MultiFFT や SaveWavePCM など Map<int, ObjectRef> 型の音響信号入力に対応したノード, SpeechRecognitionClient や SaveWavePCM など音源情報入力に対応したノードへそれぞれ入力される.

\includegraphics[width=.8\textwidth ]{fig/modules/VADZC}
Figure 6.150: VADZC の接続例

6.7.38.4 ノードの入出力とプロパティ

入力

INPUT

: 型は Matrix<float> .マルチチャネル音声波形データ. 行列のサイズが $M \times L$ のとき,$M$ がチャネル数, $L$ が波形のサンプル数を表す. $M$ は,パラメータ CHANNEL_COUNT と値が等しい必要がある. $L$ は,パラメータ LENGTH と値が等しい必要がある.

出力

OUTPUT

: 型は Map<int, ObjectRef> . 音声区間検出されたPCMデータ. Object 部分は Vector<float> 型となる.

SOURCES

: Vector<ObjectRef> 型で音声区間検出結果に一意に振られるID(チャネル番号と音声インデックス)を表す. ObjectRef は, Source であり, $マイク数 \times 音声インデックス + マイクインデックス$ がIDに格納されている. 構造体を流用しているだけであり,その他に格納された値はダミーである.

パラメータ

Table 6.145: VADZC のパラメータ表

パラメータ名

デフォルト値

単位

説明

ADVANCE

int 

160

[pt]

フレームのシフト長

LENGTH

int 

512

[pt]

フレームのサンプル数

CHANNEL_COUNT

int 

0

[ch]

入力チャネル数

SAMPLING_RATE

int 

16000

[Hz]

サンプリングレート

STRIP_ZERO

bool 

true

[pt]

振幅零のサンプル除去機能の有無

ZERO_MEAN

bool 

false

 

直流(DC)成分除去機能の有無

LEVEL_THRESHOLD

float 

2000

 

無音カット閾値(振幅レベル)

ZEROCROSS_THRESHOLD

int 

60

 

無音カット閾値(零交差数)

HEAD_MARGIN

float 

300

[ms]

音声区間開始部のマージン

TAIL_MARGIN

float 

400

[ms]

音声区間終了部のマージン

ADVANCE

: 型は int . デフォルト値は160. フレームのシフト長を指定する.

LENGTH

: 型は int . デフォルト値は512. フレームのサンプル数を指定する. INPUT端子に入力される Matrix<float> の列数と等しい必要がある. 一致しない場合は例外が発生する.

CHANNEL_COUNT

: 型は int . デフォルト値は0. チャネル数を指定する. INPUT端子に入力される Matrix<float> の行数と等しい必要がある. 一致しない場合は例外が発生する.

SAMPLING_RATE

: 型は int . デフォルト値は16000. サンプリングレートを指定する.

STRIP_ZERO

: 型は bool . デフォルト値は true. 音声波形に含まれる振幅0が継続するフレームを除外する機能の有効(true)/無効(false)を指定する. 現在未使用.

ZERO_MEAN

: 型は bool . デフォルト値は false. 音声波形に含まれる直流(DC)成分を除去する機能の有効(true)/無効(false)を指定する. 機能が trueで有効化された場合,最初のフレームに含まれるサンプルから直流(DC)成分を算出し, 各フレームのDCオフセットを除去する.音声区間検出の前段で(入力バッファに対して)処理される.

LEVEL_THRESHOLD

: 型は float . デフォルト値は2000. 振幅レベルによる無音カット閾値を指定する. デフォルト値の2000は16bit符号付き整数の0〜32767が入力された場合における目安として設定している. MultiGain ノードなどによる浮動小数点数でのスケーリングを考慮し float 型で設定できるようしている.

ZEROCROSS_THRESHOLD

: 型は int . デフォルト値は60. 零交差数による無音カット閾値を1秒あたりの零交差数で指定する.

HEAD_MARGIN

: 型は int . デフォルト値は300. 音声区間開始部のマージンをミリ秒で指定する.

TAIL_MARGIN

: 型は int . デフォルト値は400. 音声区間終了部のマージンをミリ秒で指定する.

6.7.38.5 ノードの詳細

音声区間を検出する条件について:

音響信号の振幅レベル(LEVEL_THRESHOLD)と零交差数(ZEROCROSS_THRESHOLD)の両方が パラメータで指定された閾値を超えたフレームを音声区間開始とし, いずれか一方の閾値を下回ったフレームで音声区間終了となる. また,図6.151に示す通り区間の開始と終了にはマージンを設ける事が出来る.

\includegraphics[width=0.9\textwidth ]{fig/modules/VADZC-detect-rescale}
Figure 6.151: 音声区間の検出

例として,LEVEL_THRESHOLDが2000,ZEROCROSS_THRESHOLDが60の場合に次の2つの条件では音声区間検出されない.

6.152は振幅レベル約±1600の440[Hz]のSin波がフェードイン,フェードアウトしている例である. 零交差数は充分であるが,振幅レベルがLEVEL_THRESHOLD未満であるため検出されない事を示す.

6.153は振幅レベル約±26000の22[Hz]のSin波がフェードイン,フェードアウトしている例である. 振幅レベルは充分であるが,零交差数がZEROCROSS_THRESHOLD未満であるため検出されない事を示す.(Sin波が30[Hz]未満の場合に零交差数が60未満となる)

\includegraphics[width=0.9\textwidth ]{fig/modules/VADZC-low-level}
Figure 6.152: 振幅レベル不足で検出されない例
\includegraphics[width=0.9\textwidth ]{fig/modules/VADZC-low-freq}
Figure 6.153: 零交差数不足で検出されない例

振幅0フレームの除去機能について:

振幅0フレーム除去機能のための STRIP_ZERO パラメータが存在しますが,使用されておらず設定値は無視されます. STRIP_ZERO パラメータは今後のバージョンで削除される可能性があります.

直流(DC)成分除去機能について:

6.154は入力される音響信号に直流(DC)成分が含まれる場合に直流(DC)成分除去を行う例である.

図の上段が入力される音響信号である.音響信号は振幅レベル約±16000の440[Hz]のSin波がフェードイン,フェードアウトしているものであるが,直流(DC)成分が定常的におよそ+6500含まれる例である.

図の中段は除去される直流(DC)成分を示しており,音響信号の入力が開始され最初のフレームを用いて算出された約+6500の直流(DC)成分を以降のフレームで継続的に除去し続ける.

図の下段が音声区間検出を実際に行う対象の音響信号であり,直流成分が除去されたことで正しく零交差数を求めることが出来る事を示す.

\includegraphics[width=0.9\textwidth ]{fig/modules/VADZC-dc-offset}
Figure 6.154: 直流成分の除去(上:入力された音響信号,中:除去される直流成分,下:VADする対象の音響信号)