評価スクリプトをSLAから持ってきて試してみると、平均圧縮率が悪い。 なぜだ。手元の音源ではよかったのに。

結果を見ると、音量が控えめな音源でかなり性能が悪くなっている事がわかった。(完全な無音ではない)

フィルタ次数を減らしたほうが結果が良い状態。どうする。観察。

フィルタ係数を見ると、次数16では大きくなりすぎている印象。。そこで、フィルタ係数のビット幅を小さくしたら改善に向かったが、flacには及ばない。また、SLAと同じようにライスパラメータが小さいときは固定のゴロム符号を行うようにしたらわずかに改善した。ゴロム符号の対処は最終手段とする。

もっとフィルタ係数の変化を観察すべきかと思う。

  • AR係数が小さいときはほぼ白色雑音だから係数をリセットする→すこしは良くなったけどだめだった。
  • フィルタ係数(ブロックヘッダ)の記録にとるビット幅を8から12に増やしたら改善傾向。しかしまだ断然悪い。(追記:NGSAの計算精度向上後は8の方が良かった)
  • 以前フィルタ末尾の重みが大きかったのを見ていた。(末尾が原因で係数右シフトが起きてた)末尾係数を見てみる。
    • 係数の動きが不自然(先頭と末尾の動きが同期してる等)なので自然勾配の更新がおかしいと思って、勾配における積和演算で丸めをやめたら、低振幅音源で圧縮率が大幅に改善した(全体的に良くなったので採用)。。。。固定小数演算よくわからん・・・なんで良くなった…。多分、丸めの方向が正方向にしかできてなかったのが災いしていたかも。引くときは丸めのための加算がいらないはず。
    • ステップサイズを大きくとると、低振幅音源で改善、大振幅音源で悪化。当然だけど、これから、ステップサイズは分散に合わせて変えるべきであることがわかる。
    • これでWavpack(-hh)と比べて+0.5%くらい。ゴロムを加えるのもあり。