0

1 ミリ秒間隔でサンプル (16 ビット数) を生成する組み込みシステムがあります。可変アップリンク帯域幅はせいぜい 5 ミリ秒ごとにサンプルを転送できるため、重要な情報 (この場合は時間間隔の最小値と最大値) の損失を最小限に抑えながら、データ レートを適応的に下げる方法を探しています。

私がうまくいくと思うスキームには、スパースコーディングと非可逆圧縮のバリエーションが含まれます。このような:

  1. システムは、10 ミリ秒間隔で最小値と最大値を内部的に保存します。
  2. システムは、これらのデータ ペアの限られた数 (たとえば 50) を内部的にキューに入れます。
  3. 最小値または最大値の損失は許可されませんが、それらが発生する時間間隔は異なる場合があります。
  4. キューがいっぱいになると、隣接するデータ ペアがキューの最後から結合され、変換された最小/最大ペアが 20 ミリ秒間隔を表すようになります。
  5. スキームは、必要に応じて 40ms、80ms などにさらに間隔を組み合わせて実行できるように、反復する必要があります。
  6. このスキームは、キューの長さ全体で線形に重み付けする必要があります。これにより、最新のデータの結合と、最も古いデータの必要な最大結合がなくなります。

たとえば、長さ 6 のキューでは、連続するデータ削減により、データ ペアが次の間隔をカバーする必要があります。

initial: 10 10 10 10 10 10  (60ms, queue full)
 70ms:   10 10 10 10 10 20
 80ms:   10 10 10 10 20 20
 90ms:   10 10 20 20 20 20
100ms:   10 10 20 20 20 40
110ms:   10 10 20 20 40 40
120ms:   10 20 20 20 40 40
130ms:   10 20 20 40 40 40
140ms:   10 20 20 40 40 80

新しいサンプルは左側に追加され、データは右側から読み取られます。

この考え方は明らかに、非可逆圧縮スパース コーディングのカテゴリに分類されます。

これは、アップリンク帯域幅が限られているデータ ログ アプリケーションで頻繁に発生する問題であり、「標準的な」ソリューションが出現した可能性があると思います。

意図的に単純化し、タイム スタンプなどの他の問題を省略しました。

質問:

  1. この種のデータロギングを行うアルゴリズムはすでにありますか? 私が探しているのは、標準の非可逆画像またはビデオ圧縮アルゴリズムではなく、上記のデータ ログに特化したものです。
  2. キューの最も適切な実装は何ですか? リンクリスト?木?
4

3 に答える 3

0

私が理解しているように、期間内にすべてのサンプルの min() と max() を送信したいと考えています。

例えば。1ミリ秒ごとにサンプルを取得して、10ミリ秒ごとに最小/最大を送信したいですか?

個々のサンプルが必要ない場合は、各サンプリング後に単純に比較します

i=0; min=TYPE_MAX; max=TYPE_MIN;// First sample will always overwrite the initial values
while true do
    sample = getSample();
    if min>sample then
        min=sample

    if max<sample then
        max=sample

    if i%10 == 0 then
        send(min, max);
        // if each period should be handled seperatly: min=TYPE_MAX; max=TYPE_MIN;
done

変更時にのみデータを送信することで帯域幅を節約することもできます (サンプル データによって異なります。サンプル データがすぐに変更されなければ、大幅に節約できます)。

于 2013-05-01T08:56:57.953 に答える