入力信号をダウンサンプリングして出力する. ローパスフィルタは窓関数法を用いており,窓関数はカイザー窓である.
無い.
どんなときに使うのか 入力信号のサンプリング周波数が 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 で出力波形を保存する.
入力
: Matrix<float> 型. マルチチャネル音声波形データ(時間領域波形).
出力
: Matrix<float> 型.ダウンサンプルされたマルチチャネル音声波形データ(時間領域波形).
パラメータ名 |
型 |
デフォルト値 |
単位 |
説明 |
ADVANCE |
480 |
[pt] |
INPUT 信号でのイタレーション毎にフレームをシフトさせる長さ.特殊な設定が必要であるので,パラメータ説明を参考にすること. |
|
SAMPLING_RATE_IN |
48000 |
[Hz] |
INPUT 信号のサンプリング周波数. |
|
SAMPLING_RATE_OUT |
16000 |
[Hz] |
OUTPUT 信号のサンプリング周波数. |
|
Wp |
0.28 |
[$\frac{\omega }{2\pi }$] |
ローパスフィルタ通過域端.INPUT を基準とした正規化周波数 [0.0 – 1.0] の値で指定. |
|
Ws |
0.34 |
[$\frac{\omega }{2\pi }$] |
ローパスフィルタ阻止域端.INPUT を基準とした正規化周波数 [0.0 – 1.0] の値で指定. |
|
As |
50 |
[dB] |
阻止域最小減衰量. |
パラメータ 各パラメータはローパスフィルタ,ここではカイザー窓の周波数特性を定めるものが多い. 図6.111 に記号とフィルタ特性の関係を示すので, 対応関係に注意して読み進めること.
: int 型.480 がデフォルト値.音声波形に対する処理のフレームを,波形の上で シフトする幅をサンプル数で指定する. ただし,INPUT 以前のノードで設定されている値を用いる. 注意: OUTPUT 以降で設定されている値の SAMPLING_RATE_IN / SAMPLING_RATE_OUT 倍の値に設定する必要がある.
: int 型.48000 がデフォルト値.入力波形のサンプリング 周波数を指定する.
: int 型.16000 がデフォルト値.出力波形のサンプリング 周波数を指定する. この時,SAMPLING_RATE_IN の整数分の一の値しか対応できないことに注意が必要.
: float 型.デフォルト値は 0.28.ローパスフィルタ通過域端周波数を INPUT を基準とした正規化周波数 [0.0 – 1.0] の値によって指定する. 入力のサンプリング周波数が 48000 [Hz] で,0.28 の値に設定した場合, 約 $48000 * 0.28 = 13440$ [Hz] から, ローパスフィルタのゲインが減少しはじめる.
: float 型.デフォルト値は 0.34.ローパスフィルタ阻止域端周波数を INPUT を基準とした正規化周波数 [0.0 – 1.0] の値によって指定する. 入力のサンプリング周波数が 48000 [Hz] で,0.34 の値に設定した場合, 約 $48000 * 0.34 = 16320$ [Hz] から, ローパスフィルタのゲインが安定しはじめる.
: float 型.デフォルト値は 50.阻止域最小減衰量を [dB] で表現した値. デフォルト値を用いた場合,阻止帯域のゲインは通過帯域を 0 とした場合,約 -50 [dB] となる.
ここで,Wp,Ws,As の値をシビアに設定,例えば,Wp,Ws を遮断周波数 $Ws$ 近くに設定すると カイザー窓の周波数特性精度が向上する.しかし,ローパスフィルタの次元が増大し, 処理時間の増大を招く.この関係はトレードオフである.
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回 取り出し,出力サンプルとすれば良い.
(1) 著: P. Vaidyanathan, 訳: 西原 明法, 渡部 英二, 吉田 俊之, 杉野 暢彦: “マルチレート信号処理とフィルタバンク”, 科学技術出版, 2001.