BCH码(能纠正多个随机错误的循环码)

本文深入探讨了BCH码的工作原理及编码、译码过程。首先介绍了伽罗华域和多项式的概念,接着分析了BCH码的设计思路,并通过实例解释了为何需要使用本原多项式。随后详细阐述了BCH码的编码过程,包括如何利用本原多项式来纠正多个错误,最后讲解了BCH码的译码步骤。

PS:课上讲的也是编解码流程,也没有原理,网上也没找到每一步的原理,想要了解设计思路还是需要去找一下原版的论文。

参考blog:
【1】【举例子详细分析】BCH码(BCH code)

1. 伽罗华域和多项式

  见之前的blog伽罗华域GF

2. 提出背景和思路

  奇偶校验码只能检查出错误而不知道具体是哪里出错。
  hamming码只能纠正 1 bit 错误。
  在GF ( 2 q ) (2^q) (2q)中,用多项式表示对应的有限域中的数值,多项式又可表示成二进制bit流的形式,等于二进制bit流与符号之间的一一映射,同时二进制多项式加法和二进制的按位异或等同(二进制流所受的干扰可用加法表示),多项式乘法及其逆运算能够实现多项式的恢复,本原多项式能保证逆运算结果具有唯一性。

  现假设待传输的消息用二进制流对应的 m ( x ) m(x) m(x)表示,乘上一个编码多项式 p ( x ) p(x) p(x),传输过程收到干扰可表示为 e ( x ) e(x) e(x),则接受到: c ( x ) = m ( x ) p ( x ) + e ( x ) c(x)=m(x) p(x)+e(x) c(x)=m(x)p(x)+e(x)如果接受端也知道p(x),那么就能得到 m ( x ) m(x) m(x) e ( x ) e(x) e(x)

本原元→本原多项式:

  1. GF ( 2 q ) (2^q) (2q)上的本原元是一个元素, 在域中的任何非零元素都可以表示为它的方幂
  2. 任意一个有限域 GF ( 2 q ) (2^q) (2q)必有一个本原元 α \alpha α
  3. 本原元的阶数为 2 q − 1 2^q-1 2q1,即 α 2 q − 1 + 1 = 0 \alpha^{2^q-1}+1=0 α2q1+1=0
  4. 本原多项式 p ( x ) p(x) p(x)是以本原元 α \alpha α为根的、首项系数为1的最低阶不可约多项式

3. 案例:为什么需要本原多项式

对于GF ( 2 4 ) (2^4) (24),有本原多项式 p ( x ) = x 2 + x + 1 p(x)=x^{2}+x+1 p(x)=x2+x+1
   m ( x ) m(x) m(x) 1001 1001 1001,而编码多项式 p ( x ) p(x) p(x) 1101 1101 1101,则 m ( x ) ∗ p ( x ) = 1100101 m(x)*p(x)=1100101 m(x)p(x)=1100101。若收到了干扰 e ( x ) = 0000010 e(x)=0000010 e(x)=0000010,则接受到 1100111 1100111 1100111,

e(x)e(x)/p(x) 的余项
10000001000000
01000000100000
00100000010000
00010001100000
00001000110000
00000101110000
00000011010000

  从表中可看出, e ( x ) e(x) e(x)和所得余项一一对应,通过余项结果可找到对应的 e ( x ) e(x) e(x)。如果采用 p ( x ) = 10001 = 101 ∗ 101 p(x)=10001=101*101 p(x)=10001=101101,1000000和0000100除以10001后余项均为1000000。

