より一般的には、転送速度を瞬時に測定する方法を探していると思います。これは通常、短い期間の平均によって得られます。
問題は、一般に、反応するために、周期が通常非常に小さいことであり、これがヨーヨー効果につながります。
非常に単純なスキームを提案します。それをモデル化しましょう。
曲線速度 (y) と時間 (x) を考えてみてください。
Instant Speed は、現在の x (x0) に対して y を読み取るだけです。
平均速度は、Integral(f(x), x in [x0-T,x0]) / T
私が提案するスキームは、フィルターを適用して、過去の瞬間を考慮しながら、最後の瞬間により多くの重みを与えることです。
g(x,x0,T) = 2 * (x - x0) + 2T
表面 T の単純な三角形として簡単に実装できます。
これで、 を計算できますIntegral(f(x)*g(x,x0,T), x in [x0-T,x0]) / T
。両方の関数が常に正であるため、これは機能するはずです。
もちろんg
、与えられた間隔で常に正であり、間隔での積分が T である限り、異なる を使用できます (そのため、それ自体の平均は正確に 1 になります)。
この方法の利点は、即時のイベントにより多くの重みを与えるため、より長い時間間隔を考慮した場合でも、かなり反応的であり続けることができることです (平均がより正確になり、しゃっくりの影響を受けにくくなります)。
また、めったに見たことはありませんが、より正確な見積もりを提供すると思われるのは、平均の計算に使用された時間を推定残り時間に関連付けることです。
- 5ko ファイルをダウンロードすると、瞬時に読み込まれます。見積もりは必要ありません。
- 15 Mo のファイルをダウンロードすると、およそ 2 分かかるので、5 秒ごとに見積もりをお願いします。
- 1.5 Go ファイルをダウンロードすると、約 200 分 (同じ速度で) かかります。
そのため、ダウンロードに時間がかかるほど、応答性を低くする必要があり、より平均化することができます。一般に、ウィンドウは合計時間の 2% をカバーできると思います (おそらく、最初のいくつかの見積もりを除いて、人々は即時のフィードバックを歓迎するからです)。また、一度に全体の % で進行状況を示すだけで十分です。タスクが長い場合は、とにかく待つ準備ができていました.