6.7.17 MultiDownSampler

6.7.17.1 ノードの概要

入力信号をダウンサンプリングして出力する. ローパスフィルタは窓関数法を用いており,窓関数はカイザー窓である.

6.7.17.2 必要なファイル

無い.

6.7.17.3 使用方法

どんなときに使うのか 入力信号のサンプリング周波数が 16kHz でない場合等に用いる. HARKノードは基本的にサンプリング周波数を 16kHz と仮定している. そのため,入力信号が 48kHz であったりする場合には, ダウンサンプリングを行ない,サンプリング周波数を 16kHz まで下げる必要がある.

注意1(ADVANCE の値域): 処理の都合上,前段の入力ノード, 例えば,AudioStreamFromMic や AudioStreamFromWave のパラメータ設定に制限を設ける. それらのパラメータ,LENGTH と ADVANCE の差: OVERLAP = LENGTH - ADVANCE,は十分大きな値でなければならない. より具体的には,このノードのローパスフィルタ長 $N$ より大きな値でなけらばならない. このノードのデフォルトの設定では,おおよそ 120 以上あれば十分であるので, ADVANCE が LENGTH の 4分の1以上なら問題は起きないであろう.また,次の注意2 の要求も満す必要がある.

注意2(ADVANCE 値の設定): このノードの ADVANCE は,後段ノード(GHDSS など)における ADVANCE 値の SAMPLING_RATE_IN / SAMPLING_RATE_OUT 倍に 設定する必要がある.これは仕様であり,これ以外の値に設定したときの動作は保証しない. 例えば,後段ノードで ADVANCE = 160 に設定されている場合かつ SAMPLING_RATE_IN / SAMPLING_RATE_OUT = 3 である場合, このノードや前段ノードの ADVANCE は 480 に設定する必要がある.

注意3(前段ノードでの LENGTH 値の要求): このノード以前(AudioStreamFromMic など)における LENGTH 値も, 後段ノード(GHDSS など)での値のSAMPLING_RATE_IN / SAMPLING_RATE_OUT 倍に設定しておくことを要求する. 例えば,SAMPLING_RATE_IN / SAMPLING_RATE_OUT = 3 なら, GHDSS で LENGTH = 512,ADVANCE = 160 に設定されているなら, AudioStreamFromMic では LENGTH = 1536,ADVANCE = 480 に設定するのが望ましい.

典型的な接続例 下記に典型的な接続例を示す. このネットワークファイルは,Wave ファイル入力を読み込み,ダウンサンプルを行ない, Raw ファイルで保存を行なう. Wave ファイル入力は Constant ,InputStream , AudioStreamFromMic ,を繋ぐことで実現される. その後,MultiDownSampler によって,ダウンサンプリングを実行し, SaveRawPCM で出力波形を保存する.

\includegraphics[width=0.7\linewidth ]{fig/modules/MultiDownSamplerMain}
Figure 6.105: MultiDownSampler の接続例: Main ネットワーク
\includegraphics[width=\linewidth ]{fig/modules/MultiDownSamplerLOOP0}
Figure 6.106: MultiDownSampler の接続例: Iteration(LOOP0) ネットワーク

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

入力

INPUT

: Matrix<float> 型. マルチチャネル音声波形データ(時間領域波形).

出力

OUTPUT

: Matrix<float> 型.ダウンサンプルされたマルチチャネル音声波形データ(時間領域波形).

Table 6.106: MultiDownSampler のパラメータ表

パラメータ名

デフォルト値

単位

説明

ADVANCE

int 

480

[pt]

INPUT 信号でのイタレーション毎にフレームをシフトさせる長さ.特殊な設定が必要であるので,パラメータ説明を参考にすること.

SAMPLING_RATE_IN

int 

48000

[Hz]

INPUT 信号のサンプリング周波数.

SAMPLING_RATE_OUT

int 

16000

[Hz]

OUTPUT 信号のサンプリング周波数.

Wp

