それは存在しないので、私はそれを「逆補間」とは呼びません(私の最初の考えは、あなたが外挿について話しているということでした!)。あなたがしていることは、まだ不均一な速度での単純な補間です。
内挿: 既知の値の間の値を見つける 外挿: 既知の値を超える値を見つける
一定レートへの/からの補間は、「既知の値の間の値を見つける」という一般的な探求よりもはるかに簡単です。2つの解決策を提案します。
1) 非常に高いレートに補間し、最も近いレートにサブサンプリングします (ディザリングを追加してみてください)。
2) 一般的な問題を解決します。各点について、隣接する N 個の点を使用し、N-1 次の多項式をそれらに適合させる必要があります。
- N=2 は線形になり、倍音を追加します (C0 連続性)
- N=3 では、ソース サンプルの中間点で段階的な変化が生じる可能性があります (おそらく、N=2 よりも悪い倍音です!)
- N=4 で C1 連続性が得られます (次のサンプルに変更すると勾配が一致します)。アプリケーションには十分です。
その最後のものを説明しましょう。
出力サンプルごとに、前の 2 つと次の 2 つの入力サンプルを使用します。それらを単位時間スケールで S0 から S3 と呼び (後でサンプル期間を掛けます)、時間 0 から 1 に補間します。Y は出力で、Y' は勾配です。
Y は、この多項式とその微分 (勾配) から計算されます。
Y(t) = At^3 + Bt^2 + Ct + D
Y'(t) = 3At^2 + 2Bt + C
制約 (両側の終点での値と勾配)
Y(0) = S1
Y'(0) = (S2-S0)/2
Y(1) = S2
Y'(1) = (S3-S1)/2
多項式の展開
Y(0) = D
Y'(0) = C
Y(1) = A+B+C+D
Y'(1) = 3A+2B+C
サンプルを接続する
D = S1
C = (S2-S0)/2
A + B = S2 - C - D
3A+2B = (S3-S1)/2 - C
最後の 2 つは、簡単に解ける連立方程式です。2 番目から 1 番目の 2 倍を引きます。
3A+2B - 2(A+B)= (S3-S1)/2 - C - 2(S2 - C - D)
A = (S3-S1)/2 + C - 2(S2 - D)
するとBは
B = S2 - A - C - D
A、B、C、D を取得したら、多項式に時間 't' を入れて、既知のサンプル間のサンプル値を見つけることができます。
出力サンプルごとに繰り返します。次の出力サンプルがまだ同じ 2 つの入力サンプルの間にある場合は、A、B、C、D を再利用します。毎回 t を計算することは、ブレゼンハムのライン アルゴリズムに似ており、毎回異なる量だけ進んでいます。