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

循环码编码解码matlab仿真(P124302009 罗睿章, P124302167张国峰)

循环码是线性分组码的一个重要子类。一个 (n,k)(n,k) 线性分组码称为循环码,当且仅当它的任意一个码字的循环移位仍是该码的码字。

循环码之所以重要,是因为它具有代数结构——可以用多项式来描述,编码和译码都可以用简单的移位寄存器电路实现。

1.1 码字的多项式表示

将码字 c=(c0,c1,…,cn−1)c=(c0​,c1​,…,cn−1​) 写成多项式:

c(x)=c0+c1x+c2x2+⋯+cn−1xn−1c(x)=c0​+c1​x+c2​x2+⋯+cn−1​xn−1

其中 ci∈GF(2)ci​∈GF(2),加法为模 2(即 XOR)。

1.2 生成多项式

(n,k)(n,k) 循环码的所有码字多项式都是某个 n−kn−k 次多项式 g(x)g(x) 的倍式:

g(x)=g0+g1x+⋯+gn−kxn−kg(x)=g0​+g1​x+⋯+gn−k​xn−k

其中 g0=1g0​=1,且 g(x)g(x) 整除 xn−1xn−1(在 GF(2)GF(2) 上即为 xn+1xn+1)。

:对于 (7,4)(7,4) 循环码,生成多项式 g(x)=1+x+x3g(x)=1+x+x3。
验证:(1+x+x3)(1+x+x2+x4)=1+x7(1+x+x3)(1+x+x2+x4)=1+x7,即 g(x)g(x) 整除 x7+1x7+1。✓


二、系统循环码编码

2.1 编码步骤

系统码要求信息位出现在码字的前 kk 位。编码过程:

  1. 将 kk 位信息多项式 m(x)m(x) 乘以 xn−kxn−k(左移 n−kn−k 位,空出校验位)
  2. 除以 g(x)g(x) 求余式 r(x)=m(x)⋅xn−k g(x)r(x)=m(x)⋅xn−kmodg(x)
  3. 码字 c(x)=m(x)⋅xn−k+r(x)c(x)=m(x)⋅xn−k+r(x)

写成矩阵形式:c=m⋅Gc=m⋅G,其中系统生成矩阵 G=[Ik∣P]G=[Ik​∣P]。

2.2 P 矩阵的构造

PP 的第 ii 行(i=1,…,ki=1,…,k)是 xn−k+i−1 g(x)xn−k+i−1modg(x) 的系数。

以 (7,4) 码为例推导:

n=7,k=4,n−k=3n=7,k=4,n−k=3,g(x)=1+x+x3g(x)=1+x+x3。

被除式模 g(x)g(x) 的余式P 矩阵行
x3x31+x1+x[1,1,0][1,1,0]
x4x4x+x2x+x2[0,1,1][0,1,1]
x5x51+x+x21+x+x2[1,1,1][1,1,1]
x6x61+x21+x2[1,0,1][1,0,1]

得到:

G7,4=[I4∣P]=[1000110010001100101110001101]G7,4​=[I4​∣P]=​1000​0100​0010​0001​1011​1110​0111​​

校验矩阵 H=[P⊤∣In−k]H=[P⊤∣In−k​]:

H7,4=[101110011100100111001]H7,4​=​110​011​111​101​100​010​001​​

满足 GH⊤=0GH⊤=0(模 2)。


三、伴随式译码

3.1 原理

设发送码字为 cc,接收向量为 r=c+er=c+e(ee 为错误图样)。

伴随式定义为:

s=r⋅H⊤s=r⋅H⊤

由于 c⋅H⊤=0c⋅H⊤=0,所以:

s=e⋅H⊤s=e⋅H⊤​

伴随式仅依赖于错误图样,与发送码字无关!

