当前位置: 首页 > news >正文

CRC校验码的检错性能(三)——基于对偶码重量分布计算漏检概率

CRC(Cyclic Redundancy Check,循环冗余校验),是一种数字编码技术,广泛应用于数字通信的传输差错检测,或数字存储的数据完整性检测,最早由W. Wesley Peterson于1961年发表的论文《Cyclic Codes for Error Detection》中提出。

事实上,对于差错检测而言,几乎不太可能做到检出所有(100%)的错误,意即检测手段给出“无错”结论时,这一结论本身很难做到100%的置信度。因此,人们评价一种检错手段的性能时,通常真正关心的是“错误已经发生,但未能发现”的概率(本文称之为漏检概率Pud,Probability of Undetected Error),显然,这个概率越小越好!

本文在充分理解CRC校验码及其对偶码生成矩阵原理的基础之上,手工计算出CRC-4/SAE J2716的对偶码在码字长度\(n=16\)时的重量分布,引用Koopman教授公布的该校验码对应的原码重量分布数据,并利用Wolfram的在线计算工具完成了MacWilliams恒等式的验算。

MacWilliams恒等式揭示了线性分组码的原码和对偶码重量分布之间的关系,本文详细推导了基于CRC校验码之对偶码重量分布计算其漏检概率的公式。进一步分析了\( 0^{0} \)在数学上的争议性定义对漏检概率计算的影响,并通过对公式的简单变换而规避该影响。

最后,本文分别基于原码和对偶码的重量分布,完成了CRC-4/SAE J2716在码字长度= 16,\( 10^{-6} \sim 0.5 \)误比特范围内的漏检概率计算。计算结果表明,在低误比特率条件下,基于对偶码重量分布计算CRC校验码漏检概率时,对计算的数值精度有着较高的要求。

备注:文中公式较多,若公式显示不全,请刷新页面重试!

1. CRC校验码及其对偶码

CRC校验码是一种二进制线性分组码,信息位长度\( k \),校验位长度\( r \),码字长度\( n=k+r \) 的CRC校验码,可通过一个\( r \)次的生成多项式\( G(x)=g_{r}x^{r}+\cdots +g_{1}x^{1}+g_{0}x^{0} \)构造,选定\( G(x) \)后,该线性分组码的典型生成矩阵\( G \)亦随之确定:

典型生成矩阵是一个\( k \)行\( n \)列的矩阵,每一行都是独立的(不可由其它任意行的线性组合获得),可用于构造该线性分组码的\( 2^{k}-1 \)个非0码字。

每个线性分组码\( C(n,k) \)都有唯一一个与之对应的对偶码\( C^{\perp }(n,n-k) \),对偶码的信息位长度为\( r \),校验位长度为\( k \),码字长度为\( n=k+r \),码字集合中共\( 2^{r} \)个合法码字。对偶码的典型生成矩阵\( G^{\perp } \)可由原CRC校验码的典型生成矩阵\( G \)变换获得(如下图所示):

  • 在典型生成矩阵\( G \)的\( k \)行\( r \)列校验位矩阵下方添加一个\( r \)行\( r \)列的单位矩阵,构成一个\( n \)行\( r \)列的矩阵\( H \);
  • 将矩阵\( H \)顺时针旋转90°即为对偶码的典型生成矩阵\( G^{\perp } \)。

以CRC-4/SAE J2716 SENT为例,其生成多项式\( G(x)=x^{4}+x^{3}+x^{2}+1 \),校验位长度\( r=4 \) ,信息位长度\( k=12 \)时,码字长度\( n=16 \),其典型生成矩阵如下图:

该CRC-4校验码之对偶码的典型生成矩阵、15个非0码字、各码字的汉明重量(标注于码字右侧),如下图:

可知该CRC-4校验码之对偶码的16个合法码字以及它们汉明重量:

  • 1个汉明重量为 0 的码字:0x0000;
  • 2个汉明重量为 6 的码字:0x8A34、0xC468;
  • 4个汉明重量为 7 的码字:0x268D、0x1D1A、0x68D1、0x5346;
  • 2个汉明重量为 8 的码字:0x4E5C、0xB1A3;
  • 4个汉明重量为 9 的码字:0xACB9、0xE2E5、0x972E、0xD972;
  • 2个汉明重量为10的码字:0x3B97、0x75CB;
  • 1个汉明重量为16的码字:0xFFFF。

