校正と補正は別物ですよね
用語を雰囲気で使ってはダメだと反省している、かえるのクーの「井戸中 聖」(いとなか セイ)でございます。
ですよね~。ご指摘ありがとうございます。
校正(calibration)とは測定器の示す値と実量器(標準器/物質)の値の関係を確定する一連の作業(参照:JIS 8103 4342)でした。
補正(correction)とは系統誤差を補償するために、補正前の結果に代数的に値を加えること(参照:JIS 8103 2626)でした。
なので、前回の「校正」と書いたのは誤りで、本件は「補正」が正解でした。お詫び申し上げます。
補正の方法についての疑問
簡単だろうといったものの、いくつかやってみないとわからないところがあります。
・1回で補正値(補正係数)がきまるのか、すこしずつ近づけないといけないのか?
・補正は音声波形の最大振幅(0dB)付近で行う予定だが、微小振幅の場合は、同じ補正値を使うことができるか
・すべての周波数分割(現在使用しているプログラムではオクターブあたり12×16ポイント(12半音×16位相)で検出している(ただしこれらパラメータ可変))ポイントで補正値を計測/計算する必要があるか?もしくは間引いて、補完するような方法でよいか?
とりあえずの方針
(1)同一周波数であれば、位相によらず同じ補正値を用いる。
(2)現状ロジックでウェーブレットの周波数ごとに「元信号の振幅(合計)/デコード波形の振幅(合計)」を算出し、その周波数の補正値とする。
(3)(2)の対象とする元波形の周波数は、(ウェーブレットの周波数をωとして)ω/(2の24乗根)~ω*(2の24乗根)とする。(12半音で区切っているためその半分の±とします)
実験
急にスポットで忙しくなってしまい、実験が滞っておりました。申し訳ございません。
まだ納得のいく結果がでていないのですが、現時点では以下な感じです。
実験に時間がかかりすぎるので、元ファイルを24Secにして実験していました。
上から、
(1)元の波形(エンベロープ)
(2)そのままエンコード、デコードした波形
(3)(2)の歪波形のエンベロープ
(4)いろいろ調整している途中の波形
(5)(4)の歪波形のエンベロープ
です。歪はトータルな音圧レベル(Power)をあわせてからの比較によるものです。
平坦にはなってきて、聞いた感じも改善しているのですが、思った以上に寄ってくれません。周波数や窓の幅により検出「感度」が違うのですが、その複合で複雑な状況になっているようです。10KHz以上の周波数に問題ありです。(10KHz以下は実用レベルまで補正できているように思います)
今回はここまでとし、機械学習でいうところのハイパーパラメータを自動的に調整して最適化できるしくみを考えてみます。
音も、プログラムも貼ってもおもしろくない(聴き所、見どころがない)ので今回は貼りません。あしからず。
疑問への自己回答
Q:1回の補正で補正値がきまるのか?
A:振幅差の比率(もしくはその2乗)を単純にかける補正では補正しきれませんでした。
Q:微小振幅は個別に補正が必要か?
A:この実験ではわかりませんでした。
Q:位相ごとに補正する必要はあるか?
A:明確な答えはわかっていませんが、実験の範囲では位相毎に行う必要はなく、周波数毎だけでよいと思われます。
蛇足
とある技術評価サイト(AI系?)で、「このブログ」と「かえるのクーのGitHub」の内容を登録して評価してもらいましたが、技術力評点は2.0未満でした。とほほ。(3.0が平均相当で3.3で上位13%、3.5で上位4%以内とのことだったので、2未満は技術力は底辺付近の評価と思われます)GitHubにほとんど上げていないので評価に繋がっていないのだと思いますが、プログラムは完成時に今後GitHubで公開していくようにしようと思います。(世の中の流れに乗ってみます)