3.2 译码流程

  1. 计算 s=rH⊤s=rH⊤(模 2)
  2. 若 s=0s=0 ⇒ 认为无错,直接输出前 kk 位
  3. 若 s≠0s=0 ⇒ 查表找对应的错误图样 e^e^
  4. 纠正:c^=r⊕e^c^=r⊕e^
  5. 输出前 kk 位作为译码结果

3.3 (7,4) 循环码的伴随式表

(7,4)(7,4) 码有 n−k=3n−k=3 个校验位,伴随式空间大小为 23=823=8。恰好对应 7 种单比特错误 + 1 种无错情况:

伴随式 s错误图样 e错误位置
[0 0 0][0 0 0 0 0 0 0]无错误
[1 1 0][1 0 0 0 0 0 0]第 1 位
[0 1 1][0 1 0 0 0 0 0]第 2 位
[1 1 1][0 0 1 0 0 0 0]第 3 位
[1 0 1][0 0 0 1 0 0 0]第 4 位
[1 0 0][0 0 0 0 1 0 0]第 5 位
[0 1 0][0 0 0 0 0 1 0]第 6 位
[0 0 1][0 0 0 0 0 0 1]第 7 位

表是完备的——每个单比特错误有唯一伴随式,译码器不会混淆。

3.4 纠错与检错能力

(7,4)(7,4) 循环码的最小汉明距离 dmin⁡=3dmin​=3,因此:

  • 可纠正所有 t=⌊(3−1)/2⌋=1t=⌊(3−1)/2⌋=1 个错误
  • 可检测所有 dmin⁡−1=2dmin​−1=2 个错误

当发生双比特错误时,伴随式与某个单比特错误的伴随式相同(碰撞),译码器会错误地"纠正"到错误的码字,引入额外错误。这是 dmin⁡=3dmin​=3 的固有限制。


四、仿真设置

参数取值
码型(7,4) 和 (15,11) 循环码
生成多项式g7(x)=1+x+x3g7​(x)=1+x+x3,g15(x)=1+x+x4g15​(x)=1+x+x4
调制BPSK(0↦+1, 1↦−10↦+1,1↦−1)
信道AWGN
译码硬判决 + 伴随式查表
Eb/N0 范围0 ~ 9 dB
仿真终止累计 200 比特错误或 200 万帧

五、仿真结果

5.1 单比特纠错验证

发送消息 m=[1 0 1 1]m=[1011],编码得 c=[1 0 1 1 1 0 0]c=[1011100]。

在第 6 位注入错误(翻转),接收 r=[1 0 1 1 1 1 0]r=[1011110]。

  • 计算伴随式:s=rH⊤=[0 1 0]s=rH⊤=[010]
  • 查表得:e^=[0 0 0 0 0 1 0]e^=[0000010](第 6 位)
  • 纠正:c^=r⊕e^=[1 0 1 1 1 0 0]=cc^=r⊕e^=[1011100]=c
  • 译码:m^=[1 0 1 1]=mm^=[1011]=m ✓

遍历全部 7 个比特位置的错误,均正确纠正。

5.2 双比特错误局限性

在码字第 3、5 位同时注入错误。伴随式 s=[0 1 1]s=[011],查表对应第 2 位的单比特错误。译码器将第 2 位翻转,结果产生3 个比特错误——反而更差了。这验证了 dmin⁡=3dmin​=3 的码只能纠单错,不能纠双错。

5.3 BER 性能

Eb/N0 (dB)无编码 BER(7,4) BER(15,11) BER
07.86×10−27.86×10−21.13×10−11.13×10−11.24×10−11.24×10−1
32.29×10−22.29×10−22.73×10−22.73×10−23.22×10−23.22×10−2
55.95×10−35.95×10−37.19×10−37.19×10−34.01×10−34.01×10−3
77.73×10−47.73×10−45.82×10−45.82×10−42.11×10−42.11×10−4
93.36×10−53.36×10−51.57×10−51.57×10−52.36×10−62.36×10−6

