損失の多い一方向チャネルでデータをエンコードするためにどのようなテクニックを使用できますか?

StackOverflow https://stackoverflow.com/questions/1231489

  •  22-07-2019
  •  | 
  •  

質問

一方向の本質的に損失の多いの通信チャネルがあると想像してください。つまり、ランダムなビットが切り替わる原因となる、除去できない固有のノイズがいくつかあります。また、それが一方向であることを想像してください-再送信をリクエストすることはできません。

ただし、データを送信する必要があります。そのチャネルを介して数字テキストを送信するためにどのようなテクニックを使用できますか?

  1. ランダムビットをいじっても、元の値に近い値として解釈できるように( lossy 送信)、数字をエンコードすることは可能ですか?

  2. 文字列(ASCIIなど)を lossless 形式で送信する方法はありますか?

これはただの楽しみです。モールス信号または非常に低い周波数のバイナリ通信を使用できることを知っています。エラーを検出して再試行するためのパリティビットとチェックサムについて知っています。アナログ信号を使用することもできます。損失の多いチャネルを介してこのようなものを送信するための興味深いコンピューターサイエンス技術があるかどうか、私は興味があります。

役に立ちましたか?

解決

損失の多いチャンネルについて提供していない詳細に応じて、まずグレーコードを使用して、シングルビットエラーがわずかな違いをもたらすことを保証し(損失のある伝送での損失軽減の要望をカバーするため)、場合によっては、結果のストリームを「ロスレス」でエンコードします; (== ロスレスにトライ;)エンコーディング。

Reed-Solomon とそのバリエーションは、ノイズエピソードは小さなバーストで発生する傾向があり(たとえば、1バイト内のいくつかのビットミス)、グレーコーディングと相互運用する必要があります(マルチビットミスは、グレーの「損失軽減」側面のキラーであるため)回線上のシングルビットエラーに対して適切に低下させるため)。これは、R-Sが本質的にブロックスキームであり、1つのブロック内の複数のエラーが、R-Sの観点からは基本的に単一のエラーと同じであるためです;-)。

エラーの多くが消去である場合、

RSは特に素晴らしいです。 、消去は、おそらく送信時に破損しているシンボルですが、それが破損しているという重要な事実を知っているためです。物理層は、その設計方法にもよりますが、多くの場合、その事実についてのヒントを得ることができ、上位層に通知する方法がある場合、それは非常に役立ちます。消去について少し説明しましょう...:

0が-1ボルトのレベルとして送信され、1が+1ボルトのレベルとして送信される(基準波を除く)単純化された例について説明しますが、ノイズが存在します(物理的なノイズは、多くの場合、モデル化、有能なコミュニケーションエンジニアに尋ねる;-);ノイズモデルに応じて、デコードは-0.7 V以下は0ビット、+ 0.7 V以上は1ビット、中間は消去、つまり上位層に通知されると見なされます。問題のビットはおそらく送信時に破損しているため、無視する必要があります。 (私は時々、これを制御し、設計された方法で「漏れる」べきであるという私の論文の1つの例として挙げます:Spolskyの漏れのある抽象化の法則!-)。

任意の冗長性比を持つRSコードは、消去(デコーダーに通知されるエラー)を修正する場合に、それ以外の場合は不明なエラーを修正する場合に比べて約2倍の効果があります一部の消去およびその他の未知のエラー。

チェリーのように、カスタムRSコードは(合理的に簡単に)設計および調整して、消去と未検出の両方の観点から物理チャネルの特性の正確なモデルが与えられると、必要なしきい値θ以下に未修正エラーの確率を減らすことができますエラー(確率とバースト性の両方を含む)。

この領域全体を「コンピュータサイエンス」とは呼びません。一つ、実は:私が卒業したとき(MSEE、30年前)、私はほとんど「CS」を避けようとしていました。チップ設計、システム設計、高度な無線システム、& cを支持するもの-しかし、私はこのことを教えられました(まあ、すでに実用的な工学的使用の領域にあったサブセット;-)。

そして、1世代で物事がそれほど変わっていないことを確認するために、娘はテレコムエンジニアリングでMSを取得しました(高度な無線システムに厳密に焦点を当てています)-彼女はどんな深刻なプログラムについても設計できません、アルゴリズム、またはデータ構造(彼女はCとJavaの必須コースでうまくいきましたが、

他のヒント

この質問は、コーディング理論の主題です。

おそらくよく知られている方法の1つは、ハミングコードを使用することです。大規模にエラーを修正する最良の方法ではないかもしれませんが、理解するのは信じられないほど簡単です。

ターボコードまたは低密度パリティチェックコード。これらはシャノンの制限に近づいているためです。ウィキペディアを参照してください。

Reed-Solomon コードを使用できます。

>

スライディングウィンドウプロトコル(TCPで使用)も参照してください。

これには、問題の定義の一部ではなかった、並べ替えられたパケットまたは完全に失われたパケットの処理が含まれます。

Alex Martelliが言うように、世界には多くのコーディング理論がありますが、Reed-Solomonコードは間違いなくスイートスポットです。実際に何かを構築したい場合、 Jim Plank Reed-Solomonコーディングに関する素晴らしいチュートリアル。プランクは、それをバックアップするための実践的な専門知識が豊富なコーディングに専門的な関心を持っています。

これらの提案のいくつかに進み、続いて同じデータを複数回送信します。そのため、ストリーム内のさまざまなポイントでさまざまなエラーが発生することを期待でき、必要な数をはるかに簡単に推測できる場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top