4. BCH码编码过程

  思想:一个本原多项式纠正一个错误,通过修正编码多项式 c ( x ) = m ( x ) Q ( x ) + e ( x ) c(x)=m(x) Q(x)+e(x) c(x)=m(x)Q(x)+e(x)令其中 Q ( x ) = p ( x ) p 3 ( x ) p 5 ( x ) ⋯ p 2 t − 1 ( x ) Q(x)=p(x) p_{3}(x) p_{5}(x) \cdots p_{2 t-1}(x) Q(x)=p(x)p3(x)p5(x)p2t1(x),p(x)是本原多项式,实现纠正多个错误。

   p 2 t − 1 ( x ) p_{2 t-1}(x) p2t1(x)的性质(a mod b=c,表明a除以b余数为c):

  1. p 2 i − 1 ( x )   m o d   p ( x ) = 0 , i = 2 , . . . , t p_{2 i-1}(x) \, mod \, p(x)=0,i=2,...,t p2i1(x)modp(x)=0i=2,...,t
  2. 本原BCH码 p ( α ) = p ( α 3 ) = . . . = p ( α 2 t − 1 ) = 0 p(\alpha)=p(\alpha^{3})=...=p(\alpha^{2t-1})=0 p(α)=p(α3)=...=p(α2t1)=0

  以 n = 2 4 − 1 = 15 n=2^{4}-1=15 n=241=15, 纠错数量 t = 3 t=3 t=3 的本原BCH码为例,设 α \alpha α为GF ( 2 4 ) (2^4) (24)的本原元,本原多项式为 p ( x ) = x 4 + x + 1 p(x)=x^{4}+x+1 p(x)=x4+x+1,那么 Q ( x ) = p ( x ) p 3 ( x ) p 5 ( x ) Q(x)=p(x) p_{3}(x) p_{5}(x) Q(x)=p(x)p3(x)p5(x),现有 p ( x ) = x 4 + x + 1 = ( x − α ) ( x − α 2 ) ( x − α 4 ) ( x − α 8 ) p(x)=x^{4}+x+1=(x-\alpha)(x-\alpha^2)(x-\alpha^4)(x-\alpha^8) p(x)=x4+x+1=(xα)(xα2)(xα4)(xα8),画表得到其共轭根为 α 3 , α 6 , α 12 , α 9 \alpha^{3}, \alpha^{6}, \alpha^{12}, \alpha^{9} α3,α6,α12,α9,故 p 3 ( x ) = ( x − α 3 ) ( x − α 6 ) ( x − α 2 ) ( x − α 9 ) = x 4 + x 3 + x 2 + x + 1 p_{3}(x)=(x-\alpha^{3})\left(x-\alpha^{6}\right)\left(x-\alpha^{2}\right)\left(x-\alpha^{9}\right)=x^{4}+x^{3}+x^{2}+x+1 p3(x)=(xα3)(xα6)(xα2)(xα9)=x4+x3+x2+x+1,剩余两根构成 p 5 ( x ) = ( x − α 5 ) ( x − α 10 ) = x 2 + x + 1 p_{5}(x)=\left(x-\alpha^{5}\right)\left(x-\alpha^{10}\right)=x^{2}+x+1 p5(x)=(xα5)(xα10)=x2+x+1。此时 g ( x ) = p ( x ) p 3 ( x ) p 5 ( x ) = x 10 + x 8 + x 5 + x 4 + x 2 + x + 1 g(x)=p(x) p_{3}(x) p_{5}(x)=x^{10}+x^{8}+x^{5}+x^{4}+x^{2}+x+1 g(x)=p(x)p3(x)p5(x)=x10+x8+x5+x4+x2+x+1

此时n=15,t=3,deg(g(x))= 10, k=n-deg=5,t=3,设计的码距d=2t+1,实际码距和设计码距相等

PS:(以上推导过程为法一,适合做题不适合编程)
在这里插入图片描述法二:上图中极小多项式是 x 2 q − 1 x^{2^q-1} x2q1的因式分解结果,一个BCH码的生成多项式也可由 L C M [ f 1 ( x ) , f 2 ( x ) , … , f 2 t ( x ) ] LCM[f_1(x),f_2(x),…,f_{2t}(x)] LCM[f1(x),f2(x),,f2t(x)]给出,详细可见参考文献【1】

5. BCH码译码过程