编码增益(在 BER = 10−410−4 处):

  • (7,4) 循环码:0.31 dB
  • (15,11) 循环码:1.01 dB

5.4 结果分析

  1. 低 SNR 阈值效应:0~4 dB 时编码 BER 反而高于无编码。原因是冗余校验位消耗了发射能量——每编码比特分到的能量只有 Ec=R⋅EbEc​=R⋅Eb​,码率越低这个效应越明显。

  2. 高 SNR 编码增益:SNR ≥ 5 dB 后,纠错能力开始超过能量损失,编码增益逐渐显现。

  3. 码率的影响:(15,11) 以 0.73 的码率获得了比 (7,4)(码率 0.57)更好的性能。两者 dmin⁡dmin​ 相同,但 (15,11) 的冗余开销更小。这是信息论的一个核心思想:更长、更高码率的码通常更高效

  4. 硬判决的局限:本文使用硬判决译码(先硬判再译码),编码增益仅约 1 dB。若采用软判决(如基于对数似然比的译码),可额外获得约 2 dB 增益。

http://www.jsqmd.com/news/1091730/

相关文章:

  • Mi-Create终极指南:零基础打造个性化小米手表表盘
  • 如何将手机摄像头变成OBS专业直播源:DroidCam OBS插件完整指南
  • Nacos Derby反序列化漏洞深度剖析与安全加固实战
  • 2026权威实测|企业级AI编程应用场景全梳理:SaaS后台工具链选型指南
  • 将Android手机打造成随身Linux工作站:Termux + VNC实战指南
  • 手机号逆向查询QQ号:从遗忘到找回的3分钟解决方案
  • TPA2018D1音频放大器I2C寄存器配置与驱动开发实战
  • Docker--认识Docker网络
  • Unlock Music:浏览器端音乐解锁完全指南 - 3分钟学会解密各大平台加密音乐
  • 你的FastAPI又在服务器上“跑不起来”了?来,今天咱把打包这件事彻底聊透
  • Talkie: a 13B vintage language model from 1930 —— 当“复古”遇见千亿参数时代的思考
  • Harness Engineering:把 AI 真正接进工程流程
  • 查重率亮红灯反复修改,有哪些真正性价比高的的降AIGC工具推荐?
  • 终极XCOM 2模组管理解决方案:AML启动器完整指南
  • 如何在5分钟内用Nucleus Co-op让800+单机游戏支持本地分屏多人模式
  • 如何在Windows上实现完整的AirPlay 2投屏:终极开源解决方案实战指南
  • MoE大模型的智能调度:从1.8万亿参数到每token仅激活2%的工程真相
  • 158-基于FLask的风电场风力发电数据分析可视化
  • 3步解锁RPG游戏资源:RPG Maker MV/MZ文件解密工具完整指南
  • 从数据备份到数字资产:WeChatMsg如何重新定义聊天记录价值
  • 2026一线大厂Java八股文精选(附答案,高质量整理)
  • 荣耀X80 Pro Max vs ibbot青春版:一个治“电量焦虑”,一个治“AI焦虑”——1699元档的长辈刚需双雄对决
  • QModMaster:5分钟掌握开源免费的ModBus调试神器,让工业通信调试变得简单
  • 5步实现音乐自由:Unlock-Music帮你轻松解密各大平台加密音频文件
  • 应用服务(Web App)实战:用 .NET 代码把 Connection 耗尽与 SNAT 耗尽演练一次
  • 基于Feign+Resilience4j的微服务熔断防雪崩优化方案
  • 英雄联盟Akari助手:从手忙脚乱到从容不迫的游戏效率革命
  • Tribler安全漏洞响应实战:从预警到部署的完整操作手册
  • 如何彻底修复Windows更新失败?Reset Windows Update Tool终极解决方案
  • 金库·封条·记分牌:SHE 安全硬件密钥防护体系深度解析