BCH编码与译码(MATLAB实现)

这篇具有很好参考价值的文章主要介绍了BCH编码与译码(MATLAB实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

BCH码的定义

BCH码是由Bose、Chandhari 和 Hocquenhem 分别独立提出的一种能够纠正多个随机错误的循环码。
BCH 码的定义:给定任一有限域 GF(q)及其扩域 GF(qm)(其中 q 为素数或素数幂),m 为某一正整数,若码元取自 GF(q) 循环码的生成多项式 g(x) 的根集合 R 中有 σ-1 个连续根 αm0, αm0+1, αm0+σ-2,则该循环码称为 q 进制 BCH 码。其中 α∈GF(qm) 是域中的 n 级元素,αm0+i∈GF(qm)(0 ≤ i≤ σ-2),m0 是任意整数,通常取值为 0 或 1,当 m0=1 时生成的 BCH 码为狭义 BCH 码。如果在生成多项式 g(x) 的根中有 GF(qm) 的本原元,则 BCH 码的码长 n=qm-1,相应的 BCH 称为本原 BCH 码。
设 mi(x) 和 ei 分别是 αm0+i(i = 1,2,…,σ-2) 元素的最小多项式和级,则 BCH 码的生成多项式和码长分别为:
bch编码,matlab,预编码算法,安全,算法,矩阵

BCH码的性质

对于 BCH 码,有如下性质和结论。
①(BCH 限)BCH 码的最小距离 d 至少为 σ;若 BCH 码的生成多项式 g(x) 的根集合为 R = {αm0, αm0+c,αm0+(σ-2)c} 且 (n,c) = 1,则其最小距离 d ≥ σ。
②(HT 限)如果 BCH 码的生成多项式 g(x) 的根集合 R 中有 s 组 σ-1 个 α 的连续元素(α∈GF(qm) 是 n 级元素),即 R = {αm0+σi+j ,i = 0,1,…,s-1; j = 0,1,…,σ-2} 且 (n,α) = 1 ,则 BCH 码的最小距离 d ≥ σ + s - 1。类似的,(GHT 限)如果 BCH 码的生成多项式 g(x) 的根集合为 R= {αm0+σ1i+σ2j ,i = 0,1,…,s-1; j = 0,1,…,σ-2} 且 (n,σ1) < σ,σ ≥ 2 ,则 BCH 码的最小距离 d ≥ σ + s - 1。
③如果二进制本原 BCH 码的码长 n = 2m-1 ,设计距离为 σ = 2t+1 ,则如果满足 :
bch编码,matlab,预编码算法,安全,算法,矩阵
则,当 t --> 0 时 BCH 码的实际距离等于设计距离。
④若二进制 BCH 码的码长 n = ab 且设计距离为 σ = a ,则码的实际距离就为 a 。
⑤如果 GF(q) 上 BCH 码的码长为 n = qm-1 ,设计距离 σ = qh-1 ,则码的实际距离为 σ 。
⑥ GF(q) 上设计距离为 σ 的本原 BCH 码的实际最小距离 d ≤ qσ +q-2 。
在我们平时的编码中,主要讨论的是 q = 2 的二进制狭义 BCH 码。

BCH的构造

对于二进制 BCH 码,其码元取自 GF(2) 。根据 BCH 码的定义,若设 m0=1, σ=2t+1,α 为 GF(2m) 上的本原元【0、1】,若码以 α,α2,…,α2t 为根,每个根对应的最小多项式为 mi(x),i = 1,2,…,2t,则二进制 BCH 码的生成多项式为:
bch编码,matlab,预编码算法,安全,算法,矩阵
该 BCH 码能够纠正 t 个错误。
在特征为 2 的 GF(2m) 上 (αi2 和 αi 的最小多项式相同,因此 BCH 码以 α ,α3,…,α2t-1 为根,其生成多项式可以写成:
bch编码,matlab,预编码算法,安全,算法,矩阵
相应的码长为:
bch编码,matlab,预编码算法,安全,算法,矩阵
其中,ei(i = 1,3,…,2t-1) 为 αi(i = 1,3,…,2t-1) 的级。
根据生成多项式以及循环码(https://blog.csdn.net/weixin_45115771/article/details/125571083?spm=1001.2014.3001.5501)的循环移位特性可以构造 BCH 码的生成矩阵 G。若设 C(x) = q(x)g(x) 是 BCH 码的任一码字,则 α ,α3,…,α2t-1 为码多项式 C(x) 的根,即若码多项式为:
bch编码,matlab,预编码算法,安全,算法,矩阵
则有:
bch编码,matlab,预编码算法,安全,算法,矩阵
根据 CHT = 0,可知 BCH 码的校验矩阵 H 为:
bch编码,matlab,预编码算法,安全,算法,矩阵
对于二进制 BCH 码,有如下结论:
对于任意正整数 m 和 t,一定存在一个二进制 BCH 码,以 α ,α3,…,α2t-1 为根,码长为 n = 2m-1 或 2m-1 的因子,能够纠正 t 个错误,码中校验元的个数为 mt 个(生成多项式 g(x) 的次数)。

例:对于定义在 GF(24) 上的本原 BCH 码,m = 4,α 为 GF(24) 上的本原元,GF(24) 上的本原多项式 p(x) = x4+x+1,则针对不同的 t 值,可以构造不同码参数的 BCH 码(假设码长 n = 2m-1 = 15)。
①如果 t = 1,则构造的 BCH 码以 α 为根,同时 α2,α4,α8 也是该 BCH 码的根,α 的最小多项式就是本原多项式,所以生成多项式为 g(x) = x4+x+1,校验元的个数为 mt = 4,得到的是纠错能力 t=1 的(15,11,4)BCH 码。
参考下表:

幂次表示 二进制表示 十进制表示
0 0000 0
1 0001 1
α1 0010 2
α2 0011 3
α3 0100 4
α4=α+1 0101 5
α52 0110 6
α632 0111 7
α7= α3+α+1 1000 8
α8 = α2+1 1001 9
α93 1010 10
α102+α+1 1011 11
α1132 1100 12
α1232+α+1 1101 13
α1332+1 1110 14
α143+1 1111 15

根据表中 GF(24) 的元素列表及 BCH 码校验矩阵的形式,可以写出该 (15,11,4)BCH 码的检验矩阵 H 为:
bch编码,matlab,预编码算法,安全,算法,矩阵 及循环码生成多项式矩阵的构造方法可以写出该 BCH 码的生成矩阵 G。

②如果 t = 2,则构造的 BCH 码以 α ,α3 为根,α 的最小多项式为 m1(x) = x4+1,α3 的最小多项式为 m3(x) = x4+ x3+ x2+x+1,所以生成多项式为:g(x) = m1(x) m3(x) = x8+ x7+ x6+x4+1,校验元的个数为 mt = 8,得到的是纠错能力 t = 2 的(15,7,5)BCH 码。参考上表中 GF(24) 的元素列表及 BCH 码校验矩阵的形式,可以写出该 (15,7,5)BCH 码的校验矩阵 H 为:
bch编码,matlab,预编码算法,安全,算法,矩阵
根据校验矩阵 H 和生成矩阵 G 的对偶关系或者根据生成多项式 g(x) 及循环码生成多项式矩阵的构造方法可以写出该 BCH 码的生成矩阵 G。
③如果 t = 3,则构造的 BCH 码以α ,α3, α5 为根,α 的最小多项式为 m1(x) = x4+1,α3 的最小多项式为 m3(x) = x4+ x3+ x2+x+1,α5 的最小多项式为 m5(x) = x2+x+1,所以生成多项式为:g(x) = m1(x) m3(x)m5(x) = x10+ x8+ x5+x4+x2+x+1,校验元的个数为 mt = 12,得到的是纠错能力 t = 3 的(15,5,7)BCH 码。参考上表中 GF(24) 的元素列表及 BCH 码校验矩阵的形式,可以写出该 (15,5,7)BCH 码的校验矩阵 H 为:
bch编码,matlab,预编码算法,安全,算法,矩阵
④如果 t = 4,则构造的 BCH 码以α ,α3, α5 , α7为根,α 的最小多项式为 m1(x) = x4+1,α3 的最小多项式为 m3(x) = x4+ x3+ x2+x+1,α5 的最小多项式为 m5(x) = x2+x+1,α7 的最小多项式为 m7(x) = x4+ x3+1,所以生成多项式为:g(x) = m1(x) m3(x)m5(x)m7(x) = x14+ x13+x12+x11+x10+x9+ x8+x7+x6+ x5+x4+x3+ x2+x+1,得到的是(15,1,15)BCH 码,也即重复码。该码的设计距离为 σ = 2t+1 = 9,可以计算该码的实际最小距离 d = 15。在此情况下,设计距离不等于实际最小距离,码设计太过度了,该码实际可纠 (d-1)/2 = 7个随机错误。
与线性分组码和循环码类似,也可以通过增加全校验位实现扩展 BCH 码。

BCH码编码

BCH 码编码的关键是生成多项式的选取,或者说生成矩阵 G 和校验矩阵 H 的构造。对于定义在 GF(qm) 上分组长度 n = qm-1、可纠正 t 个错误的 BCH 码,编码步骤如下:
①选取一个次数为 m 的既约多项式并构造 GF(qm) 。
②求 αi,i = 1,3,…,2t-1的最小多项式 mi(x)。
③构造可纠 t 个错误的码生成多项式 g(x) = m1(x) m3(x)… m2t-1(x)。
④按照循环码的编码方法和编码电路及逆行编码(所有加法运算和乘法运算都在 GF(qm)。
在MATLAB中提供了 BCH 码的编码和译码相关函数和 Simulink 仿真模块,具体说明如下:
—bchgenpoly—:该函数根据码长 n 和信息组长度 k 计算狭义 BCH 码的生成多项式。语法结构为:

genpoly = bchgenpoly(n,k)
genpoly = bchgenpoly(n,k,prim_poly)
[genpoly,t] = bchgenpoly(……)

其中,输入参数 n 为码长,k 为信息组长度,码长 n 必须等于 2m-1,3 ≤ m ≤ 16,输入 prim_poly 为按幂次下降顺序排列的整数,表示本原多项式的系数。输出 genpoly 是 GF(2) 上按幂次下降顺序排列的生成多项式系数,输出 t 表示该码的纠错能力。
例:生成纠错能力为 3 的(15,5)BCH 码的生成多项式。

m = 4;
n = 2^m-1; % 码长
k = 5;     % 信息组长度
[genpoly,t] = bchgenpoly(n,k)  % 计算生成多项式和纠错能力
disp(genpoly);  % 显示 genpoly
disp(t);        % 显示 t

输出结果:

genpoly:
  1×11 gf 数组 - 属性:
            x: [1 0 1 0 0 1 1 0 1 1 1]
            m: 1
    prim_poly: 3
t:
     3

有了生成多项式,就可以进行 BCH 码的编码和译码了。

—bchnumerr—:该函数计算给定参数条件下 BCH 码的可纠正错误数,语法结构为:

T = bchnumerr(N)
T = bchnumerr(N,K)

语法结构 1 表示在给定码长 N 的条件下返回所有可能的信息组长度 K 组成不同 (N,K) BCH 码时的可纠正错误数 T,其返回值 T 为一个包含 3 列元素的矩阵,第 1 列为码长 N ,第 2 列为可能的信息组长度 K,第3列为纠错能力T。
例:当N=15时,输出结果T为:

T = bchnumerr(15);
T = 
    15    11     1
    15     7     2
    15     5     3

也即对于N=15的情况,可以生成信息组长度K分别为 11 , 7 和 5 的 BCH 码,其纠错能力分别为 1、2 和 3。
语法结构 2 要求输入信息组长度 K,函数执行后返回 (N,K) BCH 码的纠错能力 T。

—bchenc—:该函数为 BCH 码的编码函数,语法结构为:

code = bchenc(msg,n,k)
code = bchenc(……,paritypos)

该函数使用狭义(n,k)BCH 码的生成多项式对输入信息组 msg 进行 BCH 码编码。其中信息组 msg 定义在 GF(2) 上,可以是矩阵形式,每行包含 k 个元素作为一个信息组。最左边为最高位符号。在输出的 GF(2) 域上编码码字 code 中检验符号位于每个码字的右端。
语法结构 2 中参数 paritypos 用于指定检验符号的位置,值可以是 “end” 或 “beginning”,分别表示校验符号位于输出码字信息组的开始部分和结束部分,默认值为 “end”。
例:假设对(15,5)BCH 码进行编码,输入为:

code = bchenc(msg,n,k)
code = bchenc(……,paritypos)

若输入为:

msg = gf([1 0 1 0 1; 0 1 0 1 0 ]);
code = bchenc(msg,15,5);

则输出为:

code:
2×15 gf 数组 - 属性:
            x: [2×15 uint32]
			   [1,0,1,0,1,1,0,0,1,0,0,0,1,1,1;
				0,1,0,1,0,0,1,1,0,1,1,1,0,0,0]
            m: 1
    prim_poly: 3

BCH码译码

一、伴随式译码
BCH 码的伴随式译码分为如下3个步骤:
①根据接收码多项式 R(x) ,利用公式:

计算伴随式 S(x)。
②根据伴随式 S(x),在码字纠错能力范围内得到错误图样 E(x) 的估计 E^(x)。
③估计发送码字 C^(x) = R(X)+E^(x)。

二、迭代译码
BCH 码伴随式译码中最复杂的部分是错误位置多项式系数的计算和根的求解。Berlekamp 提出了一种通过迭代方式求解错误位置多项式根的方法(BM 算法),结合 Chien搜索电路,可以加快错误多项式的求解,简化译码过程。
BCH 码的迭代译码分为如下5个步骤:
①根据接收码多项式 R(x),利用公式:

计算伴随式 S(x)。
②用 BM 算法求解错误位置多项式的系数。
③用 Chien 搜索法求错误位置多项式的根。
④计算错误值(对于二元码,可以省略该步骤)。
⑤根据错误位置(和错误值)获得错误图样 E(x) 的估计 E^(x)并译码, C^(x) = R(X)+E^(x)。

—bchenc—:该函数为 BCH 码的译码函数,使用BM算法进行 BCH 码的译码。语法结构为:

decoded = bchdec(code,n,k)
decoded = bchdec(……,paritypos)
[decoded,cnumerr] = bchdec(……)
[decoded,cnumerr,ccode] = bchdec(……)

其中,输入参数 n 和 k 分别表示码长和信息组长度,code 为定义在 GF(2) 上的接受码符号序列,paritypos 用于指定校验符号的位置(与 bchenc 中相对应)。
输出参数中 decoded 表示译码输出码字,定义在有限域上,可以是矩阵形式,每一行对应输入 code 中一行码字的译码输出。如果 bchdec 函数检测到在 code 的行中出现超过其纠错能力 t 的错误(错误数大于 t),则译码失败,这种情况下 bchdec 函数因输出输入 code 中每一行的前 k 个符号(默认 paritypos = “end”)。输出参数中 cnumerr 返回的是列矢量,其中每个元素是对输入 code 的每行译码时纠正的错误说,如果某行译码失败,则 cnumerr 列矢量中相应的元素值为 -1。输出参数中 ccode 返回的是纠正了 code 中的错误之后的码向量(或矩阵),其格式与输入 code 相同。如果译码失败,则直接输出 code 中相应的行。
例:对(15,5)BCH 码进行编译码。

n = 15;
k = 5;
dat = randi([0,1],4,k);
msg = gf(dat);
code = bchenc(msg,n,k);
decode = bchdec(code,n,k);
% 检查译码过程是否正确
chk = isequal(decode,msg);

在上述例子中,要求编码函数 bchenc 和译码函数 bchdec 中参数 paritypos 的值必须相同,才能正确译码。文章来源地址https://www.toymoban.com/news/detail-808530.html

到了这里,关于BCH编码与译码(MATLAB实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分叉币的发展史及价值|ETH、BCH、BSV 2020-03-08

      昨天有人问我比特币、BCH、BSV和ETH的价值,在这几个币中除了比特币,其它几个币有一个共同的特性,那就是它们都是分叉币,所以看到这个问题,我想到一个话题:分叉币的价值。   在数字货币中我们也能经常看到“分叉币”,越是知名的数字货币越容易出分叉币。那为

    2024年02月13日
    浏览(41)
  • m基于matlab的polar码误码率仿真,译码算法采用SC算法

    目录 1.算法仿真效果 2.MATLAB核心程序 3.算法涉及理论知识概要 4.完整MATLAB matlab2022a仿真结果如下:         极化码(英语:Polar code)是一种前向错误更正编码方式,用于讯号传输。构造的核心是通过信道极化(channel polarization)处理,在编码侧采用方法使各个子信道呈现出不

    2024年02月10日
    浏览(34)
  • 单载波频域均衡matlab仿真,包括卷积编码维特比译码,矩阵交织,QPSK调制解调,导频插入,MMSE-FDE频域均衡

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB         频域均衡是从校正系统的频率特性出发,利用一个可调滤波器的频率的频率特性去补偿信道或系统的频率特性,使包括可调滤波器在内的基带系统的总特性接近无失真传输条件。频域均衡是在频域上进行的,

    2023年04月08日
    浏览(48)
  • 基于物理层网络编码的相位同步算法matlab仿真

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 matlab2022a         基于物理层网络编码的相位同步算法是一种利用物理层网络编码技术来实现相位同步的算法。这种算法的原理是将两个或多个相位不同的信号进行叠加,产生

    2024年02月09日
    浏览(36)
  • 基于机会网络编码(COPE)的卫星网络路由算法matlab仿真

    目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1机会网络编码(COPE)概述 4.2COPE算法原理 4.2.1 编码机会预测 4.2.2 编码决策 4.2.3 数据包编码 4.2.4 数据包传输 4.2.5 数据包解码 5.完整程序         基于机会网络编码(COPE)的卫星网络路由算法。基

    2024年01月25日
    浏览(40)
  • MATLAB初始化智能算法编码-产生随机不重复整数序列矩阵

    产生随机不重复整数序列矩阵是智能算法最常用的操作之一,以下给出具体方法: clc;close all;clear all;warning off;%清除变量 rand(\\\'seed\\\', 100); randn(\\\'seed\\\', 100); format long g; N=10; % 设定优化问题维数 lb=0*ones(1,N);% 自变量上限 ub=1*ones(1,N);% 自变量下限 popsize=10;% 种群数 Chrom=mygenfun(popsize,N,lb,u

    2024年01月24日
    浏览(42)
  • Turbo编译码Matlab仿真解读 -- WuYufei_matlab

    吴雨霏博士版本的Turbo编译码仿真较为经典,以下就原码进行解读。 “ turbo_sys_demo.m ” 是程序的主体框架,Turbo编译码均在此程序展开。程序开始需要用户需要如下几个参数: 1)译码算法 :选择使用0:Log-MAP,1:SOVA     这是让用户选择使用何种Turbo译码算法。若Tubo为多次

    2023年04月22日
    浏览(31)
  • MATLAB——PCM编译码实验

    1.掌握PCM编码原理和译码原理 2. 练习使用Matlab编程实现PCM编码和译码 3. 了解失真度的概念,能对译码结果进行失真度分析 脉冲编码调制 就是把一个时间连续,取值连续的模拟信号变换成时间离散,取值离散的数字信号后在信道中传输。脉冲编码调制就是对模拟信号先抽样,

    2024年02月02日
    浏览(32)
  • Polar码的编码思想以及SC译码算法

    1.3.1BEC信道 1.3.2信道联合极化编码思想 2009年在“IEEETransaction on Information Theory”期刊上发表论文详细地阐述了信道极化,并基于信道极化给出了一种新的编码方式,名称为极化码。从代数编码的角度来说,只要给定编码长度,极化码的编译码结构就唯一确定了;从概率编码的

    2024年02月06日
    浏览(39)
  • 如和使用matlab实现香农编码和解码

    在网上看了好多 , 都是对香农进行编码的案例 , 却没有 进行解码的操作 , 今天就来补齐这个欠缺 定义一个字符串类型的变量text,其值为’你好’。 调用函数shannonCoding对文本信息进行编码,并将编码、解码、平均码长和编码效率作为四个返回值保存到变量encoded, decoded, avgC

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包