2. 麦克威廉姆斯(MacWilliams,马克威伦)恒等式

设\( A_i \)是二进制线性分组码\( C(n,k) \)的\( 2^k \)个有效码字集合中重量为\( i \)的码字数目(数量),则集合\( A=\left \{ A_0,A_1,\cdots ,A_n  \right \} \)称为该分组码的重量分布。也可以把码\( C \)的重量分布写成多项式形式:

\[ A(x)=A_0x^0+A_1x^1+ \cdots + A_nx^n =\sum_{i=0}^{n}A_ix^i \]

称\( A(x) \)是二进制线性分组码\( C(n,k,d) \)的重量估值算子(简称重量算子),或称为重量枚举多项式。令\( C^{\perp }(n,n-k,d') \)为码\( C \)之对偶码,则\( C^{\perp } \)的\( 2^{n-k} \)个有效码字集合的重量枚举多项式\( B(x) \)可写为:

\[ B(x)=B_0x^0+B_1x^1+ \cdots + B_nx^n =\sum_{i=0}^{n}B_ix^i \]

二进制线性分组码\( C \)及其对偶码\( C^{\perp} \)的码字重量分布有这样一些性质:

  • 零重(全0)码字的数量恒为一,即\( A_0=B_0 \equiv 1 \);
  • 全重(全1)码字的数量为0或1,即\( A_n=0或1 \),\( B_n=0或1 \);
  • 全重(全1)码字的数量为1(\( A_n=1 \))时,重量分布是对称的,即\( A_i=A_{n-i},0 \leqslant i \leqslant n \),
  • 码重数目之和等于码字总数,即\( \sum_{i=0}^{n}A_i=2^k \),\( \sum_{i=0}^{n}B_i=2^{n-k} \);
  • 码字重量或全是偶数,或者奇、偶重量的码字数目相等;
  • 线性分组码的码字重量全为偶数时,其对偶码有(且只有)一个全1码字;线性分组码奇、偶重量的码字数目相等时,其对偶码无全1码字;
  • 线性分组码有(且只有)一个全1码字时,其对偶码的码字重量全为偶数;线性分组码无全1码字时,其对偶码奇、偶重量的码字数目相等;

线性分组码及其对偶码的重量枚举多项式\( A(x) \)与\( B(x) \)之间有一个重要的恒等式——MacWilliams恒等式(注:式中的计算基于整数域而非GF(2)域):

\[ \begin{aligned} 
A(x)&=\sum_{i=0}^{n}A_ix^i= \frac{1}{2^{n-k}} (1+x)^{n} \sum_{i=0}^{n}B_i(\frac{1-x}{1+x})^i = \frac{1}{2^{n-k}} \sum_{i=0}^{n}B_i(1-x)^i(1+x)^{n-i} \\ \\
B(x)&= \sum_{i=0}^{n}B_ix^i= \frac{1}{2^k} (1+x)^{n} \sum_{i=0}^{n}A_i(\frac{1-x}{1+x})^i = \frac{1}{2^k} \sum_{i=0}^{n}A_i(1-x)^i(1+x)^{n-i}
\end{aligned} \]

MacWilliams恒等式的重要价值在于,为了计算一个\( (n,k) \)二进制线性码的重量枚举多项式,通常需要了解所有\( 2^k \)个码字的重量。显然这是一项艰巨的任务,除非\( k \)的取值相对较小。但是如果\( k \)的值非常大而\( (n-k) \)的值很小,就可以先计算其对偶码\( C^{\perp } \)的重量枚举多项式,由此再计算出\( C \)的重量枚举多项式。

以CRC-4/SAE J2716 SENT为例,其生成多项式\( G(x)=x^{4}+x^{3}+x^{2}+1 \),校验位长度\( r=4 \) ,信息位长度\( k=12 \)时,码字长度\( n=16 \),直接计算该CRC校验码的重量分布需要枚举4096个码字的重量\(^{[7]}\)(本文通过查询Philip Koopman的网站数据获得),而其对偶码(仅16个码字)的重量分布可手工计算或利用EXCEL编制简单的工具完成。该CRC校验码原码\(^{[7]}\)及其对偶码的重量分布如下表:

i

Ai

Bi

i

Ai

Bi

0

1

1

9

0

4

1

0

0

10

1017

2

2

11

0

11

0

0

3

0

0

12

219

0

4

233

0

13

0

0

5

0

0

14

17

0

6

1003

2

15

0

0

7

0

4

16

0

1

8

1595

2

依据上表分别写出此CRC校验码及其对偶码的重量枚举多项式:

\[ \begin{aligned} 
A(x)&=17x^{14}+219x^{12}+1017x^{10}+1595x^{8}+1003x^{6}+233x^{4}+11x^{2}+1x^{0} \\
B(x)&= 1x^{16}+2x^{10}+4x^{9}+2x^{8}+4x^{7}+2x^{6}+1x^{0}
\end{aligned} \]

利用MacWilliams恒等式基于\( B(x) \)求\( A(x) \)的验证,有:

\[ A(x) = \frac{1}{16}[(1+x)^{16}+2(1+x)^{10}(1-x)^6+4(1+x)^{9}(1-x)^7+2(1+x)^{8}(1-x)^8+4(1+x)^{7}(1-x)^9+2(1+x)^{6}(1-x)^{10}+(1-x)^{16}] \]

上式基于手工计算过于繁琐,本文将其输入Wolfram网站的在线计算工具验证,结果正确,如下图:

利用MacWilliams恒等式基于\( A(x) \)求\( B(x) \)的验证,有:

\[ B(x) = \frac{1}{4096}[(1+x)^{16}+11(1+x)^{14}(1-x)^2+233(1+x)^{12}(1-x)^4+1003(1+x)^{10}(1-x)^6+1595(1+x)^{8}(1-x)^8+1017(1+x)^{6}(1-x)^{10}+219(1+x)^4(1-x)^{12}+17(1+x)^2(1-x)^{14}] \]

将上式输入Wolfram网站的在线计算工具验证,结果正确,如下图:

备注本文不是对MacWilliams恒等式的证明!本文仅是通过实际操作来理解MacWilliams恒等式

3. 基于对偶码重量分布的CRC校验码漏检概率计算公式

从前文可以看到,即便是对于12个信息位,4个校验位这样极小规模的CRC-4校验码,欲知其漏检概率,我们至少需要完成以下计算:

  • 依据生成多项式及CRC校验码计算方法,计算出该码组的4096个合法码字;
  • 计算出4096个码字的汉明重量,枚举出不同汉明重量值的数量;
  • 计算出每组汉明重量在给定误比特率下对应的概率;
  • 汉明重量≥1的概率之和即为本组CRC校验码在给定的误比特率下的漏检概率。

上述计算没有原理(或理解)上的难度,就是计算量特别大,几乎只能通过编制特定的计算机程序才能完成。而随着信息位长度的增加,很快(比如100-bits)令得计算机穷举法也成为一个理论,不再具备实际操作的可能。

我们已经知道,32位及以下的CRC校验码,通过计算机穷举计算其对偶码的重量分布 是具备工程实操性的。自然可以想到利用MacWilliams恒等式计算该CRC校验码的重量分布 A,从而计算出它的漏检概率\( P_{ud} \)。事实上,我们可以基于对偶码的重量分布,利用下式直接计算这个CRC校验码的漏检概率:

\[ P_{ud}=\left [ \frac{1}{2^r} \sum_{i=0}^{n}B_i(1-2p)^i \right ] - (1-p)^n
           =\left [ \frac{1}{2^r} \sum_{i=1}^{n}B_i(1-2p)^i \right ] + 2^{-r} - (1-p)^n \]

证明过程如下,已知CRC校验码在误比特率\(p\)的BSC信道下,其漏检概率的计算公式为:

\[ \begin{aligned} 
P_{ud} &= \sum_{i=1}^{n}A_i p^i (1-p)^{n-i} \\
            &= \left [ \sum_{i=0}^{n}A_i p^i (1-p)^{n-i} \right ] - (1-p)^n \\
            &= \left [ (1-p)^n \sum_{i=0}^{n}A_i (\frac{p}{1-p})^i \right ] - (1-p)^n
\end{aligned} \]

令\( x=\frac{p}{1-p} \),则\( \frac{1-x}{1+x}=1-2p \),\( 1+x=\frac{1}{1-p} \),代入MacWilliams恒等式,有:

\[ \begin{aligned} 
\sum_{i=0}^{n}A_ix^i &= \frac{1}{2^r}(1+x)^n\sum_{i=0}^{n}B_i(\frac{1-x}{1+x})^i  \\
\sum_{i=0}^{n}A_i(\frac{p}{1-p})^i &= \frac{1}{2^r} (\frac{1}{1-p})^n \sum_{i=0}^{n}B_i(1-2p)^i
\end{aligned} \]

将换元后的MacWilliams恒等式代入\( P_{ud} \) 的计算式,可得到基于对偶码的重量分布计算原CRC校验码漏检概率的公式:

\[ \begin{aligned} 
P_{ud} &= (1-p)^n\left [ \frac{1}{2^r}(\frac{1}{1-p})^n\sum_{i=0}^{n}B_i(1-2p)^i \right ] - (1-p)^n  \\
            &= \left [ \frac{1}{2^r}\sum_{i=0}^{n}B_i(1-2p)^i \right ] - (1-p)^n
\end{aligned} \]

若将CRC校验码漏检概率的两种计算方法写为一个计算式,有:

\[ P_{ud} = \sum_{i=1}^{n}A_ip^i(1-p)^{n-i}
            = \left [ \frac{1}{2^r}\sum_{i=0}^{n}B_i(1-2p)^i \right ] - (1-p)^n \]

上式须在\( p\in [0,1] \)区间内均有意义:

1) \( p=0 \)时,表明无比特错误,因无错误发生,自然漏检概率\( P_{ud}=0 \),且错误图样集合有且仅有一个代表无错的全0码字,有\( A_i=0, i>0 \),

\[ P_{ud}=\sum_{i=1}^{n}A_ip^i(1-p)^{n-i}
           =\sum_{i=1}^{n}0\times 0^i \times 1^{n-i} \equiv 0 \]

\[或\]

\[ P_{ud}= \left [ \frac{1}{2^r}\sum_{i=0}^{n}B_i(1-2p)^i \right ] - (1-p)^n
           = \left [ \frac{1}{2^r}\sum_{i=0}^{n}B_i \times  1^i \right ] - 1^n
           = \frac{1}{2^r} \times 2^r - 1 \equiv 0 \]

2) \( p=1 \)时,表明每个比特都是错误的,错误图样集合有且仅有一个全1码字,有\( A_i=0, i<n \)。当全1码字是本码组有效码字时,\(A_n=1\),仅有的一个错误图样不能检出,漏检概率\( P_{ud}=1 \),且对偶码全为偶重码字;当全1码字是本码组无效码字时,\(A_n=0\),仅有的一个错误图样全部检出,漏检概率\( P_{ud}=0 \) ,且对偶码的偶重码字和奇重码字数量相等。