float 

0.28

[$\frac{\omega }{2\pi }$]

ローパスフィルタ通過域端.INPUT を基準とした正規化周波数 [0.0 – 1.0] の値で指定.

Ws

float 

0.34

[$\frac{\omega }{2\pi }$]

ローパスフィルタ阻止域端.INPUT を基準とした正規化周波数 [0.0 – 1.0] の値で指定.

As

float 

50

[dB]

阻止域最小減衰量.

パラメータ 各パラメータはローパスフィルタ,ここではカイザー窓の周波数特性を定めるものが多い. 図6.107 に記号とフィルタ特性の関係を示すので, 対応関係に注意して読み進めること.

ADVANCE

: int 型.480 がデフォルト値.音声波形に対する処理のフレームを,波形の上で シフトする幅をサンプル数で指定する. ただし,INPUT 以前のノードで設定されている値を用いる. 注意: OUTPUT 以降で設定されている値の SAMPLING_RATE_IN / SAMPLING_RATE_OUT 倍の値に設定する必要がある.

SAMPLING_RATE_IN

: int 型.48000 がデフォルト値.入力波形のサンプリング 周波数を指定する.

SAMPLING_RATE_OUT

: int 型.16000 がデフォルト値.出力波形のサンプリング 周波数を指定する. この時,SAMPLING_RATE_IN の整数分の一の値しか対応できないことに注意が必要.

Wp

: float 型.デフォルト値は 0.28.ローパスフィルタ通過域端周波数を INPUT を基準とした正規化周波数 [0.0 – 1.0] の値によって指定する. 入力のサンプリング周波数が 48000 [Hz] で,0.28 の値に設定した場合, 約 $48000 * 0.28 = 13440$ [Hz] から, ローパスフィルタのゲインが減少しはじめる.

Ws

: float 型.デフォルト値は 0.34.ローパスフィルタ阻止域端周波数を INPUT を基準とした正規化周波数 [0.0 – 1.0] の値によって指定する. 入力のサンプリング周波数が 48000 [Hz] で,0.34 の値に設定した場合, 約 $48000 * 0.34 = 16320$ [Hz] から, ローパスフィルタのゲインが安定しはじめる.

As

: float 型.デフォルト値は 50.阻止域最小減衰量を [dB] で表現した値. デフォルト値を用いた場合,阻止帯域のゲインは通過帯域を 0 とした場合,約 -50 [dB] となる.

ここで,Wp,Ws,As の値をシビアに設定,例えば,Wp,Ws を遮断周波数 $Ws$ 近くに設定すると カイザー窓の周波数特性精度が向上する.しかし,ローパスフィルタの次元が増大し, 処理時間の増大を招く.この関係はトレードオフである.

\includegraphics[width=0.99\linewidth ]{fig/modules/MDS_DefaultProperty.eps}
Figure 6.107: デフォルト設定のフィルタ特性: 横軸 正規化周波数 [$\omega /2\pi $],縦軸 ゲイン [dB]

6.7.17.5 ノードの詳細

MultiDownSampler は,マルチチャネル信号をカイザー窓を用いたローパスフィルタによって帯域制限を行い, ダウンサンプリングを行なうノードである. 具体的には 1) カイザー窓,2) 理想低域応答,の合成によって FIR ローパスフィルタを作成・ 実行した後,${SAMPLING\_ RATE\_ OUT} / {SAMPLING\_ RATE\_ IN}$ のダウンサンプルを行なう.

FIR フィルタ: 有限インパルス応答 $h(n)$ を用いたフィルタリングは次式によって行なわれる.

  $\displaystyle s_{{out}}(t) = \sum _{i = 0}^{N} h(n) s_{{in}}(t-n) $   (159)

ここで,$s_{{out}}(t)$ は出力信号,$s_{{in}}(t)$ は入力信号である.

マルチチャネル信号の場合は,各チャネルの信号に対して独立にフィルタリングが行なわれる. この時,用いる有限インパルス応答 $h(n)$ は同一のものである.

