2つのデータセット間の補間エラーを最小化します
-
29-09-2019 - |
質問
下の図の上部では、時間の経過とともにいくつかの値(y軸)が変化することがわかります(x軸)。
これが起こると、異なる予測不可能な時期に値をサンプリングしています。また、赤と青で示される2つのデータセット間のサンプリングを交互にしています。
いつでも値を計算するとき、赤と青の両方のデータセットが同様の値を返すと予想されます。ただし、3つの小さなボックスに示されているように、これは当てはまりません。時間の経過とともに、各データセット(赤と青)の値が分岐し、元の値について収束するように見えます。
最初は線形補間を使用して値を取得しました。次に、CatMull-ROM補間を使用してみました。前者の結果は値が近づき、各データポイントの間に漂流します。後者は、値が近づいたままですが、平均エラーが大きい値になります。
より大きな平滑化を提供する別の戦略または補間方法を提案できますか(おそらく各データセットからより多くのサンプルポイントを使用することで)?
解決
試す Bスプライン: :catmull-romは補間(データポイントを通過する)、Bスプラインは平滑化します。
たとえば、均一に間隔を置いたデータの場合(そうではありません)
Bspline(t) = (data(t-1) + 4*data(t) + data(t+1)) / 6
もちろん、補間された赤 /青の曲線は、赤 /青のデータポイントの間隔に依存するため、完全に一致することはできません。
他のヒント
私はあなたが尋ねるのは、基礎となるサンプリングプロセスに関するさらなる知識がなければ、まっすぐな答えを持っていない質問だと思います。その性質上、サンプル間の関数の値は単に なんでも, 、ですから、2つのサンプル配列の補間の収束を保証する方法はないと思います。
とはいえ、基礎となるプロセスの事前知識がある場合は、エラーを最小限に抑えるためにいくつかの補間方法から選択できます。たとえば、抗力を翼速度の関数として測定すると、関係が正方形(a*v^2)であることがわかります。次に、2番目の注文の多項式フィッティングを選択し、2つのシリーズの補間間でかなり良い一致を持つことができます。
引用したいのですが Catmull-Romスプラインの紹介 この補間タスクにcatmull-romを使用しないことを提案すること。
CatMull -ROMスプラインの特徴の1つは、指定された曲線がすべての制御ポイントを通過することです。これは、あらゆるタイプのスプラインに当てはまりません。
定義上、赤い補間カーブが通過します すべて 赤いデータポイントとあなたの青い補間カーブが通過します すべて 青い点。したがって、両方のデータセットに最適になることはありません。
境界条件を変更し、からのデータポイントを使用する場合があります 両方とも これらに示されているように、区分的近似のデータセット スライド.
あなたが期待しているように、この質問に答えることができないというYSAPに同意します。モデルのダイナミクスに応じて、より良い補間方法があるかもしれません - YSAPと同様に、既知の場合、基礎となるダイナミクスを利用する方法をお勧めします。
赤/青のサンプルに関しては、サンプリングされたデータセットと補間データセットについて良い観察を行ったと思います。元の期待に挑戦します。
いつでも値を計算するとき、赤と青の両方のデータセットが同様の値を返すと予想されます。
私はこれを期待していません。完全に補間することができないと仮定した場合 - 特に補間エラーがサンプルのエラーに比べて大きい場合 - サンプルポイントから最大のエラー(時間)を示す連続エラー関数が確実であることが確実です。したがって、サンプルポイントが異なる2つのデータセットは、赤いサンプルポイントからはるかに(時間内に)(時間内に)青いサンプルポイントに近い場合があり、その逆にある場合があるため、表示される動作を示す必要があります。これは確かです。したがって、私はあなたが示すものを期待するでしょう、それ:
時間の経過とともに、各データセット(赤と青)の値が分岐し、元の値について収束するように見えます。
(基礎となるダイナミクス(周波数含有量を除く)に関する情報がない場合、サンプリングに関するGiacomoのポイントが重要です。ただし、ナイキスト以下の情報を見ると補間する必要はありません。)
元の連続関数をサンプリングする場合、サンプリング周波数は ナイキストシャノンサンプリング定理, それ以外の場合は、サンプリングプロセスがエラーを導入します(とも呼ばれます エイリアシング)。 2つのデータセットで異なるエラーは、補間すると異なる値になります。
したがって、最高の周波数を知る必要があります b 元の関数の後、少なくとも周波数でサンプルを収集します 2b. 。関数の周波数が非常に高く、それを速くサンプリングできない場合は、少なくともサンプリングする前にそれらをフィルタリングしようとする必要があります。