\[ P_{ud}=\sum_{i=1}^{n}A_ip^i(1-p)^{n-i}
           =\sum_{i=1}^{n-1}0\times 1^i \times 0^{n-i} + A_n \times 1^n \times 0^0 =\left\{\begin{matrix}
1, 当 A_n=1 & \\ 
0, 当 A_n=0 & 
\end{matrix}\right. \]

\[或\]

\[ P_{ud}= \left [ \frac{1}{2^r}\sum_{i=0}^{n}B_i(1-2p)^i \right ] - (1-p)^n
           = \left [ \frac{1}{2^r}\sum_{i=0}^{n}B_i \times (-1)^i \right ] - 0^n
           = \left\{\begin{matrix}
1, & 当B_i全为偶数时  \\ 
0, & 当B_i奇偶数量相等时 
\end{matrix}\right.  \]

3) \( p=1-p=0.5 \)时,\( P_{ud} = 2^{-(n-k)} - 2^{-n} = 2^{-r} - 2^{-n} \)。

\[ P_{ud}=\sum_{i=1}^{n}A_ip^i(1-p)^{n-i}
           = \sum_{i=1}^{n}A_i (\frac{1}{2})^i (\frac{1}{2})^{n-i}
           = (\frac{1}{2})^n\sum_{i=1}^{n}A_i
           = (\frac{1}{2})^n(2^k-1)
           = 2^{-(n-k)} - 2^{-n} \]

\[或\]

\[ \begin{aligned} P_{ud} &= \left [ \frac{1}{2^r}\sum_{i=0}^{n}B_i(1-2p)^i \right ] - (1-p)^n
              = \left [ \frac{1}{2^r}\sum_{i=0}^{n}B_i \times  0^i \right ] - (\frac{1}{2})^n
              = \frac{1}{2^r} (B_0 \times 0^0 + \sum_{i=1}^{n}B_i \times 0^i) - 2^{-n} \\
           & = 2^{-r} \times 0^0 - 2^{-n} 
              = 2^{-r} - 2^{-n} \end{aligned} \]

从\( p\in [0,1] \)全概率区间的讨论来看, CRC校验码漏检概率\( P_{ud} \)的两种计算方法,都存在须将\( 0^0 \)定义为1的计算问题,而\( 0^0 \)的定义在不同应用领域是有争议的,不同软件(或编程语言)也可能有不同的定义,如下图所示(右图为EXCEL的定义):

为避免\( 0^0 \)可能导致的程序计算错误,可将漏检概率的计算式改写为

\[ \begin{aligned}
P_{ud} &= \left [ \sum_{i=1}^{n-1}A_i p^i (1-p)^{n-i} \right ] + A_n p^n \\
            &= \left [ \frac{1}{2^r} \sum_{i=1}^{n}B_i (1-2p)^i \right ] + 2^{-r} - (1-p)^n
\end{aligned} \]

4. 计算示例

以CRC-4/SAE J2716 SENT为例,其生成多项式\( G(x)=x^{4}+x^{3}+x^{2}+1 \),校验位长度\( r=4 \),信息位长度\( k=12 \),码字长度\( n=16 \)时,分别用两种方法计算该CRC校验码的漏检概率。从前文已知该校验码及其对偶码的重量枚举多项如下:

\[ \begin{aligned} 
A(x)&=17x^{14}+219x^{12}+1017x^{10}+1595x^{8}+1003x^{6}+233x^{4}+11x^{2}+1x^{0} \\
B(x)&= 1x^{16}+2x^{10}+4x^{9}+2x^{8}+4x^{7}+2x^{6}+1x^{0}
\end{aligned} \]

设信道的误比特率为\(p\),漏检概率如下计算:

\[ \begin{aligned} 
P_{ud_1}&=17p^{14}(1-p)^{2}+219p^{12}(1-p)^{4}+1017p^{10}(1-p)^{6}+1595p^{8}(1-p)^{8}+1003p^{6}(1-p)^{10} \\
          &+233p^{4}(1-p)^{12}+11p^{2}(1-p)^{14}+1p^{0}(1-p)^{16} \\ \\
P_{ud_2}&= 2^{-4} \times [(1-2p)^{16}+2(1-2p)^{10}+4(1-2p)^{9}+2(1-2p)^{8}+4(1-2p)^{7}+2(1-2p)^{6}] + 2^{-4} - (1-p)^{16}
\end{aligned} \]

例如,\( p=10^{-6} \)时,计算可得漏检概率\( \approx 1.1\times 10^{-11} \),更多的计算结果如下表:

值得注意的是,上表通过EXCEL计算获得。可以看到,两种方法计算的漏检概率并不完全相等,有着一个微小的偏差(见表格第5列)。两种计算方法的计算公式本身是精确的,二者计算结果的偏差由EXCEL的数值计算精度导致\(^{[8]}\),原理上来说,基于CRC校验码重量分布计算所得的\( P_{ud-1} \)在数值上的精度相对更高。

一般地,绘制本计算示例在\( 10^{-6}\sim0.5 \)误比特范围内,漏检概率曲线如下图:

其中:

  • 横轴为误比特率,纵轴为漏检概率,二者都是对数坐标;
  • bound曲线(虚线)为CRC校验码漏检概率所谓的\( 1/2^{r} \)上界;
  • Pud_1为基于CRC校验码的原码重量分布计算所得的漏检概率;
  • Pud_2为基于CRC校验码的对偶码重量分布计算所得的漏检概率。

码字长度\( n=16 \)时,CRC-4/SAE J2716的“漏检概率 vs 误比特率曲线”反映出:

  • 即便在\(p=0.01\)的极高误比特率BSC信道中,CRC-4/SAE J2716的漏检概率也远低于CRC-4所谓的\( 1/2^{r} \)上界(大约是上界值的1.5%);
  • 当\(p \leqslant 0.01\)时,误比特率每降低10倍,漏检概率降低100倍。

5. 总结

本文在充分理解CRC校验码及其对偶码生成矩阵原理的基础之上,手工计算出CRC-4/SAE J2716的对偶码在码字长度\(n=16\)时的重量分布,引用Koopman教授公布的该校验码对应的原码重量分布数据,并利用Wolfram的在线计算工具完成了MacWilliams恒等式的验算。

MacWilliams恒等式揭示了线性分组码的原码和对偶码重量分布之间的关系,本文详细推导了基于CRC校验码之对偶码重量分布计算其漏检概率的公式。进一步分析了\( 0^{0} \)在数学上的争议性定义对漏检概率计算的影响,并通过对公式的简单变换而规避该影响。

最后,本文分别基于原码和对偶码的重量分布,完成了CRC-4/SAE J2716在码字长度= 16,\( 10^{-6} \sim 0.5 \)误比特范围内的漏检概率计算。计算结果表明,在低误比特率条件下,基于对偶码重量分布计算CRC校验码漏检概率时,对计算的数值精度有着较高的要求。

6. 参考文献

  1. Robert J.McEliece. 信息论与编码理论[M]. 第2版. 北京:电子工业出版社, 2004.
  2. 傅祖芸. 信息论—基础理论与应用[M]. 第4版. 北京:电子工业出版社, 2015.
  3. 刘景伟. 信息论与编码理论基础课件第3~5章[EB/OL]. 西安电子科技大学.
  4. 苗付友. 信息论与编码技术课件第7章[EB/OL]. 中国科学技术大学.
  5. 陆以勤. 现代编码理论与技术课件第3章[EB/OL]. 华南理工大学.
  6. 周武旸. 编码理论课件第1章[EB/OL]. 中国科技大学.
  7. Philip Koopman. CRC-4/SAE J2716的重量分布[EB/OL]. Carnegie Mellon University
  8. Microsoft. 在Excel中,浮点运算得到的结果可能不准确[EB/OL].

相关文章:

  • STM32江科大----IIC
  • 004 Vue Cli脚手架(vue2)
  • 在CentOS上安装Docker需要注意的事项
  • 基于Arduino的ESP8266连接OneNET云平台(MQTT协议 物模型)(一)ESP8266固件烧录
  • Solidity基础入门—web3
  • GitHub 趋势日报 (2025年04月06日)
  • MATLAB中movmin函数用法
  • Python爬虫第5节-urllib的异常处理、链接解析及 Robots 协议分析
  • 深度探索:策略学习与神经网络在强化学习中的应用
  • WHAT - JavaScript 中 Object.defineProperty() 和 Proxy 对比
  • 使用LangChain Agents构建Gradio及Gradio Tools(4)——Gradio Tools:gradio_tools库
  • 小刚说C语言刷题——第17讲 循环之for语句
  • ARM处理器内核全解析:从Cortex到Neoverse的架构与区别
  • 优选算法第七讲:分治
  • 关于如何在 Ansible 中安全使用 `rm -rf` 或类似操作的完整指南
  • C++第14届蓝桥杯b组学习笔记
  • go原子操作和锁的区别是什么?
  • rtthread 软件SPI驱动, 支持mode0~3,MSB,LSB
  • 【C语言】编译和链接
  • 企业级 ClickHouse Docker 离线部署实践指南20250407
  • 婚庆网站制作/网站如何快速被百度收录
  • 找代理做网站多少钱/网络推广外包公司干什么的
  • 那个做图网站叫什么/谷歌seo关键词优化
  • 网站集成微信登录/b2b平台是什么意思啊
  • 如何做网站模板/网游百度搜索风云榜
  • 做网站泰安/看广告赚钱的平台