論文再投稿や他作業に追われて手を付けられていない。スキマに読んでいた「線形システム同定の基礎」が素晴らしかった。式展開が丁寧でサクサク読めた。以下の点で示唆あり。
- 持続的励振性(p.91)
- 例:単純な正弦波では最尤推定量が一致性を持たない(サンプル数を増やしても誤差が減少しない)
- 一般に、フィルタ次数mに対して \(\lfloor x/2 \rfloor\) 個の周波数成分を持たないと一致性がない
- これ、実験で見たことある。チャープや正弦波の誤差が他より大きかったのはこれが原因か。
- LPCの予測で正則化を入れるとロスが小さくなりうる(p.170)
- これは有益な示唆。ノイズを取り入れている可能性がある。
- 正則化項をカーネル行列を使った2次形式であらわしたカーネル正則化がある
- これでインパルス応答を精度よく同定できる
システム同定のお話なので、これらはすぐに取り入れられそう。読んでよかった。 実験に再着手する前に、正則化込みのLPCを調査する。
- lpc2.c かなりフォーマルにやってるな、察しの通り0次(分散)を大きくしている
/* Do Ridge regression */
curAcf[0] *= ((FLOAT)1025.0/(FLOAT)1024.0);
if (curAcf[0] == (FLOAT)0.0) {
for (i = 1; i <= LpcOrder; i++)
curAcf[i] = (FLOAT) 0.0;
}
else {
for (i = 1; i <= LpcOrder; i++)
curAcf[i] = DotProd(Vect, &Vect[i], LpcFrame-i)
/ (LpcFrame*LpcFrame) * BinomialWindowTable[i-1];
}
ソース先頭に ITU-T G.723.1 と書いてあってどうもACELPのコードらしい( 参考 )
- ソースは ここ
- Ridgeについては A white noise correction factor of (1025/1024) is applied by using the formula R[0] = R[0](1 + 1/1024). と書いてある。書いてあるだけで何を参照したかさっぱり。
Ill-Conditioning and Bandwidth Expansion in Linear Prediction of Speech これの2.2.1にかなり書いてある。固有値の散らばりを抑制する(条件数を改善する)効果がある。white noise compensationというらしい。
- この論文素晴らしい。高域補償(プリエンファシス?)と窓かけについても効果を検証している。
- 自己相関行列の固有値は、パワースペクトル密度の最小値以上かつ最大値以下である。(確かめたら自明だったけど重要だ)
- 純音は完全に予測しやすいから(事実、線形システム同定の基礎にあったように、2基底で十分だから)条件数が悪くなる。女性や子供の鼻音が純音に近く、窓かけしても条件数に影響がでるとのこと。
- 0次相関に定数倍することで、残差は悪化する傾向だが、悪化するフレームは元々の予測がかなり正確にできたフレームであり、レアとのこと。
LPCの正則化、ITU-T G.723.1に従って \(1025/1024 \approx 1.0009765625\) を分散に乗じると、手元のデータで改善傾向が出た。 \(513/512 \approx 1.001953125\) だとさらにいい。ガチデータでも回したい。
- \(513/512\) でRWCで55.87%となり(補助関数法抜きで)、良くなっている。
正則化パラメータを最適に選択できればいいなあと思って、正則化パラメータを変えたときのLPCの残差分散を見たが、パラメータが小さい(正則化をかけないほうが)良かった。そらそうだよな、パラメータ=0で残差ペナルティがなくなるから。
- 別の尺度(符号長とか)で判断しないとダメかもなあ
なぜ正則化で良くなるんだ?自明なのは、条件数が良くなるくらいしかないぞ?演算精度が原因で、結果ロスが悪くなっている?