たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

フレーム化とパディングの規則性

信号長 L, ウィンドウサイズ w, ホップ長 h, フレーム数 n とする。

最初にウィンドウ分を使ったあと、以降のフレームでホップ長分追加で利用するので、必要な信号長は
w * 1 + h * (n-1)

パディング無しの場合、
L >= w * 1 + h * (n-1) <=> (L-w)/h + 1 >= n
を満たす最大のnがフレーム数になる。

フレームと1:1対応する信号ブロックを考える。
フレーム源信号と信号ブロックの距離を一定にしたい(例: フレーム源信号中心 == 信号ブロック中心)場合、距離を一定にするためフレームがホップ h で動くのに合わせてブロック長が h になる(∵ ブロックはno overlap)。
ゆえにブロック数 b は L/h になる。

ブロックはフレームと1:1対応すると定義したが、一般にはこれが成立しない。フレーム数について、
(L-w)/h + 1 >= n <=> L/h - w/h + 1 >= n <=> b - w/h + 1 >= n
の関係にあり、例えば1/4 overlap (w/h==4) だと1:1対応させるには5フレーム不足している。
原因は明確で、源信号と信号の位置関係を保とうにも、頭と尻尾のウィンドウがはみ出るから。
なので源信号の前後に値を挿入すればいい。これはパディング
総パディング長 p とすると、
(L+p-w)/h + 1 >= n <=> L/h + (p-w)/h +1 >= n <=> b + (p-(w-h))/h >= n
となり、p-(w-h) = 0 を満たす p が必要なことがわかる。
直観的にも、長さ h のブロックを長さ w のウィンドウの頭に対応させると未来 w-h 分が常に追加で必要なことからわかる(尻尾ブロックで w-h の未来パディングが必要)。

総パディングは前後(左右)パディングに分割される。
なぜならフレーム源信号と信号ブロックの位置関係を任意に設定したいから。
尻尾側に全パディングをくっつけると、源信号の頭部分が信号ブロックに対応する(c.f. 最終ブロックは頭部分以外がパディングで無情報)。逆もしかり。
頭のパディングを増やすほど位置関係が後ろに寄っていく。