由于 m ( x ) Q ( x ) m(x) Q(x) m(x)Q(x) α 1 , α 2 , … , α 2 t \alpha^{1}, \alpha^{2}, \ldots, \alpha^{2 t} α1,α2,,α2t为根。想要知道错误图样,需要知道在位置i是否发生错误。
定义 e ( x ) = ∑ i = 0 n − 1 e i x i = ∑ l = 1 γ Y l x i l e(x)={\sum_{i=0}^{n-1} e_{i} x^{i}}=\sum_{l=1}^{\gamma} Y_{l} x^{i_{l}} e(x)=i=0n1eixi=l=1γYlxil i l i_{l} il表示错误位置。
译码五步:
在这里插入图片描述
5.1 伴随多项式的计算
法一:接收端知道 Q ( x ) Q(x) Q(x),能得到对应的 h ( x ) = x n + 1 Q ( x ) h(x)=\frac{x^n+1}{Q(x)} h(x)=Q(x)xn+1,从而写出H,即可计算s(x)
法二:
在这里插入图片描述

推导过程:
在这里插入图片描述

5.2 错误位置多项式系数的求解:
在这里插入图片描述
5.3 错误位置的确定
在这里插入图片描述
5.4 计算对应错误位置上的错误数值
在这里插入图片描述
5.5 得到e(x),输出结果
在这里插入图片描述

03-21
### BCH的编解原理及其在IT领域的应用 #### 什么是BCHBCH是一种能够纠正多个随机错误的循环纠错,广泛应用于通信系统和存储设备中以提高数据传输的可靠性[^1]。它通过增加冗余信息来检测并修正接收到的数据中的错误。 #### BCH的编原理 BCH的编过程基于有限域上的多项式运算。具体来说,在MATLAB环境中实现BCH时,通常会定义一个生成多项式 \( g(x) \),该多项式的根对应于特定的伽罗瓦域元素。发送方利用这个生成多项式将原始消息转换成带有校验位的形式。这样做的目的是使得接收端可以依据这些额外的信息识别并修复可能发生的误。 以下是使用MATLAB进行基本BCH的一个简单例子: ```matlab % 定义参数 n 和 k, 表示 (n,k)-BCH n = 15; % 字长度 k = 7; % 数据部分长度 % 创建待编的消息向量 msg msg = randi([0,1],1,k); % 初始化 bchenc 函数完成编操作 codedMsg = bchenc(msg,n,k); disp('Encoded Message:'); disp(codedMsg); ``` 上述代片段展示了如何创建一段短消息并通过调用 `bchenc` 来获得经过BCH处理后的版本。 #### 解机制概述 当接收机获取到含噪信号后,需执行逆向步骤恢复初始数据流。这涉及计算伴随式 S 并判断是否存在错误;如果存在,则定位错误位置并加以更正。整个流程同样可以在MATLAB里借助内置函数轻松达成如下所示: ```matlab % 假设 receivedCode 是含有潜在误差的实际接受序列 receivedCode = codedMsg; % 添加人工引入的一些翻转比特作为模拟噪声效果 errorPattern = [zeros(1,round(n/2)) ones(1,floor((n-k)/4))]; noisyCode = xor(receivedCode,errorPattern); % 使用 bchdec 进行解尝试找回原信息 [decodedData,errFlag] = bchdec(noisyCode,n,k); if errFlag>0 fprintf('Decoding detected and corrected errors.\n'); else fprintf('No error found during decoding process.\n'); end disp('Recovered Original Data:'); disp(decodedData); ``` 此脚本说明了即使面对一定水平的干扰情况之下仍能成功还原干净资料的能力。 #### 应用场景举例 由于具备强大的多比特错纠功能,BCH技术被普遍采纳至诸多高科技产品之中比如光盘(CD/DVD),卫星通讯链路还有无线网络标准等等。特别值得注意的是,NAND闪存控制器也经常采用此类算法保障长期储存稳定性和读写精确度。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值