• 締切済み

CRC方式について

「CRC方式において、伝送路上でビット誤りが生起しなかったと仮定する。このとき、受信符号H(X)は、生成多項式G(X)で割り切れることを証明せよ。」という課題が出たのですが、どうすれば良いでしょうか?

  • 科学
  • 回答数2
  • ありがとう数2

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

どこまで使っていいのかなぁ.... 「CRC」の考え方にもよるんだけど, 本質は「生成多項式で割切れるものを送る」んだから, 「ビット誤りがなければ生成多項式で割切れるものが届く」のは当然ともいえますね.

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

以前質問した QNo.3109221 のほうに回答が寄せられていますよ。

Hiller
質問者

補足

知っていますが、あの回答ではわからなかったので・・・。

関連するQ&A

  • CRC方式について

    「CRC方式において、伝送路上でビット誤りが生起しなかったと仮定する。このとき、受信符号H(X)は、生成多項式G(X)で割り切れることを証明せよ。」という課題が出たのですが、どうすれば良いか、教えていただけませんか?

  • CRC方式(誤り制御方式)について

    CRC方式に関する問題なのですが、通信系の資格の取得しようと勉強しているのですが、誤り制御方式のところの問題をやっていましたら、答えだけで解説がなく意味がわからなく困っています。わかります方、よろしくお願い致します。 生成多項式をG(X)=X(6)+X(4)+X(2)+1とする。 (1)伝送したいデータがD=X(5)+Xのとき、送信データS=D´+CRCを多項式で表しなさい。 (2)受信データがX(14)+X(12)+X(10)+1のとき、この受信データに誤りが含まれていないことを示しなさい。次に、伝送したいデータDを多項式で表しなさい。 ※X(5)などの()内の数字はXの5条(ジョウ)です。

  • 水平垂直パリティチェックとCRC方式について

    質問させてください。 基本情報処理試験において、誤り訂正方式の一つとして ・水平垂直パリティチェック ・CRC方式 というものがあります。 水平垂直パリティチェックは、ビット列を縦横に確認してデータに誤りがないか確認する方法、 CRC方式は、生成多項式という特別な式でデータに誤りがないか確認する方法 ということはわかるのですが、 それぞれのメリットデメリットは何でしょうか? 例えば、CRC方式では水平垂直パリティチェックではできない、2ビット以上の誤り訂正ができたりするのでしょうか? どなたか回答をお願いします。

  • 大学の情報理論の課題でわからないところがあります。

    大学の情報理論の課題でわからないところがあります。 誰か解説をお願いします。 (問題1) {0,1}の二元符号の通信路で、ビット誤り率0.25 の通信路がある。 {0.1}のシンボル生起確率がそれぞれ p, 1-p の時、 (a)通信路行列を書け (b)相互情報量を式で書け (c)通信路容量を求めよ (問題2) 0101 を生成多項式 G(x) = x^3+x+1 の CRC符号 により符号化し、送信符号のビット列を書け 教科書や配布された資料に載ってる解説や公式を見ても どう当てはめていけばよいかわからず困っています。 よろしくお願いします。

  • CRCによる誤り検出の条件

    現在、CRCについて学んでいます。 その中で、誤り検出が可能な条件として、 誤りの多項式E(X)が生成多項式G(X)で割り切れないこと というのがあると思います。 そこで例えば、rビットのバースト誤りの際に、 E(X) = x^(i) + x^(i+1) + … + x^(i+r-1) = x^i * {1 + x + … + x^(r-1)} (ただ、この最後の式でx~x^(r-2)までは、誤りによってあったりなかったりする筈です) と表すことが出来て、生成多項式G(X)の次数がrであるとき、 1. x^iは(G(X)が2項以上の多項式であるなら)G(X)で割り切れない 2. {1 + x + … + x^(r-1)}は(次数がr-1であるから)G(X)で割り切れない 3. 従ってE(X)もG(X)で割り切れない よって生成多項式の次数がrの場合、rビット以下のバースト誤りは検出できるとなっていますが、、、 いくら1.や2.がG(X)で割り切れなくても、それらの積(=E(X))がG(X)で割り切れてしまうことはあるじゃないですか。 具体的には、i=1のとき、もしG(X)がx * {1 + x + … + x^(r-1)}であれば、割り切れますし、、、 同様の話で、 http://laputa.cs.shinshu-u.ac.jp/~yizawa/InfSys1/advanced/crc/ こちらのページの、「4. 巡回符号の誤り検出」という部分でも、 「これらは、3次の生成多項式、例えば G(x) = x^3+x+1 で割り切れないことは明らかです。」 という記述に対して、「例えばG(X) = x^3+x^2+x^1であれば割り切れてしまうのでは」と反論したくなります。 もちろん、割り切れないようなG(X)を選べばいいと言われればそれまでですが、、、以上の様にG(X)の内容によっては「G(X)の次数r以下のバースト誤りが検出できる」のが自明とは思えません。 そもそもそれが答え、、、? どなたかご説明お願いしますm(_ _)m

  • BCH誤り訂正

    BCH誤り訂正なんですが 受信した符号を多項式で割ってあまりから誤りビットがでるのですが 訂正能力を超えた場合はどうでしょうか? 例えば2ビットまで訂正できるBCHで3ビット誤った符号を受信したときは 全く異なる訂正をしてしまうと思うのですが 何か手はあるのでしょうか? 普通はBCHのあとにCRCを行うのですがBCH内で演算して誤りビット数は出せるのでしょうか?

  • CRCについて

    「あるmビットパターンに対する多項式表現をM(X)とする。このパターンをrビットだけ左方向にシフトし、右端のrビットに0を補完したビットパターン(m+rビットパターン)の多項式表現は、X^rM(X)になることを証明せよ。」という課題が出たのですが、どうしたら良いのでしょうか?

  • 短縮化巡回符号の原始多項式について

    情報ビット=4、検査ビット=3の原始多項式はG(x)=x~3+x+1なのですが、 情報ビット=4、検査ビット=4の短縮化巡回符号の場合の原始多項式がわかりません。また原始多項式がわかったとして、それがなぜ原始多項式になるのかも教えてください。 それから原始多項式がわかったとして、受信符号01110111の誤りビットを求めて正しい符号にする過程も教えてください。よろしくお願いします。

  • データ通信、CRC符号の計算

    生成多項式がG(X)=X^6+X^4+X^2+1 受信データがX^14+X^12+X^10+1 このとき、伝送したいデータDを多項式で表したいのですが、分かりません・・・。 すみませんが、どなたかご教示ください。 よろしくお願いいたします。

  • CRCの検定コードがどの文字でも同じになった!?

    C言語の初級者が質問します。 講義の課題で、「伝送誤り検出方式として巡回符号方式(CRC:Cyclic Redundancy Check)を使用した場合、送り側でアルファベット6文字の適当な単語を1文字ずつ入力した場合の検定コードを算出しなさい。生成多項式はCRC-16-CCITT(Xの16乗)+(Xの12乗)+(Xの5乗)+1を使用し、検定コードは2byteとする。 この課題に対し、一文字ずつ、検定コードを求めて合計6個の和を出して16進数で表現しようと考え、以下のプログラムを作りました。#include <stdio.h> #include <string.h> #include <stdlib.h> int main () { int t,s,i,m; int l; int flag; int crcReg[10]; // crcRegは一文字ごとのCRCの計算途中過程 res[]は一文字ごとのCRCの最終結果 char inData[6]; //文字列入力 int jyuroku[6]; int crcmax; printf("文字入力(6文字まで):"); gets(inData); // l=strlen(inData); for(i = 0;i < l; i++) { printf("%d番目は16進数で%X\n",i+1,inData[i]); // } printf("各文字の16進asciiは(0x必要か?)"); for(m = 0;m <l;m++) { printf("%d番目のascii:",m+1); scanf("%X", &jyuroku[m]); // } //**********************************(後半)********************************************** for(s=0;s < l; s++) {//文字の数だけ繰り返し crcReg[s]=0xFFFF; //CRCの初期値はどの文字の場合でも同じ printf("%d 番目の16進ascii:%X\n",s+1,jyuroku[s]); // for (t = 0;t < 8; t++) { //入力する16進数は8ビット=1バイト ゆえ8回繰り返し flag = (crcReg[s] ^ jyuroku[s] & 0x01); // 生成多項式をかけるかどうかの判定の前段階 crcReg[s] = crcReg[s] >> 1; //CRCの計算過程を1ビット右にシフト if (flag == 0x01) { //最下位ビットflagが1の時の処理 crcReg[s] = (crcReg[s] ^ 0x8408); //生成多項式は10進数で } else if (flag == 0x00) { } jyuroku[s] = jyuroku[s] >> 1; // asciiコードも1 ビットシフト } printf("CRCの結果は%X\n",crcReg[s]); // } crcmax = crcReg[0]+crcReg[1]+crcReg[2]+crcReg[3]+crcReg[4]+crcReg[5]; printf("\n kekka:%d",crcmax); // return 0; // } しかし、こうするとcrcReg[s](検定コード)がどの文字の場合でも同じ255(16進数ではFF)になって、6文字の単語は常に和が1530になってしまいます。255=16の2乗-1であることが問題解決の鍵だと思うのですが、何か問題点わかりますか?