4

2 つのデバイス間にクロック 3 レベル (-1,0,+1) チャネルがある場合、ビット ストリームをチャネル表現との間で変換する最もストリーム効率の良い方法は何ですか?

現在の方法は、3 つのバイナリ ビットを取得し、2 つの Trit に変換することです。これは、チャネル機能の 11% を無駄にしていると思います (9 つの可能なペアのうち 1 つが使用されないため)。グループ化することでこの無駄を減らすことができるのではないかと思いますが、このプロジェクトは 8 ビット デバイスを使用しているため、グループ サイズは制限されています。

divmod-3 を使用したいのですが、ある時点でバイナリ ストリーム全体を利用することができません。LSB から開始できる「増分」divmod3 の方法はありますか?

訓練されていない推測として、「次の3ビットを分析し、1ビットを削除し、1ビットを変更する」という形式のアプローチがあるはずだと推測しますが、実行可能なものを見つけることができませんでした.

4

2 に答える 2

2

11 ビット (2048 コード) を 7 トリット (2187 コード) にパックしようとすると、得られるオーバーヘッドは 1% 未満になります。いくつかの方法があります。1 つ目は簡単です。ルックアップ テーブルです。2 番目は divmod-3 です。3番目は、以下のようなビット/トリットのメインプレーションです。

第 1 段階: 3 ビットから 2 トリットへのスキームを使用して、最初の 9 ビットをパックします。

abc def ghi jk => mn pq rs jk (mn, pq, rs are trit pairs)

bits   trits
0ab -> ab
10a -> Za
11a -> aZ (i'll use Z is for -1 for compactness)

状態 ZZ はさらに使用されます

第 2 段階: より複雑なロジックを使用して、6 つの Trit と 2 ビットを 7 つの Trit にパックします。

mn pq rs 0k -> mn pq rs k
mn pq rs 10 -> mn pq rs Z
mn pq rZ 11 -> mn pq ZZ r
mn pq r0 11 -> mn ZZ pq r
mn pq r1 11 -> ZZ mn pq r

未使用のコードは次のとおりです。

ZZ ZZ xx x
ZZ xx ZZ x
xx ZZ ZZ x

UPDの別の適切なパッキング関係は、19b -> 11t (~0.1% のオーバーヘッド)、84b -> 53t (~0.0035% のオーバーヘッド) ですが、オーバーシュートしているようです。

于 2010-12-17T12:27:33.703 に答える
1

http://en.wikipedia.org/wiki/Arithmetic_codingからアイデアをいくつか挙げていただけますか?

于 2010-12-17T05:35:47.943 に答える