論文再投稿や他作業に追われて手を付けられていない。スキマに読んでいた「線形システム同定の基礎」が素晴らしかった。式展開が丁寧でサクサク読めた。以下の点で示唆あり。

  • 持続的励振性(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で残差ペナルティがなくなるから。

  • 別の尺度(符号長とか)で判断しないとダメかもなあ

なぜ正則化で良くなるんだ?自明なのは、条件数が良くなるくらいしかないぞ?演算精度が原因で、結果ロスが悪くなっている?