理想低域応答: 遮断周波数が $\omega _ c$ である理想低域応答は以下の式によって定められる.

  $\displaystyle H_ i(e^{j\omega }) = \left\{ \begin{array}{cc} 1, & |\omega | < \omega _ c \\ 0, & {otherwise} \end{array} \right. $   (160)

このインパルス応答は,

  $\displaystyle h_ i(n) = \frac{\omega _ c}{\pi } \left( \frac{sin(\omega n)}{\omega n} \right),~ ~ -\infty \leq n \leq \infty $   (161)

となる.このインパルス応答は非因果的かつ有界入力有界出力(BIBO: bounded input bounded output)安定条件を満さない.

この理想フィルタから FIR フィルタを得るには,インパルス応答を途中で打ち切る.

  $\displaystyle h(n) = \left\{ \begin{array}{ll} h_ i(n), & |n| \leq \frac{N}{2} \\ 0, & {otherwise} \end{array} \right. $   (162)

ここで $N$ はフィルタの次数である. このフィルタはインパルス応答の打ち切りによって, 通過域と阻止域にはリプルが発生する. また,阻止域最小減衰量 $As$ も約 21 dB に止まり, 十分な減衰量を得ることができない.

カイザー窓を用いた窓関数法によるローパスフィルタ: 上述の打ち切り法による特性を改善するため, 理想インパルス応答 $h_ i(n) $に窓関数 $v(n)$ を掛けた,次式のインパルス応答を代りに用いる.

  $\displaystyle h(n) = h_ i(n) v(n) $   (163)

ここではカイザー窓を用いて,ローパスフィルタを設計する. カイザー窓は次式によって定義される.

  $\displaystyle v(n) = \left\{ \begin{array}{ll} \frac{ I_0 \left( \beta \sqrt {1 - (n N / 2)^2} \right) }{I_0(\beta )}, & -\frac{N}{2} \leq n \leq \frac{N}{2} \\ 0, & {otherwise} \end{array} \right. $   (164)

ここで,$\beta $ は窓の形状を定めるパラメータ,$I_0(x)$ は 0次の変形ベッセル関数であり,

  $\displaystyle I_0(x) = 1 + \sum _{k=1}^{\infty } \left( \frac{(0.5 x)^ k}{k!} \right) $   (165)

から得られる.

パラメータ$\beta $ は低域通過フィルタで求められる減衰量に応じて決まる. ここでは下記の指標によって定める.

  $\displaystyle \beta = \left\{ \begin{array}{ll} 0.1102 (As - 8.7) & As > 50, \\ 0,5842 (As - 21)^{0.4} + 0.07886 (As - 21) & 21 < As < 50, \\ 0 & As < 21 \end{array} \right. $   (166)

残りはフィルタ次数と遮断周波数 $\omega _ c$ を定めれば,窓関数法によってローパスフィルタを実現できる. フィルタ次数 $N$ は,阻止域最小減衰量 As と遷移域 $\Delta f = (Ws - Wp) / (2\pi )$ を用いて,

  $\displaystyle N \approx \frac{As - 7.95}{14.36 \Delta f} $   (167)

と見積もる.また,遮断周波数 $\omega _ c$ を $0.5 (Wp + Ws)$ と設定する.

ダウンサンプリング: ダウンサンプリングは,ローパスフィルタを通過させた信号から SAMPLING_RATE_IN / SAMPLING_RATE_OUT のサンプル点を間引くことによって実現される. 例えば,デフォルトの設定では $48000 / 16000 = 3$ であるから, 入力サンプルを 3回に1回 取り出し,出力サンプルとすれば良い.

6.7.17.6 参考文献:

(1) 著: P. Vaidyanathan, 訳: 西原 明法, 渡部 英二, 吉田 俊之, 杉野 暢彦: “マルチレート信号処理とフィルタバンク”, 科学技術出版, 2001.