問題タブ [hamming-code]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 配列内の値が全体を満たさない場合にループを中断する方法は?
私は配列を持っており、counter[7]
常にランダムなビットで満たされています(つまり、1と0のビット/値)。error_sum[7]
また、間違った値 (以前に別のアルゴリズムで検索されたもの) のみを から移動したい別の配列がありますcounter[7]
。問題は、これらの間違った値がなくなるまでerror_sum[7]
、ループを使用して埋める方法がわからないことです。for
例 (疑似コード):
カウンター[7] = { 1,0 ,0,1, 1,0,1 };
間違ったビットが { 1,0 , , , 1,0,1 } であるとしましょう。したがって、5 つの (間違った) ビットのみをerror_sum[7]
配列に移動して、次のように配置します。
error_sum[7] = { 1,0,1,0,1 ,NULL,NULL}
そのため、 から間違ったビットだけcounter[7]
が に移動されerror_sum[7]
ます。
間違ったビットだけを移動する方法は知っていますが、間違ったビットがなくなるまで移動する方法はわかりません。私は(間違ったビットのみを選択して)1つのfor
ループでそれを行っているif
ため、間違ったビットにゼロのみまたは1のみ(ビット)が混ざっていて、理由がわかりません。
私のコード全体:
java - ループごとに配列から特定の値を繰り返し出力してスキップする方法は?
配列 [110] を整数 (行) のビット (1 と 0 のみ) で埋めました。出力によってそれを 7 少ない行のビットに分割し、特定の (2 の次の累乗としてマークされている) から繰り返しスキップする必要があります。配列 [110] のインデックスからこの配列 [110] の末尾まで。
ここで、7 つの異なる行 (グループ、配列) によって、インデックスが 2 の次の累乗であるビットから始まるビットの行を意味するので、1,2,4,8,16,32... また、次の各行 ( group) の場合、配列の 2 の次の累乗であるインデックスの数だけ値を出力してスキップする必要があります。したがって、たとえば、出力 4、スキップ 4... または出力 8、スキップ 8 など、配列内のインデックスが 2 の次の累乗である最後のグループまで続きます。
さらに、この小さな行の最初のビットは常にスキップされるか、または次のようにマークされます。不明 ("?")
配列 [110] のインデックスが 0 ではなく 1 から始まることを扱います。これは、配列で自然であるように - 私の問題を簡単に説明します。
例(「()」で配列のインデックスをマーク):1(1)、1(2)、0(3)、0(4)、1(5)、1(6)、1(7)、 0(8)、1(9)、1(10)、0(11)。
この例では、最初のグループ (出力 1、スキップ 1) は次のようになります: 1(1) <-unknown(?)、1(2)<-skip、0(3)<-output、0(4)<-skip、 1(5)<-出力、1(6)<-スキップ、1(7)<-出力、0(8)<-スキップ、1(9)<-出力、1(10)<-スキップ、0( 11)<-出力...配列の最後まで[110]
2 番目のグループは次のようになります (インデックス 2 から始まり、2 を出力して 2 をスキップします。最初の値は不明と見なされます): 1(2)<-unknown(?)、0(3)<-output、0(4)<-skip、 1(5)<-スキップ、1(6)<-出力、1(7)<-出力、0(8)<-スキップ、1(9)<-スキップ、1(10)<-出力、0( 11)<-出力...配列の終わりまで[110]
3 番目のグループは次のようになります (次の 2 の累乗としてインデックス 4 から開始。出力 4 で 4 をスキップ。最初の値は不明): 0(4)<-unknown(?)、1(5)<-output、1(6) <-出力、1(7)<-出力、0(8)<-スキップ、1(9)<-スキップ、1(10)<-スキップ、0(11)<-スキップ...配列の最後まで[110]
ハミングコードの一部です。理解を深めるために: https://www.youtube.com/watch?v=JAMLuxdHH8o
今、私の方法は、group1 []、group2 [] ...などの7つの異なる配列を作成し、そこにスキップしたい特定のインデックスを手動で挿入することです。次に、for ループで、次の各 group[] 配列に「出力」ビットのみを入力します。
しかし、for-loop で繰り返し実行してもらいたいのです。そこにコードを記述して、2、4、8 (など) の値をスキップし、2、4、8 (...) の値をそれぞれ出力します。したがって、出力とスキップの異なるが静的な「距離」を持つ7つのgroup []配列。どうやってするの?
私のコードは次のとおりです。
そして、後のグループからのより大きな値の場合 (これは 5 番目のグループからのものなので、16 インデックスから開始しますが、不明なのでスキップします):
Second way is more mathematical, because I must count how many indexes skip. However maybe there is method to write how many output and how many skip?
java - ループは、値を出力するときに、配列の最後の 2 つのグループをカットします
私はランダムな1と0のintを持つtab [110]配列を持っているので、1001111001011110 ...など、配列の終わりまで続きます。ハミング コードに従って、7 つの異なるビット行を出力しようとしています。私のループは機能しますが、配列内のインデックスが 2,4,8,16 であるビットから始まるグループに対してのみ機能します。32 番目のループではそれらの半分がカットされ (したがって、32 からではなく 64 から出力が開始されます)、グループ 64 は完全にスキップされます。
algorithm - 一般的なハミング アルゴリズムを使用したパリティ ビット チェック
ロジック回路では、ロジックを開発することになっているECC ICに供給される8ビットのデータベクトルがあり、5つのパリティビットのベクトルが含まれています。ロジックを開発するための最初のステップ (ロジック ゲート、XOR を使用) は、どのパリティ ビットがどのデータ ビットをチェックするかを把握することです (インターレースされているため)。私は偶数パリティを使用しており、一般的なハミング コード ルール (2^n ごとにパリティ ビット) に従っていると、次の一連の出力が得られます。
P1 P2 D1 P3 D2 D3 D4 P4 D5 D6 D7 D8 P5
一般的なハミング アルゴリズムに従います。
各パリティ ビット、位置 1、2、4、8、16 など (2 の累乗) について、最初の位置 n (n-1) をスキップし、1 ビットをチェックしてから、別のビットをスキップします。 、別のチェックなど... 他のビットについても同じプロセスを繰り返しますが、今回は 2^n ごとにチェック/スキップします。ここで、n は出力配列内でビットが占める位置です ( P1 P2 D1 P3 D2 D3 D4 P4 D5 D6 D7 D8 P5
)
その規則に従って、次のようになります。
P1 Checks data bits -> XOR(3 5 7 9 10 12)
P2 Checks data bits -> XOR(3 6 7 10 11)
P3 Checks data bits -> XOR(5 6 10 11 12)
P4 Checks data bits -> XOR(9 10 11)
私は正しいですか?私を混乱させるのは、パリティビットをチェックすることになっている2 ^ nビットの1つ、またはその特定のパリティビットの1ビット後としてチェックを開始する必要があることです。それが包括的であるかどうかにかなり要約されます。
事前に助けてくれてありがとう!
乾杯!
testing - Verilog プログラムが入力を読み取らない
このプログラムを Verilog で作成しましたが、シミュレートしようとすると、出力変数と入力変数の両方で XXXX... しか表示されません。自分が何を間違えたのかわからない…
PS。シミュレーションファイルでは、たとえば値を指定しますin = 16'b1101100100001111; #20;
。
java - ビット シーケンスから ASCII へ、文字列へ
正常に動作している Hamming-Code 4,7 をシミュレートしようとしています。論理的に少し単純化するために、本当にビットの代わりにブール配列を使用しています。いくつかの文字を入力すると、ASCII に変換され、シミュレーションが続行されます。結局のところ、すべての [] が 1 ビットに等しい長さ numberofcharacters*8 の BooleanArray になります。このメソッドは、これを ASCII コードに再変換するだけで、半適切に機能します。ASCII 番号が偶数の場合はすべて問題ありませんが、最後のビットが奇数の場合は常に「忘れて」しまいます。ご協力いただきありがとうございます
親愛なるサイモン
data-transfer - ハミングコードとパリティ制御の間に何かありますか?
回線上でノイズを伴うデータを送信する必要があります。各送信パケットは 1 バイト (8 ビット) のみです。レシーバーがエラーをキャッチできるようにする必要があります (オプションでエラーの一部を修正しますが、エラーが発生した場合に送信を繰り返すことができるため、必須ではありません)。
これで、次の 2 つのオプションがわかりました。
- ハミング コード (送信された 12 のうちの 8 データ ビット)。非常に優れたパフォーマンス (1 回の修正と 2 回の検出) ですが、実装が難しく (または、それほど難しくはありませんが、コードの概念がよくわかりません)、速度が 33% 低下します (50% の冗長性)。
- パリティ制御。実装は非常に簡単です。ただし、信頼性は高くありません。検出されるエラーは 1 つだけです (修正なし、二重のエラーはデータ転送の失敗につながります)。
では、パリティ制御よりも信頼性が高く、ハミングコードよりも簡単な中間コーディングアルゴリズムが存在する可能性がありますか?
crc - ハミング コードはいつ使用する必要があり、crc が優れているのはいつですか?
以下は、これらについて私がすでに知っていることです。
ハミング コードはエラーの検出と訂正の両方に使用できますが、crc ではエラーの検出のみが可能です。
CRCは通信に使用され、ハミングコードはメモリディスクのエラーを検出するために使用されます
私の主な質問は、あるコードを別のコードよりも使用する利点は何ですか?